Redis Cluster on K8s性能测试

说明

本测试用于了解Redis Cluster在Kubernetes环境下的性能表现,以及对比Kubernetes环境相比虚机环境的性能差异。

部署环境

Redis集群架构:4主4从,每个实例1GB内存,1个vCPU Core,开启RDB持久化

Redis版本:5.0.8(基于官方redis:5.0.8-alpine镜像)

Kubernetes Pod IP网段: 172.24.29.1/24

压测主机IP网段:172.24.30.1/24

Kubernetes Pod网络采用BGP-calico组网,与虚机网络打通3层互联,物理机网卡网卡带宽为25gbps

Kubernetes主机配置:88C/756G,CentOS Linux release 7.6.1810 64位,Kernel:3.10.0-957.27.2.el7.x86_64,共三台

压测主机配置:8C/32G,CentOS Linux release 7.3.1611 64位,Kernel:3.10.0-514.6.1.el7.x86_64

性能测试工具

选用Redis安装自带的redis-benchmark工具。

Redis Cluster代理配置

由于redis-benchmark无法对Redis Cluster中的所有节点发起连接,因此需要引入一款集群代理工具,我们选择RedisLabs官方推出的Cluster代理产品redis-cluster-proxy,连接池大小设置为20,其它参数保持默认。

测试用例及测试结果

1. 20个客户端并发连接,100,000个GET/SET请求,3 bytes payload:

Redis Cluster on K8s性能测试_第1张图片 Redis Cluster on K8s性能测试_第2张图片Redis Cluster on K8s性能测试_第3张图片

2. 20个客户端并发连接,100,000个GET/SET请求,64 bytes payload:

Redis Cluster on K8s性能测试_第4张图片 Redis Cluster on K8s性能测试_第5张图片Redis Cluster on K8s性能测试_第6张图片

3. 50个客户端并发连接,1,000,000个GET/SET请求,3 bytes payload:

  Redis Cluster on K8s性能测试_第7张图片Redis Cluster on K8s性能测试_第8张图片Redis Cluster on K8s性能测试_第9张图片

4. 50个客户端并发连接,1,000,000个GET/SET请求,128 bytes payload:

  Redis Cluster on K8s性能测试_第10张图片Redis Cluster on K8s性能测试_第11张图片Redis Cluster on K8s性能测试_第12张图片

5. 50个客户端并发连接,1,000,000个GET/SET请求,8k bytes payload: 

  Redis Cluster on K8s性能测试_第13张图片Redis Cluster on K8s性能测试_第14张图片Redis Cluster on K8s性能测试_第15张图片

6. 单节点,20个客户端并发连接,100,000个GET/SET请求,64 bytes payload:

  Redis Cluster on K8s性能测试_第16张图片Redis Cluster on K8s性能测试_第17张图片Redis Cluster on K8s性能测试_第18张图片

7. 单节点,20个客户端并发连接,100,000个GET/SET请求,64 bytes payload,Redis实例与测试程序同在一台主机

Redis Cluster on K8s性能测试_第19张图片

 

执行时间及吞吐量对比(Pod vs VM)

Redis Cluster on K8s性能测试_第20张图片 Redis Cluster on K8s性能测试_第21张图片

图1: 横坐标为测试编号,纵坐标为测试执行时间(秒);      图2: 横坐标为测试编号,纵坐标为每秒执行请求数。

结论

  1. 总体对比,基于BGP-calico组网的K8s容器环境与虚机环境下Redis Cluster性能十分接近;
  2. 虚机环境下绝大部分请求都在1ms内返回响应,因而具有相对更高吞吐量(payload不大时,相比容器环境);
  3. K8s容器环境下请求响应时间更稳定(最快与最慢执行时间更接近,GET与SET操作执行时间更接近);
  4. 客户端连接较少(50以下)、payload较小(1k以下)时,Kubernetes环境下的Redis Cluster相比虚机环境约有1/3的性能损耗;
  5. 客户端连接较多时(50及以上),Kubernetes环境下的Redis Cluster性能接近虚机环境下的表现;
  6. payload较大时(8k及以上),Kubernetes环境下的Redis Cluster性能表现优于虚机环境下的表现;
  7. 网络带宽是限制Redis性能非常重要的因素。

你可能感兴趣的:(redis)