1 测试说明
1.1 背景
当前IM架构设计与之前相比有很大不同,当前IM将所有状态信息保存在数据层,它的设计假设是数据层高可用,高性能,可扩容;目前IM数据层采用redis集群Codis搭建。
1.2 目标
以下测试针对单机redis和Codis进行测试,通过对比分析得到IM数据层的扩容能力,测试出影响redis扩容性能的关键因素;
2 测试环境
测试环境 | 服务器配置:32core 256G内存 450G硬盘; 内网:1000Mb带宽; 客户机配置: 32core 256G内存 450G硬盘; |
测试注意 | 无 |
3 Codis存储集群搭建
4 数据层测试用例
4.1 测试单机redis
4.1.1 测试部署图
4.1.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Redis实例部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立一个Redis的连接;
(3)客户端在每个连接上执行10000次Set操作,并且Set操作的key每次都不相同;
(4)记录相应的测试结果;
4.1.3 测试结果
客户端线程数 | Redis实例个数 | 耗时s | Tps |
1 | 1 | 0.563414 | 17748 |
2 | 1 | 0.97494 | 20514 |
5 | 1 | 0.998326 | 50083 |
10 | 1 | 1.29937 | 76960 |
20 | 1 | 1.68946 | 118381 |
50 | 1 | 2.58544 | 193391 |
100 | 1 | 5.21364 | 191804 |
200 | 1 | 9.97938 | 200413 |
4.1.4 结论
根据测试结果,Redis单机性能访问速度最快为20万条/秒,并且只有在TCP连接数在50个连接以上时,才能充分发挥出Redis全部性能。
4.2 测试Codis集群(1个Codis-Redis-Group)
4.2.1 访问1个Codis-Proxy
4.2.1.1 测试部署图
4.2.1.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立1个Redis的连接,连接到Codis-Proxy_1;
(3)客户端在每个连接上执行10000次Set操作,并且Set操作的key每次都不相同;
(4)记录相应的测试结果以及Codis Manager记录的最大TPS;
4.2.1.3 测试结果
客户端线程数 | codis个数 | Redis实例个数 | 耗时ms | Tps |
1 | 1 | 1 | 1.88489 | 5265 |
2 | 1 | 1 | 2.14388 | 9328 |
5 | 1 | 1 | 2.38993 | 20921 |
10 | 1 | 1 | 2.97356 | 33629 |
20 | 1 | 1 | 3.48968 | 57311 |
50 | 1 | 1 | 4.74195 | 105442 |
100 | 1 | 1 | 5.26867 | 189801 |
150 | 1 | 1 | 6.08102 | 246669 |
200 | 1 | 1 | 7.19117 | 278119 |
4.2.1.4 CPU图
4.2.1.5 性能图
Codis Manager最大访问次数截图:29万次/秒
4.2.2 访问2个Codis-Proxy
4.2.2.1 测试部署图
4.2.2.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立2个Redis的连接,分别连接到Codis-proxy_1和Codis-proxy_2;
(3)客户端在每个连接上执行5000次Set操作,并且Set操作的key每次都不相同;
(4)同时启动5个客户端;
(5)记录CodisManager记录的最大TPS;
4.2.2.3 CPU图
4.2.2.4 性能图
4.2.3 结论
1个Redis组成+1个Codis的存储集群,极限性能为29万次/秒。
1个Redis组成+2个Codis的存储集群,极限性能为36.5万次/秒。
补充:
在1个Codis-Redis-Group+1个Codis-Proxy的情况下,采用10个客户端同时启动,进行测试,结果证明,Codis-Redis-Group的CPU占用率最高79%,基本没有增长,说明,已经到达1个Codis-Proxy的极限性能。
在1个Codis-Redis-Group+2个Codis-Proxy的情况下,采用10个客户端同时启动,进行测试,结果证明,Codis-Redis-Group的CPU占用率最高90%,基本没有增长,说明已经到达系统的极限性能;
4.3 测试Codis集群(2个Codis-Redis-Group)
4.3.1 访问2个Codis-Proxy
4.3.1.1 测试部署图
4.3.1.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立2个Redis的连接,分别连接到Codis-proxy1和Codis-proxy2;
(3)客户端在每个连接上执行5000次Set操作,并且Set操作的key每次都不相同;
(4)同时启动5个客户端;
(5)记录CodisManager记录的最大TPS;
4.3.1.3 CPU图
4.3.1.4 性能图
5个客户端测试得到的最大性能:42万次/秒。
4.3.2 访问3个Codis-Proxy
4.3.2.1 测试部署图
4.3.2.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立3个Redis的连接,分别连接到Codis-proxy1和Codis-proxy2和Codis-proxy3;
(3)客户端在每个连接上执行3333次Set操作,并且Set操作的key每次都不相同;
(4)同时启动10个客户端;
(5)记录CodisManager记录的最大TPS;
4.3.2.3 CPU图
4.3.2.4 性能图
10个客户端测试得到的最大性能:46万次/秒。
4.3.3 访问6个Codis-Proxy
4.3.3.1 测试部署图
4.3.3.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立6个Redis的连接,分别连接到Codis-proxy1和Codis-proxy2和Codis-proxy3、Codis-proxy4、Codis-proxy5、Codis-proxy6;
(3)客户端在每个连接1666上执行次Set操作,并且Set操作的key每次都不相同;
(4)同时启动10个客户端;
(5)记录CodisManager记录的最大TPS;
4.3.3.3 CPU图
4.3.3.4 性能图
10个客户端测试得到的最大性能:52万次/秒。
4.3.4 结论
2个Redis组成+2个Codis的存储集群,极限性能为42.6万次/秒。
2个Redis组成+3个Codis的存储集群,极限性能为46万次/秒。
2个Redis组成+6个Codis的存储集群,极限性能为52万次/秒。
4.4 测试Codis集群(3个Codis-Redis-Group)
4.4.1 访问3个Codis-Proxy
4.4.1.1 测试部署图
4.4.1.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立3个Redis的连接,分别连接到3个Codis-Proxy上;
(3)客户端在每个连接上执行3333次Set操作,并且Set操作的key每次都不相同;
(5)分别启动10个客户端同时进行测试;
(6)记录Codis Manager显示的最大TPS。
4.4.1.3 CPU图
4.4.1.4 性能图
同时开启5个客户端测试得到的最大性能:46.9万次/秒。
4.4.2 访问6个Codis-Proxy
4.4.2.1 测试部署图
4.4.2.2 测试过程
(1)将客户端部署在机器172.31.68.32上,将Codis集群部署在机器172.31.68.33;
(2)客户端分别启动1、2、5…200个线程,每个线程建立6个Redis的连接,分别连接到6个Codis-Proxy上;
(3)客户端在每个连接上执行1666次Set操作,并且Set操作的key每次都不相同;
(5)分别启动10个客户端同时进行测试;
(6)记录Codis Manager显示的最大TPS。
4.4.2.3 CPU图
Cpu占用总量为27.15%
4.4.2.4 性能图
4.4.3 结论
3个Codis-Redis-Group组成+3个Codis-Proxy的存储集群,极限性能为46万次/秒。
3个Codis-Redis-Group组成+6个Codis-Proxy的存储集群,极限性能为61万次/秒。
5 总结
访问Codis集群性能,与以下因素存在关系:
第一个客户端与Codis-Proxy的TCP连接数量;单个Codis-Proxy的TCP连接数量越多,整体访问速度越快。
第二个客户端同时访问Codis-Proxy的数量;Codis-Proxy配置数量越多,整体访问速度越快;
第三个Codis-Redis-Group的数量;Codis-Redis-Group配置数量越多,整体访问速度越快;
从性能扩展角度:
每增加一个Codis-Redis-Group,系统整体性能确实会有所提高,但是提高的能力越来越有限,需要建立大量的TCP连接以及扩展多个Codis-Proxy才能尽量地提高系统访问速度。