我们是用的moxi 来代理实现负载均衡
-----邮件原件-----
发件人: openresty@googlegroups.com [mailto:openresty@googlegroups.com] 代表 Yichun Zhang (agentzh)
发送时间: 2014年6月24日 5:29
收件人: 史海Sgenmi
抄送: openresty
主题: [openresty] Re: openresty lua memcache分布式连接问题
Hello!
2014-06-22 1:13 GMT-07:00 史海Sgenmi:
> 请教lua memcache连接问题。
>
> 我看了一下,lua memcache扩展,
>
> 只能建产一个memcache的连接
>
你在 Lua 里面实例化出来多个 resty.memcached 对象就是多个 memcached 连接。
> 如果我是分布式的memcache,我应该怎么连,像php,可以用addserver方法来处理。
> 在,memcached.lua里,没有找到类似的方法,
>
lua-resty-memcached 库作为基础组件,出于灵活度和性能方面的考虑,并没有提供直接提供 load balancing
的功能,所以你需要在 lua-resty-memcached 的基础之上自己计算需要连接的目标。比如你可以从一组 server
地址里以你自己的规则选取一个 server 作为 connect() 的目标,同时你可以把选择的状态保存在你自己的 Lua
模块级别的变量里面(见 https://github.com/openresty/lua-nginx-module#data-sharing-within-an-nginx-worker
)。当然,你也可以把选取状态放在共享内存字典中(见
https://github.com/openresty/lua-nginx-module#ngxshareddict )。
当然,这样的上层 load balancer 可以抽象成一个通用的 Lua 库,这样不仅可以用于
lua-resty-memcached,还可以用于 lua-resty-mysql 等其他的基础库。欢迎贡献开源的库实现 :)
> 分布式的memcache是不是一定要通过代理管理如:magent 这样方式才能用上lua的memcache
>
专门的代理层会引入额外的性能开销(比如额外的 socket 通信的开销),建议直接在 memcached 客户端进行负载平衡。
另外,建议加入 openresty 中文邮件列表讨论这样的问题,谢谢合作!见 https://groups.google.com/group/openresty
同时抄送给该列表。
Regards,
-agentzh
--