2023年3月5日20:20左右,在B站用户活跃的高峰期,许多网友发现B站手机和电脑端均无法访问视频详情页,当晚B站团队在出现故障20分钟后解决了问题。多位行业人士倾向于原因是“迭代更新出现代码故障”,这是2021年7月B站大规模服务器崩溃后的官方解释。
2021年7月13日或许是B站目前最大规模的服务器崩溃,当晚B站的手机和电脑端彻底无法使用,用户界面显示404或502,此次崩溃引发全网大讨论,一度登上热搜第一。14日凌晨2点20分,崩溃情况持续约3小时后,B站公告表示服务已陆续恢复正常,并道歉解释称是因为B站的部分服务器机房发生故障,造成无法访问。
2022年7月12日,B站技术团队官方账号“哔哩哔哩技术”发了一篇技术解析长文《2021.07.13 我们是这样崩的》,根据这篇文章的分析,服务器崩溃原因是当时新上线的代码函数存在问题,最终导致服务器CPU占满无法处理用户请求。
文章中提到,2021年7月13日22:52,SRE(负责站点可靠性的工程师)收到大量服务和域名的接入层不可用报警,客服侧开始收到大量用户反馈B站无法使用,甚至App首页也无法打开。基于报警内容,SRE第一时间怀疑机房、网络、四层LB、七层SLB等基础设施出现问题,紧急发起语音会议,拉各团队相关人员开始紧急处理。
经过原因排查后发现,B站出问题的模块是在线业务主机房的7层 SLB(负载均衡服务器,用来处理多用户、多业务的情况)的CPU跑满了100%,无法处理用户请求,问题最终被定位到了最近新上线的 Lua(一种编程语言)函数上,这个函数因为代码错误运行出错陷入死循环导致过载。
技术维稳谨慎当先
如果不是滴滴的长时间崩溃造成大范围的负面影响与讨论度,非行业人士不会将某款软件的暂时“崩了”作为热点讨论。
万博智云CTO孙琦表示,滴滴事件仅是一个个案,但该事件故障级别较大,确实影响到了一定规模普通群众的生活。实际上,很多用户看不到的软件故障正在每天发生,这在行业内是一个较为常见的问题。
一位软件工程师告诉记者,目前随着行业技术的逐渐成熟,各大厂一般都会自建数据中心,云服务也多采用多云策略,配有标准容灾机制,出现崩溃问题大多发生在自身算法、硬件,或自身技术团队层面。
以B站崩溃为例,其技术团队在解读文章中表示,运维团队做项目有个弊端,开发完成自测没问题后就开始灰度上线,没有专业的测试团队介入,“此组件太过核心,需要引入基础组件测试团队,对SLB输入参数做完整的异常测试。”
对于后续改进,B 站技术团队认为要“招专业做LB的人”,“我们选择基于Lua开发是因为Lua简单易上手,社区有类似成功案例。团队并没有资深做Nginx组件开发的同学,也没有做C/C++开发的同学。”
此外,文章里还提到,“B站一直没有NOC(网络操作中心)/技术支持团队,在出现紧急事故时,故障响应、故障通报、故障协同都是由负责故障处理的SRE(网站可靠性工程师)来承担。如果是普通事故还好,如果是重大事故,信息同步根本来不及,所以事故的应急响应机制必须优化。”
另以滴滴事件为例,多个独立信源向记者发来一份讨论截图,称一个规模非常大的K8s 集群进行在线热升级,因为某些原因,所有 Pod(容器)损坏,而 K8s 的元数据已经被新版本K8s 修改,无法回滚,因此恢复时间拉得很长。K8s(Kubernetes)是一个开源的容器编排平台,可以自动化地部署、扩展和管理容器化应用程序。
云猿生数据创始人兼CEO、前阿里云数据库总经理曹伟在其个人公众号发文解读称,该说法并非毫无依据。滴滴团队近两个月正将公司内部的 K8s 从1.12版本升级到1.20。前者于2018年9月发布,后者是2020年12月,对高速发展的K8s项目来说,两个版本间存在相当大差距。K8s 官方推荐的方法是沿着一个个版本升上去。但滴滴团队认为多次升级风险更高,采取了跨越八个版本直接升级策略,同时为了避免中断业务,在不重启容器的情况下原地升级,滴滴团队还修改了kubelet 的代码。曹伟认为该策略理论上可行,但中间可能遭遇到意外因素,如运维误操作,才导致了最终的大规模故障。
曹伟的建议是,当一个集群规模很大时,很容易在意想不到的地方发生类似的问题,那么在设计系统时,应把集群的规模控制在一个合理的范围,但扩大集群数量。
例如,可以把两个一万节点的集群拆成十个两千节点的集群,管理成本没有增加,而运行风险和(故障的)爆炸半径得到极大的降低。
11月12日,阿里云出现了一次影响所有区域的全局大故障。以这次阿里云的史诗级故障为例,曹伟称,对象存储的关键路径里依赖看RAM(内存)的鉴权逻辑,因此RAM出现故障时,也造成了对象存储的不可用。因此,数据面的可用性如果和控制面解耦,那么控制面挂掉对数据面的影响很轻微。否则,要么要不断去提高控制面的可用性,要么就要接受故障的级联发生。因此总结来说,曹伟建议各平台技术团队尽量做到控制规模、避免单点、拥抱重启、保证数据面的可用性和控制面解耦。
孙琦对记者表示,如今各大互联网平台基础架构层已经很成熟,极少出现因技术革新导致影响整个架构的事故,但在现有技术支撑、业务并发量不会暴涨的情况下,在团队稳定的前提下,类似问题理应不会频繁出现。
来源:第一财经返回搜狐,查看更多