24 | 实战:处理四层流量,实现Memcached Server
该思维导图由 AI 生成,仅供参考
原始需求和技术方案
- 深入了解
- 翻译
- 解释
- 总结
使用OpenResty实现memcached server的实战过程。作者首先明确了需求和技术方案,解释了为什么选择使用OpenResty来实现memcached server,而不是直接引入memcached。接着,作者提到了测试驱动开发的思想,并给出了一个最简单的测试案例。然后,作者搭建了Nginx的配置文件和代码框架,展示了如何在stream上下文中监听端口,并使用shared dict来存储数据。最后,作者展示了入口函数的主要逻辑,虽然还没有做异常处理和具体的操作函数,但这个框架已经完整表达了memcached server的逻辑。整体来说,本文以实战的方式介绍了如何使用OpenResty来实现一个memcached server,强调了需求明确、测试驱动开发和搭建框架的重要性。文章中还提供了填充代码和实现`get`和`set`函数的示例,以及对调试工具的讨论。最后,作者留下了动手作业,鼓励读者通过测试案例来完善实现代码,并期待读者通过后续学习进一步完善版本。
《OpenResty 从入门到实战》,新⼈⾸单¥59
全部留言(17)
- 最新
- 精选
- 2xshu老师,这篇文章我反复看了几遍。其实我还是没有领会做这个项目的真正目的和使用场景呢。因为我理解的是即是做了这样封装,和直接使用ngx.shared.DICT感觉没什么区别呢?ngx.shared.DICT操作也是原子操作的,并且ngx.shared.DICT也是一个全局共享的变量。
作者回复: 最大的不同之处在于可以支持集群,而共享字典只能是单机使用。
2019-07-2256 - 罐头瓶子openresty lua的断点调试现在可以使用vscode插件的方式来实现。插件的名字叫luaide,我现在正在使用,挺好用的。
作者回复: 👍
2019-07-195 - katichar在http和stream之前实现数据共享,如果对性能有要求,是不是resty.memcached是一个比较好的方案?
作者回复: 走了一层外部的网络通信,性能会有一些影响,但貌似也是当前的一个方案。最好是内部打通,期望 OpenResty 实现这个功能。
2019-07-1923 - 写点啥呢请问老师,你在@2xshu同学的留言里提到了这个实现支持集群,而共享字典只能单机使用,我没有理解,请问支持集群是指可以跨物理机共享存储么?那具体是如何做到的呢?
作者回复: 你使用 memcached 的客户端,都是支持一致性 hash 这样的算法,这样就等于是实现了集群储存了。
2019-09-0621 - HelloBug我在执行这里的例子的时候,解决了一些语法错误之后,已经能够正常的在resty -e执行时设置和获得key value了,但是在服务器侧循环报一个错误,2019/07/27 13:35:43 [error] 25017#25017: *1 attempt to receive data on a closed socket: u:00007FDA656A5530, c:00007FDA655FE3F0, ft:0 eof:1, client: 127.0.0.1, server: 0.0.0.0:11212。这个错误,通过设置指令lua_socket_log_errors off;的确关闭了错误的循环打印,这里的根本原因是,因为server.lua里是一个循环,然后客户端断开socket了,服务侧还在循环读取数据,导致一直提示这个错误吗?
作者回复: 是的,这种错误是可以忽略的
2019-07-2741 - helloworld和2xshu同学的感受一样,使用共享字典封装模拟成memcached服务,和直接使用共享字典,对于项目需求到低有啥本质区别,对于这个项目需求直接使用共享字典不就行了嘛,为啥还要费事的去封装一遍呢,求解惑。
作者回复: 直接使用共享字典就没有办法做到集群了,只能用本机的内存资源
2019-07-2421 - 连边我写了一个空的代码,直接写一个死循环,会直接导致cpu 100%。这是正常情况?
作者回复: 要看下循环里面具体做了什么
2019-08-20 - 连边老师见字好。我来实现文中逻辑,但是最后总说我连接close,详情如下:https://www.iffor.cn/job/openresty-memcached-server.html,有时间的时候帮我看看。我这边准备按照memcache去找一找原因。
作者回复: 你给的链接中没有具体的报错信息。另外,/usr/local/openresty3/lib/resty/memached 这个目录是拼写错了吗?最后的目录名应该 memcached 而不是 memached,少了一个字母 c
2019-07-312 - 洁老师,这次示例memcached server还是没有调通,您在后面答疑的时候能大约讲一下吗
作者回复: 是哪一部分的问题呢?有具体的报错吗?
2019-07-30 - helloworld如果是为了实现memcached集群,那服务端口就不能监听127.0.0.1了,对吧
作者回复: 是的,这个需要修改下
2019-07-24