Redis服务支持5000万的QPS,有什么好的思路?
来源:互联网 发布:java 动态合成图片 编辑:程序博客网 时间:2024/04/30 08:10
对于几个大厂来说,阿里云ApsaraDB for Redis/ApsaraCache用的是自研的集群方案(架构类似Codis),RedisLabs也是这个架构,AWS用的是开源的Redis Cluster,其他大厂就不清楚了。proxy+redis-server的架构可以做到线性的扩容,不用担心节点间的通讯压力,因为proxy做了分片,虽然也需要全局的Config Server/Zookeeper来维护数据分片信息,但是总体而言通信成本几乎为0,所以这种架构撑5000W QPS理论上是没有问题的。
这种架构还有一个优点就是可以把proxy当成一个中间件,在这个中间件上你可以做任何事情,比如可以把集群和主从的兼容性做到几乎一致、可以做无缝扩缩容、安全策略等等,redis cluster因为缺少了这么一个中间层就很难做这类事情(现在也有项目给redis cluster做一层proxy),当然因为带了proxy,带宽和CPU基本也是double的,对资源的消耗会大很多。
回到5000W这个问题上,理论上没问题不代表实际没问题,在几百个节点的集群中,由于节点数变多,fail的几率也大大变高;数据倾斜的问题也依然存在(访问热点导致的单个分片节点跑满,比如秒杀);而且由于redis跑满时70-80%的cpu会消耗在内核网络栈上,所以当一个机器的CPU跑满时,cpu system和softirq会居高不下,对主机的稳定性是个巨大的挑战;另外对机房各个层次的交换机也会有巨大的挑战;总而言之,服务的SLA是很难得到满足的,为了保证SLA,可能需要上百台机器来部署几百个分片以分担5000W的压力,这个成本也不是一般小厂能承担的。而且节点数多的时候,对一些跨机指令是不友好的,比如mget,当节点数变多的时候会存在mget hole的问题,延迟与单节点相比会是原来的1/2次方倍,比如9个节点,mget的延迟就是原来的3倍,100个节点,延迟就是原来的10倍,懂概率的同学可以自己算一下。
那到底如何彻底解决5000W这个问题呢,这里还是需要引入新技术的,比如智能网卡、用户态tcp/ip协议栈、多线程redis(减少分片数量,兼容性依然100%),纯用户态协议栈可以做到单机600W QPS(64 core)左右,用intel iWARP这个值可能能达到1500W QPS左右(把7层网络栈都offload到网卡),这样3-4台baremetal机器就能达到你说的要求;上层交换机也要用最新的机房建设标准,而且redis源码本身也要做很多的适配和重构;产品形态也要做相应改进,比如我们为了支持热key就做了读写分离这种产品形态。
- Redis服务支持5000万的QPS,有什么好的思路?
- 20万、50万、100万的算法工程师,到底有什么区别?
- 20万、50万、100万的算法工程师,到底有什么区别?
- 20万、50万、100万的算法工程师,到底有什么区别?
- 20万、50万、100万的算法工程师,到底有什么区别?
- 20万、50万、100万的算法工程师,到底有什么区别?
- 学习Java有什么好的书
- 程序员有什么好当的?
- 有什么好的创业之路
- 国外有什么好的网站推荐?
- 有什么好的录屏软件?
- QPS达到30万的elasticsearch架设之道
- 20万、50万、100万的算法工程师,到底有什么区别?(合格算法工程师的自我修养)
- hibernate批量数据插入优化 ------用Hibernate插入1万条数据,怎么做,有什么好的优化方法吗
- 【广告算法工程师入门 6】【转】20万、50万、100万的算法工程师,到底有什么区别?
- 测算Redis处理实际生产请求的QPS/TPS
- 测算Redis处理实际生产请求的QPS/TPS
- 有什么比较好的网站学php的呢
- Java 经典算法之冒泡排序(Bubble Sort)
- 自定义控件那些事儿 ----- 左滑删除控件
- 如何跟各种人解释什么是产品经理
- webview上传图片一直提示"未选择任何文件"
- android两个子程程的通信
- Redis服务支持5000万的QPS,有什么好的思路?
- 利用「接口」做产品时我们该如何思考?
- 12.13培训日记
- 消息的接收和处理
- centos7中安装jdk
- 阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统
- 音乐测试
- 有逼格的产品经理都用什么样的杯子?
- iOS入门随笔