AliRedis单机180w QPS, 8台服务器构建1000w QPS Cache集群(转)

  • 时间:
  • 浏览:0
  • 来源:大发快三代理—大发大发彩票app

结论 单机版AliRedis可不需用实现24核跑满150wQPS性能.

引言:

        如今redis凭借其高性能的优势, 以及富于的数据外部作为cache已没有流行, 逐步取代了memcached等cache产品, 在Twitter,新浪微博中广泛使用,阿里巴巴同样没有. redis有些指在了其不可动摇的地位, 然而在实际的生产环境中, redis也暴露出有些有些问题图片.如性能瓶颈, 内存冗余, 运维部署多样化等. 本文目的本来 分析redis现有的问题图片, 以及介绍阿里巴巴技术保障团队对redis的改造工作, 使其在生产环境中发挥更大的价值.

 

原生redis的瓶颈: 

1. 单任务管理器单任务管理器, 无法充采集挥服务器多核cpu的性能.

2. 大流量下造成IO阻塞. 同样是有些单任务管理器单任务管理器, cpu在避免业务逻辑的时候,网络IO被阻塞住, 造成无法避免更多的请求.

3. 维护成本高, 有些我你要充采集挥服务器的所有资源包括cpu, 网络io等, 就需用建立多个instance, 但此时不可避免会增加维护成本.  拿24核服务器举例来讲, 有些部署2有一个 单机版的instance,理论上可不需用实现10w*24core= 240wQPS的总体性能.有些每个 instance 有所有人 独立的数据,占用资源如内存也会同比上升,反过来制约一台服务器又之本来能支持没有来越多的 instance.  有些部署2有一个 Instance来构成单机集群, 实在可不需用共享数据,有些有些节点增加, redis的情况通讯更加频繁和费时,性能也下会降本来.  有些这些 土法律依据 都愿因要维护2有一个 Instance,运维成本都有成倍增加. 

4. 持久化. redis提供了这些 save土法律依据 1)save触发. 2)bgsave. 当然也可不需用使用3)aof来实现持久化, 有些这3点都有 弊端.

         1)save:  有些是单任务管理器单任务管理器, redis会阻塞住所有请求, 来遍历所有redisDB, 把key-val写入dump.rdb. 有些内存数据量过大, 会造成短时间几秒到几十秒甚至更长的时间停止服务, 这些 方案对于twitter, taobao等大流量的网站, 显然是不可取的.  

         2)bgsave: 在触发bgsave时, redis会fork自身, child任务管理器会进入1)的避免土法律依据 ,这愿因服务器内存要有一半的冗余才可不需用, 如今内存已变得没有廉价, 有些对于存储海量数据的情况,内存以及服务器的成本还是不容忽视的. 

         3)aof:  说到持久化, redis提供的aof不是最完美的方案了, 有些有得必有失, 严重影响性能! 有些redis每接收到两根绳子 请求, 就要把命令内容删改的写到磁盘文件, 且不说频繁读写会影响磁盘寿命,写磁盘的时间足以拖垮redis整体性能 . 当然熟悉redis的开发者会想到用appendfsync等参数来调整, 但都都有 完美.即使使用 SSD,性能也本来 略有提升,有些性价比不高。

 

针对以上几种情况, 阿里技术保障团队做了如下优化手段, 实在这不仅仅本来 优化, 而更是这些 对redis的改造.

1. 多任务管理器master + N*work 工作模式.master任务管理器负责监听网络事件, 在接收到有一个 新的连接后, master会把新的fd注册到worker的epoll事件中, 交由worker避免这些 fd的所有读写事件, 有一个 master任务管理器就可不需用删改被释放出来接收更多的连接, 共同又不妨碍worker避免业务逻辑和IO读写.



通过如上改造, redis可不需用充采集挥服务器多核的优势, 以及网络IO复用, 有点硬是节省运维成本, 每台服务器只需维护有一个 AliRedis实例.

QPS, 8台服务器构建50w QPS Cache集群" name=image_operate_5045138503495025 alt="AliRedis单机150w QPS, 8台服务器构建50w QPS Cache集群" src="http://s8.sinaimg.cn/mw690/004cF6UIgy6FibVf6mz47&690" width=690 height=517 action-type="show-slide" action-data="http%3A%2F%2Fs8.sinaimg.cn%2Fmw690%2F004cF6UIgy6FibVf6mz47%26690" real_src="http://s8.sinaimg.cn/mw690/004cF6UIgy6FibVf6mz47&690">测试环境 CPU: Intel Xeon E5-2650 2.3GHz, *2

AliRedis集群

采用这些 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在使用内存方面可谓苛刻至极, 压缩, string转number等, 能省就省, 有些在实际生产环境中, 为了追求性能, 对于内存的使用可不需用适度(不至于如bgsave般浪费)通融避免, 有些AliRedis对jemalloc做了微调, 通过调整pagesize来让一次je_malloc分配更多run空间来储备更多的用户态可用内存, 共同可不需用减轻换页表的负载, 降低user sys的切换频率, 来提高申请内存的性能, 对jemalloc有兴趣的开发者可不需用参考jemalloc源码中的bin, run, chunk数据外部进行分析.

http://blog.sina.com.cn/s/blog_e59371cc0101br74.html

测试数据 AliRedis单机版性能数据