加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

Nginx多进程高并发、低时延、高可靠机制在缓存twemproxy代理中的应用

发布时间:2019-03-14 16:11:59 所属栏目:建站 来源:y123456yz
导读:1. 开发背景 现有开源缓存代理中间件有twemproxy、codis等,其中twemproxy为单进程单线程模型,只支持memcache单机版和redis单机版,都不支持集群版功能。 由于twemproxy无法利用多核特性,因此性能低下,短连接QPS大约为3W,长连接QPS大约为13W,同时某些

原生twemproxy节点机器上的时延分布:

Nginx多进程高并发、低时延、高可靠机制在缓存twemproxy代理中的应用 

另一个改造后的twemproxy节点机器上的时延分布:

总结:替换线上两个proxy中的一个后,客户端时间降低了一倍,如果线上集群两个代理都替换为改造后的twemproxy,客户端监控时延预计会再降低一倍,总体时延降低3倍左右。

此外,从监控可以看出,改造后的twemproxy时延更低,更加稳定,无任何波动。

6.2 参考nginx多进程改造后的twemproxy线下压测结果(开启reuseport功能)

监听同一个端口,数据长度100字节,压测结果如下:

linux内核版本:linux-3.10

物理机机型: M10(48 cpu)

多进程监听同一个端口,数据长度150字节,压测结果如下:

linux内核版本:linux-3.10

物理机机型: TS60 (24 cpu)

7 总结

7.1 多进程、多线程机制选择

选择参照nginx多进程机制,而不选择多线程实现原因主要有:

1) 多进程机制无锁操作,实现更容易

2) 多进程的代理,整个worker进程无任何锁操作,性能更好

3) 如果是多线程方式,如果代码出现bug段错误,则整个进程挂掉,整个服务不可用。而如果是多进程方式,因为bug触发某个worker进程段错误异常,其他工作进程不会受到如何影响,20个worker进程,如果触发异常,同一时刻只有有1/20的流量受到影响。而如果是多线程模式,则100%的流量会受到影响。

4) worker进程异常退出后,master进程立马感知拉起一个新进程提供服务,可靠性更高。

5) 配置热加载、程序热升级功能实现更加容易

7.2 参照nginx改造后的twemproxy特性

支持nginx几乎所有的优秀特性,同时也根据自己实际情况新增加了自有特性:

1) master+多worker进程机制

2) 适配所有linux内核版本,内核低版本惊群问题避免支持

3) quic_ack支持

4) reuser_port适配支持

5) worker进程异常,master进程自动拉起功能支持

6) 90%、95%、98%、100%平均时延统计功能支持

7) memcache单机版、集群版支持

8) redis单机版、集群版支持

9) 二进制协议、文本协议同时支持

10) redis、memcache集群在线扩容、缩容、数据迁移支持,扩缩容、数据迁移过程对业务无任何影响。

11) 多租户支持,一个代理可以接多个memcache、redis集群,并支持混部。

12) mget、gets、sets等批量处理命令优化处理

13) 慢响应日志记录功能支持

14) 内存参数实时修改支持

15) 详细的集群监控统计功能

16) CPU亲缘性自添加

17)内存配置动态实时修改

7.3后期计划

添加如下功能:

i) 配置文件热加载支持。

ii) 代码热升级功能支持。

7.4 长远规划展望

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读