AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群
来源:互联网 发布:搬瓦工vps搭建ss优化 编辑:程序博客网 时间:2024/05/29 07:33
原文:http://blog.sina.com.cn/s/blog_e59371cc0101br74.html
引言:
1. 单进程单线程, 无法充分发挥服务器多核cpu的性能.
2. 大流量下造成IO阻塞. 同样是由于单进程单线程, cpu在处理业务逻辑的时候,网络IO被阻塞住, 造成无法处理更多的请求.
3. 维护成本高, 如果想要充分发挥服务器的所有资源包括cpu, 网络io等, 就必须建立多个instance, 但此时不可避免会增加维护成本.
4. 持久化. redis提供了两种save方式 1)save触发. 2)bgsave. 当然也可以使用3)aof来实现持久化, 但是这3点都有弊端.
1. 多线程master + N*work 工作模式.master线程负责监听网络事件, 在接收到一个新的连接后, master会把新的fd注册到worker的epoll事件中, 交由worker处理这个fd的所有读写事件, 这样master线程就可以完全被释放出来接收更多的连接, 同时又不妨碍worker处理业务逻辑和IO读写.
采用这种master + N*worker的网络层事件模型,可以实现redis性能的平行扩展. 真正的让redis在面临高并发请求时可以丛容面对.
2. 抛弃save, bgsave, aof等三种模式.采用redisDB lock模式. AliRedis在数据存储层把多DB存储模式转换成HashDb存储, 将key hash到所有RedisDB上, 这样做有一个弊端就是抛弃了select命令, 但与此同时会带来一个更大的好处, 可以逐个DB持久化而不会影响整个系统, 在做持久化的时候AliRedis只需lock住1/N个redisDb, 占用1/m个线程. 在不需要内存冗余的情况下进行持久化, 相比之前提到的弊端, 这种方式可以带来更大的收益, 更丰厚的回报.
3. 重构hiredis客户端, 支持redis-cluster工作模式, 目前hiredis并不支持redis-cluster模式, 阿里技术保障团队对hiredis进行重构,使之支持redis-cluster.
4. 优化jemalloc, 采用大内存页.
通过如上改造, redis可以充分发挥服务器多核的优势, 以及网络IO复用, 特别是节省运维成本, 每台服务器只需维护一个AliRedis实例.
测试环境
CPU: Intel Xeon E5-2630 2.3GHz, *2
KERNEL: 3.2.0
GCC: 4.4.6
Jemalloc: 3.2.0
NIC: Intel 82599EB
测试数据
AliRedis单机版性能数据
thread:
set/get=1:1
AliRedis
8个节点, 20台客户端, 配置相同, cpu全部打满.
set/get=1:1
单机版AliRedis可以实现24核跑满180wQPS性能.
集群版可以实现8台服务器支撑1000wQPS的数据请求.
- AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群
- QPS
- QPS
- 服务器qps计算
- 基于dpdk协议栈的nginx,单core QPS达到28w
- MongoDB的简单QPS测试(单机)
- Mysql的简单QPS测试(单机)
- Nginx 单机百万QPS环境搭建
- Nginx 单机百万QPS环境搭建
- w
- w
- w
- w
- w
- w
- w
- W
- w
- 幻方算法
- leetcode题解日练--2016.6.19
- Property List Programming Guide(三)
- 构建高并发高可用的电商平台架构大纲
- 排序算法总结(4)——归并排序
- AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群
- Android include标签的监听事件处理
- 快速排序算法
- NEUOJ 720 头哥的烦恼
- 主元素问题
- 原码、反码、补码知识详细讲解(此作者是我找到的讲的最细最明白的一个)
- java设计模式(十一)--状态模式
- C002-CPP-用malloc()存储任意长度的键入字符串
- Microsoft资源