最新要闻
- 一兆韦德:经营受疫情影响 已完成新一轮融资
- 今日关注:5.8元/月 WPS新版超级会员618大促预售:升不升会员简直两个软件
- 硅谷富豪为长寿拿儿子当血童:换血“永葆青春” 每日快报
- 任天堂“最失败”主机!官方宣布Wii U维修服务即将终止
- 特斯拉Model Y路边起火完全烧毁 保险公司赔付一台新车
- 150W快充!真我GT Neo5 16GB+1TB新版发布:3099元_前沿热点
- 世界热头条丨国元证券研究所组织开展科技主题基金经理调研
- 环球热议:海兴电力: 截至目前,公司在海外市场已布局6大生产基地
- 馅料大于75% 三只松鼠黄金肉松饼7.9元/斤新低
- 看热讯:《王者荣耀》新英雄曝光:蓝发美人鱼
- 小米自拍之王来了!产品经理晒自拍对比照:差距高下立判|当前观点
- 女儿膝下有硬盘 膝盖绑150根SSD走私 因步态有异被查获-当前关注
- 中国拿下76%造船份额 韩国三大船企之一的大宇退出历史舞台
- 杭州热电再度触及涨停|焦点速递
- 次旗舰RTX 4080移动版独显性能如何?实测揭晓答案_世界快报
- 比iPhone 14更薄!网友评价小米Civi 3:外观太牛了 工业设计之巅
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
RocketMQ 在小米的多场景灾备实践案例 每日消息
作者:邓志文、王帆
01 为什么要容灾?
在小米内部,我们使用 RocketMQ 来为各种在线业务提供消息队列服务,比如商城订单、短信通知甚至用来收集 IoT 设备的上报数据,可以说 RocketMQ 的可用性就是这些在线服务的生命线。作为软件开发者,我们通常希望服务可以按照理想状态去运行:在没有Bug的前提下,系统可以提供正常的服务能力。
(资料图片仅供参考)
但现实的运维经验告诉我们这是不可能的,硬件故障是非常常见的问题,比如内存故障、磁盘故障等,甚至是机房相关的故障(专线故障、机房拉闸等)。因此我们需要对数据进行备份,使用多副本的方式来保证服务的高可用。Apache RocketMQ 设计上就支持多副本、多节点容灾,比如 Master-Slave 架构、DLedger 部署模式。
在小米内部,因为是面向在线业务,服务的恢复速度至关重要,而基于 Raft 协议的 DLedger 模式可以实现秒级 RTO,因此我们在 2020 年初选用了 DLedger 架构作为基本的部署模式(在 5.0 中,主从模式也可以做到自动 failover)。支持机房灾备需要增加额外的成本,下面我将用三个灾备部署的实践案例,讲解小米如何在成本和可用性的取舍上去支持灾备。
02 怎么去做容灾?
单机房高可用
实际在使用中,有许多业务是不需要机房级别容灾的,只要能够做到单机房高可用即可。Apache RocketMQ 本身就是分布式的消息队列服务,可以很好的做到同机房多节点高可用,下面主要分享下小米在权衡成本、可用性的前提下,如何去做部署架构的升级优化。
我们知道在 Raft 协议中,一般配置三个节点,利用机器冗余 + 自动选主切换来实现高可用的目标。因此在小米引入 RocketMQ 之初,单 Broker 组均部署三个 Broker 节点。同时为了保证集群中始终存在 Master 节点,我们一般会至少部署两个 Broker 组,一个简单的部署架构图如下:
可以说是一个很基本的部署架构,在单个机房中,通过多副本、多Broker组做到了单机房容灾。但不难发现,这样做有一个很严重的问题:资源浪费。RocketMQ 的从节点只有在客户端读取较旧的数据时才会起到从读的作用,其他时候都只是单纯地作为副本运行,机器利用率只有33%,这是让人无法忍受的。
出于成本上的考虑,我们需要重新思考现有的部署架构,如何才能利用起来从节点呢?一个很简单的思路便是节点混布:在从节点也部署 Broker 进程,让其可以作为 Master 来提供服务。比较巧合的是,社区当时也提出了 Broker Container 的概念,方案的原理是在 RocketMQ Broker 之上抽象一个 Container 角色,Container 用来管理 Broker 的增删改查,以此来达到单台服务主机上运行多个 Broker 的目的,具体架构图如下所示:
可以看到,Container 作为进程运行,原本的 Broker 被抽象为 Container 的一部分,同样的 3 台机器上我们可以运行 9个 Broker 节点,组成三个 Broker组,每台服务主机上存在一个 Master 节点,使用 Container 对等部署 Broker 之后,每台服务主机都得到了利用,同样的机器数,理论上可以提供三倍的性能。
Container 是一种很好的部署思想:主从节点对等部署进而充分利用所有的机器。我们尝试直接使用该方案,但遇到了一些问题:
Container 本质上是一个进程。不管其内运行了多少个 Broker ,我们只要对其进行重启操作,都会影响该 Container 内部 Broker 相关的所有 Broker 组,升级时会产生较为严重的影响;
Container 自己维护 Broker 的上下线,无法与小米内部部署工具结合使用。
因此 Container 并不适合小米内部,但受 Broker Container的启发,我们提出了另一种与之类似的部署方案——单机多实例。所谓单机多实例,即单台主机上部署多个 Broker 实例,服务主机就是我们的 Container,Broker 以进程的方式运行,这样各个 Broker 之前不会相互影响,同时也可以和内部部署工具完美结合。一个简单的部署架构如下所示:
至此,小米内部完成了 RocketMQ 部署架构的第一次升级,集群中的节点数直接减少了 2/3。在成本优化的前提上依然提供 99.95% 的可用性保障。
多机房容灾 -Ⅰ
随着业务的不断接入,一些业务提出了机房灾备的需求。机房故障的概率虽然极低,但是一旦出现,其带来的影响是非常大的。比如机房故障导致 RocketMQ 不可用,那么作为流量入口,将会影响到所有的依赖业务。
在多机房容灾上,我们结合内部其他服务的部署经验,先提出了多集群多活的方式,即每个可用区部署一个集群,提供多个集群供业务容灾,方案部署架构如下:
用户视角看到的是三个独立的集群,需要在相同的可用区部署客户端去读写同机房的 RocketMQ 集群。举个例子:可用区1的客户端正常情况下访问可用区1的 RocketMQ 集群Cluster-1,当Cluster-1故障时,用户需要手动更改客户端的连接地址来切换集群,进而将流量转移到其他机房的集群中。用户可以通过配置下发去热更新连接地址,也可以修改配置重启客户端来切换,但这一切的操作前提都是:需要业务感知到 RocketMQ 集群故障,手动触发才可以。
▷优点
不用跨区同步数据,低延时(P99写入10ms)高吞吐(单Broker组写入TPS达100K)
部署架构简单,稳定性高
▷缺点
集群需预留灾备buffer,确保故障时,存活集群可承载故障集群的全部流量
需要业务自己手动切换集群,不够灵活
若消费存在堆积,故障集群的消息将可能不会被消费,恢复后可消费
▷生产耗时
多机房容灾 -Ⅱ
可以看到,业务如果选择以上方式接入的话,需要做一定的适配工作,该方案适用于流量较大的业务接入。然而有一些业务希望可以低成本接入:不做适配,直接使用SDK接入,我们结合 DLedger 自动切换的特性,实验性的部署了机房故障服务自动 failover 的 模式,部署架构如下所示:
用户视角看到的就是一个独立的 RocketMQ 集群,使用 SDK 正常接入即可,无需任何适配。机房故障时依赖 DLedger 自动切主做流量切换。
▷优点
部署方便,充分利用 RocketMQ 的原生能力
自动选主,业务接入方便,无需业务手动切换流量
▷缺点
跨机房部署,容易受网络波动,集群抖动概率较大
跨机房部署,会增加写入延时,从而降低集群吞吐能力
▷生产耗时
多机房容灾 - PLUS
目前看来 RocketMQ 服务已经在小米完成了很好的落地,日消息量也达到了千亿规模,但我们仔细观察以上两个方案不难发现,虽然可以实现机房故障切换,但都有一定的缺点,简要概况如下:
多机房容灾 -Ⅰ:同机房请求,延时较低,但需业务手动切换集群
多机房容灾 -Ⅱ:自动切流、可消费历史数据,但对专线负载高,需三个Region才可部署
方案总是存在不够完美的地方,但不论作为服务的开发者还是业务使用者,其实都希望可以在实现以下几个目标的前提下做到灾备:
1)低成本:双Region可以完成部署;
2)低耗时:尽量同机房请求,减少网络耗时;
3)自动切流:机房故障时,可自动将流量切到正常的机房内。
为了实现以上的需求,我们从 RocketMQ 自身的架构出发,希望能够以最低的改造成本支持灾备。我们发现客户端都是根据 Namesrv 返回的元数据进行生产、消费,只要客户端能够在机房故障时,可以根据元数据自动将流量切走即可,因此我们将视角移到了客户端,希望从客户端上支持灾备的功能。
RocketMQ 所有 Broker 都会将自己注册到 Namesrv 上去,一旦某个 Broker 组故障,那么它的信息将会被从 Namesrv 中移除,客户端也就无法再向这类 Broker 组发送、拉取消息。基于以上逻辑,只要我们将 Broker组部署在不同机房中,便可以做到机房级别的灾备效果。部署架构如下:
我们以一个实际的例子来讲解以上方案的可行性:Topic-A 在两个可用区上均存在分区,SDK在使用时需要配置自己所在的region。
对于生产者来说,客户端只会向位于相同可用区的分区发送消息。例如:位于可用区1的客户端只会向可用区1发送消息,当可用区1故障时,由于在可用区1不存在可写的分区,便会开始向可用区2发送消息,从而实现生产侧的自动切流。消费者同样需要配置 region ,所有的消费实例会先按照可用区分别去做 rebalance:分区会优先被相同可用区的消费者去分配消费。当可用区1故障时,由于生产者已经将流量切走,因此消费者不需要做特殊变更就做到了消费自动切流。
该方案对于业务来说是一个可选项,业务可自行决定是否需要开启灾备模式,因此较为灵活,可以说是结合了以往两种机房灾备方案的优点,但是仍有不足之处,比如故障集群在故障期间历史消息不可被消费等,后续也会不断的优化方案。
03 来做个总结吧!
本文介绍了四种部署模式,针对不同的业务需求提供不同的部署模式,总结如下:
目前以上方案在小米内部均有具体的业务场景,消息量约占总体的 90%,未来也会逐步将剩余流量相关集群全部升级为机房灾备集群,从而提供 99.99% 的可用性服务能力。
关键词:
RocketMQ 在小米的多场景灾备实践案例 每日消息
Algorithm_01--C#递归算法
一兆韦德:经营受疫情影响 已完成新一轮融资
今日关注:5.8元/月 WPS新版超级会员618大促预售:升不升会员简直两个软件
硅谷富豪为长寿拿儿子当血童:换血“永葆青春” 每日快报
任天堂“最失败”主机!官方宣布Wii U维修服务即将终止
特斯拉Model Y路边起火完全烧毁 保险公司赔付一台新车
150W快充!真我GT Neo5 16GB+1TB新版发布:3099元_前沿热点
世界热头条丨国元证券研究所组织开展科技主题基金经理调研
环球热议:海兴电力: 截至目前,公司在海外市场已布局6大生产基地
馅料大于75% 三只松鼠黄金肉松饼7.9元/斤新低
看热讯:《王者荣耀》新英雄曝光:蓝发美人鱼
小米自拍之王来了!产品经理晒自拍对比照:差距高下立判|当前观点
女儿膝下有硬盘 膝盖绑150根SSD走私 因步态有异被查获-当前关注
中国拿下76%造船份额 韩国三大船企之一的大宇退出历史舞台
gps北斗卫星同步时钟(子母钟系统)助力莘莘学子高考精准计时_环球观天下
世界速讯:Ubuntu 18.04 (Bionic) 简单快速的安装mongodb
原生js如何请求接口 今日报
数字转换_全球播报
震惊!二狗子的火锅店被隔壁老王 DDoS 攻击了
杭州热电再度触及涨停|焦点速递
次旗舰RTX 4080移动版独显性能如何?实测揭晓答案_世界快报
比iPhone 14更薄!网友评价小米Civi 3:外观太牛了 工业设计之巅
当前要闻:和AI网聊10分钟被骗430万惊呆全网 官方:AI诈骗成功率接近100%
海拔8300米!我国科研人员成功维护升级世界最高自动气象站:已传回数据_环球观速讯
强电与弱电的区别,你了解吗?
易基因:全基因组DNA甲基化分析揭示DNMT1在斑马鱼模型听觉系统发育中的作用 | 胚胎发育|今日播报
聊聊ElasticeSearch并发写的乐观锁机制 天天快讯
世界热点评!臭名昭著的“Hello,World!”
全球今日讯!没听妈妈话学了物理他拿了诺奖 丁肇中:坚持自己的兴趣和理想
【天天新视野】Intel超级APU:黄了!
越南打工人不加班 一天只干5小时:逼急中国老板 傻子一样
世界微动态丨广州高温费发放标准2023 广州高温补贴几月开始发放?
人工智能将如何改变敏捷项目管理?|当前最新
2步轻松实现ASP.NET Core托管服务执行定时任务_天天资讯
互联网从业人员的知识图谱-天天观速讯
高空坠物致人死亡 36名住户赔偿!专家称非常危险:一定要避免
浙江一公司上4休3收到上千份简历:目前仅有三名员工、盈利只够工资 全球热闻
刀片电池走向全球 多国力邀比亚迪建厂!官方回应
《小美人鱼》IGN 7分:不完全成功 海洋生物太丑!
就在地球上 科学家培育出一个“黑洞”:结果有了惊人发现 环球观天下
环球讯息:你会相信人工智能医生吗
carplay放歌没声音怎么回事_当前头条
MSE 自治服务帮你快速定位解决 Dubbo 重复订阅导致 RPC 服务注册失败问题
springcloud~gateway网关
[css]总结-如何实现水平垂直都居中对齐?
闫衍:经济复苏由结构分化走向全面修复 全年经济增速有望达到5.7%
全球快播:登陆iOS后:安卓版ChatGPT即将上线
家长投诉网红店打卡博主穿着暴露 离学校近影响孩子心理:网友吵翻-热文
世界热讯:华为完成14nm以上EDA替代 更强的国产EDA来了:部分已支持5nm
魅族618开启!魅族20限时直降200元:2999元起 3年超长质保_世界要闻
自拍神器!小米Civi 3前置双主摄:32MP美人镜+32MP超广角|世界速看料
新动态:我国深海装备技术水平持续提升 为南海沉船遗址考古研究提供科技支撑
今日播报!数据驱动的军港革新:智慧可视化助力军事决策
子母钟系统(网络时钟系统)助力高考精准计时工作建设
天天微速讯:云计算遇上电动车,跑出新模式的数智化转型
天天观察:能力惊人!GPT-4通过注册会计师和内审师考试
“小而美”国民爆款车!五菱宝骏悦也售价曝光:或8.38万元起 当前播报
比亚迪研发公司更名方程豹汽车销售公司:王传福卸任董事长
环球观天下!5倍于ChaGPT Intel推出Aurora genAI大模型:1万亿参数
微信5个“隐藏”超强功能 你知道几个? 新资讯
怎么验证苹果手机是不是正品
css 中class包含某元素的选择器-速读
JS中的undefined 与 null_天天热门
世界微头条丨CoaXPress 协议的CRC及其具体实现
【全球独家】【一步步开发AI运动小程序】五、帧图像人体识别
中企承建的安哥拉最大水电站开启大坝主体施工 当前热议
12306教你买便宜的火车票 最高可省近200元
Redmi K60宣布最高降价500元:2299元起!-全球热讯
16GB内存+1TB存储仅2899元!Redmi K60 1TB顶配版图赏
618价格战提前开打 宏碁27寸2K 170Hz显示器到手999(Fast IPS面板)|环球观速讯
全球热讯:OPPO Reno10系列核芯公布:骁龙8+旗舰平台 配长寿续航
微信昵称怎么设置空白_微信昵称设置特殊符号_全球观天下
周口搅拌泵选购要注意什么 购买搅拌泵时要注意什么
上线近10年你听过吗?短视频制作神器逗拍宣布停止运营
雨量破历史极值!深圳凌晨突遇暴雨:电闪雷鸣 网友被吵醒
宠物猫被邻居高空扔下活活摔死 网友气愤行为可耻:为何虐猫 每日聚焦
本周五上!《小美人鱼》国内票房预售凉凉 15万都没到:口碑解禁 小黑美人鱼完美
国内人均工作时间48.7小时!专家称大家不是反对加班而是不给加班费
天天热推荐:欧盟外长会未就新一轮对俄制裁达成共识
学系统集成项目管理工程师(中项)系列24b_信息系统集成专业技术知识(下)
【读财报】一季度公募基金销售保有量透视:招行、蚂蚁基金领跑,银行系份额领先但占比下降 全球焦点
5月版号下发!86款国产游戏获批:腾讯、网易在列 天天快资讯
每日短讯:为了不再做噩梦 我试着给它编了个“好结局” 竟然真管用
葡萄牙一块大石头居然会“生孩子”?真相大白_当前信息
618让利16亿!小米12S Pro闪降900元:3199元买骁龙8+徕卡旗舰|微头条
20万的纯电SUV 彻底“杀疯了” 天天热点
当前速递!最高直降400元!小米13系列官方首次降价:3699元起
每日动态!茂硕电源:截至2023年5月19日,公司股东人数约3万多户
开源.NetCore通用工具库Xmtool使用连载 - 发送邮件篇
全球最资讯丨[Linux] CENTOS7设置Swap交换区
特斯拉必装脚部记录仪?挪威出租车司机指控Model Y自行加速撞车 天天视讯
3个月残忍杀死650头大象!为什么不能活着取象牙?
银河系中心 超级黑洞附近:恒星一颗颗地神秘消失了! 全球滚动
全球简讯:买这些新SSD的 十个里有九个是大怨种!
1TB“白菜价” 一加Ace 2V新版上架:2799元|世界速看
同房后多久可以用试纸测出怀孕_生产后多久可以怀孕
范式之魂和孟极哪个好(范式守信)
学厨师多少钱?_学厨师需要多少钱 每日观察
微软必应搜搜份额创历史新高 成为中国第一大桌面搜索引擎