前瞻|2022年B站崩溃是怎么回事?
2022年,B站经历了一次重大的服务器崩溃事件,这一事件引起了广泛的关注和讨论。
一、事件回顾
2022年,B站出现了一次严重影响用户正常使用的崩溃情况。当时,众多网友反映无法正常登录B站,视频无法播放,各种功能均出现故障。这一问题迅速在网络上发酵,相关话题冲上热搜榜首位。
二、原因探究
1. 代码层面的问题
根本原因是新上线的Lua代码中的一个求最大公约数的函数存在漏洞。在Lua这种动态类型语言中,变量不需要预先定义类型。当在特定的业务场景下,传入一个字符串“0”到求最大公约数的函数中时,问题就出现了。这个函数没有对输入参数进行类型校验。
在正常的数学计算中,数字0和其他数字进行运算时有明确的规则,但当“0”为字符串时,如在一些算术运算(如求余运算n % 0)会得到特殊结果(在Lua中为nan,即Not A Number)。当函数中的判断条件(如b == 0)遇到这种非预期的输入时,无法按照正常的逻辑终止递归调用,从而导致死循环。
2. 业务逻辑关联
在B站的业务逻辑里,在某种发布模式下,应用的实例权重会短暂调整为0,而此时注册中心返回给负载均衡器(SLB)的权重是字符串类型的“0”。在SLB的balance_by_lua阶段,会将该权重作为参数传递给出现问题的lua - resty - balancer模块中的函数,进而触发了这个函数中的错误逻辑。
三、问答环节
问:如果B站当时采用的不是Lua语言,是否就不会发生这样的问题?
答:不一定。虽然Lua语言的特性导致了这个问题容易发生,但如果在代码编写过程中有足够严谨的类型检查和边界条件处理机制,在其他语言中也可能会出现类似由于未考虑特殊情况而导致的逻辑错误。
问:B站在发现问题后采取了哪些紧急措施?
答:B站首先尝试重启相关服务器,但发现无法完全解决问题。然后兵分两路,一队继续排查问题根源,一队着手重建新的SLB服务来转移流量。经过紧张的工作,新的SLB配置成功并逐步恢复业务。
问:此次B站崩溃对用户体验造成了多大影响?
答:影响非常大。大量用户无法正常观看视频、浏览内容,对于依赖B站获取信息、娱乐或者进行创作交流的用户来说,他们的正常使用习惯被打断,而且这种故障在网络平台上引起广泛讨论,也对B站的形象产生了一定的负面影响。
2022年B站的崩溃事件是一个多方面原因导致的典型案例。它提醒着互联网企业在技术开发过程中,不仅要关注功能的实现,还要充分考虑代码的健壮性、兼容性以及对各种特殊情况的应对能力,同时也需要不断完善应急处理机制,减少故障对用户的影响。