网易首页 > 网易号 > 正文 申请入驻

从滴滴的故障我们能学到什么

0
分享至

11 月 27 日晚滴滴发生了大范围、长时间的故障。官方消息说是“底层系统软件发生故障”,而据网上的小道消息,一个规模非常大的 K8s 集群进行在线热升级,因为某些原因,所有 Pod(容器)被 kill,而 K8s 的元数据已经被新版本 K8s 修改,无法回滚,因此恢复时间拉的很长。

从滴滴近期分享的技术文章来看,这个说法并不是空穴来风。滴滴团队近两个月正在把公司内部的 K8s 从 1.12 升级到 1.20,1.12 是 2018 年 9 月发布的,而 1.20 是 2020 年 12 月,对高速发展的 K8s 项目来说,两个版本存在相当大的差距。K8s 官方推荐的方法是沿着一个个版本升上去。但滴滴团队认为多次升级风险更高,采取了一把梭哈的策略,跨越 8 个版本一把升。而且为了避免中断业务,在不重启容器的情况下原地升级,滴滴团队还修改了 kubelet 的代码。


这个升级流程如果一切正常理论上是 work 的。我推测还是遇上了未考虑到的意外因素,比如运维误操作,造成了这次大规模的故障。从我的经验来说,遵循以下设计原则,可以极大的降低风险概率、减小故障范围:

控制规模,用多个小规模 K8s 集群的联邦代替一个大 K8s


先说我的⼀个经历。早年阿⾥云发起过⼀个 5K 项⽬,⽤ 5000 台物理机组成⼀个 ODPS(即后来的 MaxCompute)大集群来⽀持阿⾥内部的⼤数据业务,5K 项⽬在 13 年上半年进⼊攻坚阶段,我作为技术⻣⼲被抽调到这个项⽬⾥。ODPS 有⼀个组件叫⼥娲,类似 Hadoop 的 Name Node,提供名字解析、分布式锁等服务。当 5K 集群进⾏机房级掉电测试时,⼏千台服务器(其中有⼏万个服务)在重启后会向 3 台⼥娲服务器发起远程调⽤去解析彼此的地址,就像 DDoS 攻击⼀样,瞬时流量会持续打满千兆⽹卡,造成整个 5K 集群⼀波⼜⼀波的雪崩。

这段经历告诉我,当一个集群规模很大时,很容易在意想不到的地方发生类似的问题。因此,在设计系统时,我倾向于把集群的规模控制在⼀个合理的范围。例如把⼀个资源池的⼤⼩控制在⼏百台机器的规模,当需要更多资源时,不是去扩展单个资源池的⼤⼩,⽽是去新建资源池,扩展资源池的数量。换句话说,为了解决业务增长问题,不要 scale up 单个集群,⽽是 scale out 出更多的集群!

另一个要考虑的问题是爆炸半径。再举个例子,PolarDB 的底层存储组件叫 PolarStore,从外部来看,PolarStore 是⼀个可⽆限扩容的存储服务,但内部实现上,我将其设计成由一个个隔离开的⼩集群组成,每个集群⼏⼗到上百台服务器。这个设计 2017 年投入商用,虽然之后 PolarDB 的规模逐年激增,但 PolarStore 服务从来没出现过大范围的故障。K8s 集群也是⼀样。特别⼤规模的 K8s 集群,例如上万台的,其实都存在爆炸半径过⼤的的稳定性⻛险。与其不断优化与提⾼ K8s 的规模极限,不如梳理业务,把这些巨型 K8s 集群拆为多个⼤⼩适中的集群。

实际系统设计和开发中,我们可能会因为多种原因倾向于选择大集群。我听过的⼀个理由是为了避免跨 K8s 集群⽹络不连通问题,就⼲脆把所有 Pod 都塞到了⼀个 K8s 集群⾥。但⽹络连通性的问题还是应该由⽹络⽅案来解,比如这个问题可以通过负载均衡器(LB)暴露 Pod 地址,或给 Pod 额外分配⼀个 Underlay ⽹络地址(例如物理网络或者 VPC 网络的地址)来解决,而不应该将其和架构设计相耦合。

避免单点,一个 K8s 集群也应该被视作一个单点


架构师们一直都很小心谨慎的避免单点故障。服务要进行冗余部署,数据库要有主备。在机房内,网络要有双上联交换机,服务器除了市电供电,还要准备柴油发电机应急。同时重视机房级别的高可用容灾,业务要做跨机房甚至是跨地域的部署。如果一个机房断网、断电,那流量要能快速的从故障机房切走,业务处理以及底层的存储都要切换到其他机房。比如,八年前我在设计 RDS 专有云双机房部署方案的时候,要考虑单机房灾难发生时,数据库的主备复制关系、负载均衡还有 IP 网段如何从主机房漂移到备机房,以及故障恢复时流量如何再切回主机房。

但 K8s 经常被架构师们视作是一个业已具有多机房容灾、高可用能力的分布式系统。从而忽视了把高可用业务部署在单 K8s 集群上的固有风险。K8s 是一个管理容器编排的系统软件,如同所有的软件系统,遇到非预期的事件,例如本次滴滴故障中跨多个版本的原地升级,也是有几率彻底挂掉的。这个时候,业务和存储系统在单 K8s 里纵使有再多的副本,也要歇菜。

因此我们建议架构师们在设计部署方案时,要把 K8s 视作存在单点风险的单元,一个 K8s 是一个部署单元,把过去多单元多活的技术方案移植到多 K8s 多活的场景下来。不仅是无状态的服务,服务所依赖的数据库的副本也要跨 K8s 部署。除了数据面,在控制面管理业务负载与数据库的 K8s operator 管理软件也需要做到多 K8s 多活。这类似于,在 RDS 系统里,除了数据库要做高可用,RDS 的管控系统必须要实现双活,否则故障发生时,自动化系统都失效了,所有操作都得人工执行,自然会增加故障的处理时长。

额外的好处是,如果你的业务部署在多个 K8s 集群中,那么 K8s 的升级策略可以更加灵活,可以通过逐个升级 K8s 集群,这样能够进一步降低升级过程中可能出现的风险。

拥抱重启,把重启和迁移视作常态


回到 K8s 的升级,K8s 官方推荐的方式是这样的,逐一地将每个节点上的 Pod 驱逐到其他节点上去,从集群中移除节点,升级,然后再将它重新加入到集群,这是一种滚动升级机制(Rolling)。而 AWS EKS 还支持一种蓝绿部署机制(Blue-Green),创建一个新的节点组,使用新的 K8s 版本,然后,将 Pod 从旧的节点组迁移到新的节点组,实现蓝绿部署,一旦所有的 Pod 都已经成功迁移到新的节点组,再可以删除旧的节点组。两种方法都需要迁移和重启 Pod。这次故障里,滴滴采用了非常规的 K8s 升级手段,其中一个重要的动机是避免 Pod 重启影响业务。这其实代表了一类 old-school 的服务器管理理念。

在 DevOps 中,"Pets vs Cattle" 是一个常用的比喻,用来描述两种不同的服务器管理策略。Pets(宠物,例如猫)代表的是那些我们精心照料和维护的服务器。当它们出现问题时,我们会尽一切可能去修复,而不是直接替换它们。每一个 Pet 都是独一无二的,有自己的名字,我们知道它们的性能,甚至它们的"性格"(例如,某个服务器可能会经常出现某种特定的问题)。过去工程师和运维们非常的厌恶服务器重启,以至于云厂商 ECS 团队的一个奋斗目标就是把虚拟机做到如小型机般的可靠,为此不断的改进虚拟机热迁移等技术。

Cattle(牲口,例如牛)代表的是那些我们可以随意新增或删除的服务器。我们不会对它们进行个别管理,而是将它们视为一个整体来管理。如果其中的任何一个出现问题或者变化,我们通常会选择直接替换,而不是修复。Cattle 的例子包括在云环境中运行的虚机,或者是在 Kubernetes 集群中运行的 Pod。甚至可以把 K8s 集群本身也视作 Cattle,如果 K8s 出现问题,或者是 K8s 集群要做版本升级,直接把这个 K8s 换掉,把老的 K8s 里的 Pod 直接迁移到新的 K8s 里。

把 Pod 看做 Pets,就会想尽一切办法来避免 Pod 重启。而把 Pod 看做 Cattle,就会换一个思维,把 Pod 的重启和迁移作为一个需求来设计系统。我建议工程师们采用后一种思维。不要害怕 Pod 重启和迁移,而是把处理 Pod 重启、迁移以及遇到问题回滚的代码视为系统的正常运行例程的一部分。在复杂系统设计中,期待并规划故障的发生,而不是试图阻止它们发生,通过定期升级系统,验证处理重启、迁移、回滚的代码,确保系统在面对重启和迁移这种常态时能够正常运作。把重启和迁移视为常态,而不是异常,这种思维方式能够帮助我们设计出更可靠、更健壮的系统。

数据面的可用性和控制面要解耦


最后想说的一个经验是数据面的可用性要和控制面解耦。我先举两个例子,这两个都是存储系统,但是基于不同理念设计的:

第一个系统是 PolarDB 的存储系统 PolarStore。PolarStore 采取了控制面与数据面分离的理念(详情参考我在 VLDB 2018 年发表的"PolarFS"论文)。数据面的读写操作都仅依赖查询缓存在本地的全量元数据。控制面仅仅在执行管理操作,例如创建卷、卷的扩缩容、节点宕机发起数据迁移、集群扩缩容的时候需要修改元数据才会被强依赖。控制面对元数据的修改会通过元数据通知机制异步更新到数据面的缓存里。这个设计的优点是高度的可靠性,即使整个控制面不可用,在数据面读写文件都可以正常完成,这对数据库业务而言很重要。

而在另一个系统中,控制面与数据面是耦合的。这个系统有三个很重要的 Master 节点,Master 节点除了承担控制面的任务外,还承担了一部分数据面的职责。举个例子,在这个系统中,数据是以 Append only 的形式不断追加到一个日志流中,而日志流会按 64MB 分割为 chunk,每写满一批 chunk,数据面的节点就要找 Master 节点分配下一批新 chunk 的调度策略。这个设计有一个缺限,就是 Master 节点一旦宕机,整个存储集群很快就无法写入新数据。为了克服这个缺陷,Master 从三副本改为了五副本,同时 Master 还采用了 Sharding 的方案来提高吞吐能力。

这告诉我们,数据面的可用性如果和控制面解耦,那么控制面挂掉对数据面的影响很轻微。否则,要么要不断去提高控制面的可用性,要么就要接受故障的级联发生。

结语

控制规模、避免单点、拥抱重启、数据面的可用性和控制面解耦。这些点是我过去十多年在设计 RDS 和 PolarDB 这样的大规模云服务时所重视的一些设计原则,这些原则可以帮助防御系统出现大规模故障。我发现这些原则在 K8s 的场景下仍然是有效的,希望可以帮助架构师和工程师们设计更稳定的系统。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
涨价已经在路上:既不能过度通胀,又要稀释债务,如何兼得?

涨价已经在路上:既不能过度通胀,又要稀释债务,如何兼得?

永不出场的戈多
2024-05-20 06:10:41
林志颖周慧敏时隔三十年再见面,两人容貌不老,56岁周慧敏超年轻

林志颖周慧敏时隔三十年再见面,两人容貌不老,56岁周慧敏超年轻

娱圈小愚
2024-05-20 15:53:36
《黑神话:悟空》细节爆料:游戏拥有超80位Boss

《黑神话:悟空》细节爆料:游戏拥有超80位Boss

3DMGAME官方号
2024-05-20 23:04:11
韩媒:如果不能战胜中国队和新加坡,韩国队临时主帅将被口诛笔伐

韩媒:如果不能战胜中国队和新加坡,韩国队临时主帅将被口诛笔伐

直播吧
2024-05-21 08:55:26
520官宣新恋情,汪峰为何每次都能谈到大美女?

520官宣新恋情,汪峰为何每次都能谈到大美女?

麻辣婊
2024-05-20 23:26:04
松江南站改名为上海松江站上海南站升级为高铁站后影响到底有多大

松江南站改名为上海松江站上海南站升级为高铁站后影响到底有多大

十堰钢哥哥
2024-05-21 10:31:54
美版知乎:中国每年1000万人失踪,那为什么很多人说中国安全呢?

美版知乎:中国每年1000万人失踪,那为什么很多人说中国安全呢?

荷兰豆爱健康
2024-05-20 20:39:21
并非只是萨德,终于理解中国六年多都不愿理韩国的原因了

并非只是萨德,终于理解中国六年多都不愿理韩国的原因了

阿芒娱乐说
2024-05-20 12:13:57
56票对49票,台当局“妥协”,两岸称呼已被修改,苏贞昌沉默不语

56票对49票,台当局“妥协”,两岸称呼已被修改,苏贞昌沉默不语

绝对军评
2024-05-21 07:51:29
证监会前村长发声!今日凌晨的四大消息正式发酵(5.21)!

证监会前村长发声!今日凌晨的四大消息正式发酵(5.21)!

财经老木子
2024-05-21 09:03:29
惊爆!中国第四艘航母现身,美媒:可能是全球首艘专用无人机航母

惊爆!中国第四艘航母现身,美媒:可能是全球首艘专用无人机航母

战域笔墨
2024-05-20 20:45:09
CCTV5直播!太原赛国乒大战张本美和,伊藤美城,勒布伦 附央视直播时间表

CCTV5直播!太原赛国乒大战张本美和,伊藤美城,勒布伦 附央视直播时间表

最爱乒乓球
2024-05-21 00:06:06
伊朗一夜巨变,内贾德意外迎来翻身机会,反美斗士“王者归来”?

伊朗一夜巨变,内贾德意外迎来翻身机会,反美斗士“王者归来”?

书房点兵
2024-05-20 19:48:57
伊朗国家电视台证实总统莱西空难丧生,部分伊朗民众燃放烟花庆祝

伊朗国家电视台证实总统莱西空难丧生,部分伊朗民众燃放烟花庆祝

探索星空
2024-05-20 13:23:00
后续!江西小学伤人案致2死10伤!凶手已被抓,知情人曝更多内幕

后续!江西小学伤人案致2死10伤!凶手已被抓,知情人曝更多内幕

古希腊掌管松饼的神
2024-05-20 18:06:12
为什么劝中年男人别背“双肩包”出门?看这3组对比,你就明白了

为什么劝中年男人别背“双肩包”出门?看这3组对比,你就明白了

潮人志Fashion
2024-05-19 17:30:10
细节披露!直升机为美国制造

细节披露!直升机为美国制造

鲁中晨报
2024-05-20 14:15:04
中俄为啥不结盟?俄专家:中国拒绝与俄结盟,原因有三个

中俄为啥不结盟?俄专家:中国拒绝与俄结盟,原因有三个

博览历史
2024-05-20 18:43:33
俄罗斯其实也是稀里糊涂才发现中国有多厉害的!

俄罗斯其实也是稀里糊涂才发现中国有多厉害的!

芯怡飞
2024-05-20 21:53:10
下南海的渔船,你们打鱼就打鱼,带砖头干什么?

下南海的渔船,你们打鱼就打鱼,带砖头干什么?

言值1931
2024-05-21 08:55:28
2024-05-21 14:34:44
ITPUB学院
ITPUB学院
分享技术干货,了解最新动态
771文章数 627关注度
往期回顾 全部

科技要闻

理想业绩下滑:纯电车跳票 好日子告一段落

头条要闻

小米车主花近30万提车不到1个月 汽车2次智驾失灵

头条要闻

小米车主花近30万提车不到1个月 汽车2次智驾失灵

体育要闻

兄弟们,为了我,拿下冠军吧!

娱乐要闻

杨洋乔欣聊天记录曝光!还牵扯张天爱

财经要闻

重营销轻研发 “扫地茅”股价已跌去78%

汽车要闻

四排八座纯电MPV/续航超过800km 翼真L380开启预订

态度原创

时尚
数码
亲子
旅游
健康

夏天穿衣没有头绪?来看看50岁女性的搭配模板,气质素雅干净

数码要闻

玄派玄智星青锋笔记本配置上新:8845HS + 16G + 512G 售 3799 元

亲子要闻

11个月的宝宝学说话对着爸爸喊“儿子”18斤的体重17斤的反骨

旅游要闻

四川广元男子拍到会呼吸的泉水 反复涌出又消失

在中国,到底哪些人在吃“伟哥”?

无障碍浏览 进入关怀版