Redis Cluster on K8s性能测试

通过在Kubernetes环境中部署4主4从的RedisCluster,对比虚机环境,测试了不同并发、payload下的GET/SET请求性能。结果显示,K8s环境下性能接近虚机,但在某些场景下更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

本测试用于了解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:

 

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

 

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

  

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

  

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

  

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

  

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

 

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

 

图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性能非常重要的因素。
### 使用 Kubernetes 构建在线考试系统平台 构建基于 Kubernetes 的在线考试系统涉及多个方面,包括但不限于容器化应用部署、服务发现与负载均衡、持久存储配置以及安全策略实施。 #### 容器化应用程序准备 为了使应用程序能够在 Kubernetes 上运行,需将其打包成 Docker 镜像。对于在线考试系统而言,通常会涉及到前端展示层、后端业务逻辑处理单元和服务端数据库等多个组件。每个部分都应单独创建对应的镜像文件,并上传至私有的或公共的仓库中以便后续拉取使用[^1]。 #### 创建命名空间 建议为项目设立独立的名字空间来隔离资源,这有助于管理权限控制和简化运维操作。 ```bash kubectl create namespace exam-system ``` #### 应用程序部署 通过编写 YAML 文件定义所需的服务对象及其关联的工作负载控制器(如 Deployment)。下面是一个简单的例子用于启动 Web 前端实例: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: frontend-deployment labels: app: online-exam-front spec: replicas: 3 selector: matchLabels: app: online-exam-front template: metadata: labels: app: online- name: front-container image: your-docker-repo/online_exam_frontend:v0.1 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: frontend-service spec: type: LoadBalancer selector: app: online-exam-front ports: - protocol: TCP port: 80 targetPort: 80 ``` 同样地,针对后台服务器和其他依赖项也需要类似的描述文档来进行安装设置。 #### 数据库及其他外部服务集成 考虑到数据一致性和安全性等因素,在线考试系统往往还需要连接到专门设计的数据管理系统。可以考虑采用 StatefulSet 来保证 Pod 和 PersistentVolumeClaim 之间稳定的一对一映射关系,从而实现可靠的磁盘读写功能;而对于 Redis 这样的缓存型中间件,则可通过 ConfigMap 或 Secret 方式传递必要的参数选项给目标进程。 #### 自动化测试环境搭建 利用 Helm Chart 工具包能够快速定制复杂的多级架构体系结构,同时支持版本迭代管理和回滚机制。另外,借助 Argo CD 实现 GitOps 流程自动化,确保每次提交变更都能及时同步反映在整个集群内部署状态之上。 #### 用户认证授权方案规划 鉴于此类应用场景下可能存在的敏感信息交互需求,必须重视身份验证环节的设计工作。OAuth2.0 协议提供了灵活而强大的框架基础,允许第三方登录方式接入的同时也便于维护统一的身份管理体系。此外还可以引入 Role-Based Access Control (RBAC),按照角色分配不同级别的访问特权范围,进一步增强整体防护能力。 #### 日志监控报警设施完善 最后但并非最不重要的是,完善的日志记录和实时性能跟踪不可或缺。Prometheus 结合 Grafana 可视化面板可以帮助管理员轻松掌握整个系统的健康状况和发展趋势。提前准备好相应的 Dashboard JSON 模板文件,例如 `Kubernetes Cluster Monitoring` ,方便日后直接加载查看关键指标变化曲线图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值