科百科
当前位置: 首页 科技资讯

如何看待网络翻车事件(如何分析和解决)

时间:2023-06-11 作者: 小编 阅读量: 3 栏目名: 科技资讯

如何分析和解决B站近日发表了一篇关于去年那场大事故的回顾文章《2021.07.13我们是这样崩的》,本文将从OpenResty的角度还原此事件的解决过程去年,OpenRestyInc.团队使用商业产品OpenRes。

如何看待网络翻车事件?B 站近日发表了一篇关于去年那场大事故的回顾文章《2021.07.13 我们是这样崩的》,本文将从 OpenResty 的角度还原此事件的解决过程,接下来我们就来聊聊关于如何看待网络翻车事件?以下内容大家不妨参考一二希望能帮到您!

如何看待网络翻车事件

B 站近日发表了一篇关于去年那场大事故的回顾文章《2021.07.13 我们是这样崩的》,本文将从 OpenResty 的角度还原此事件的解决过程。

去年,OpenResty Inc. 团队使用商业产品 OpenResty XRay 的动态追踪技术介入 B 站文章中所描述的重大线上事故后,在很短的时间内定位了导致 B 站线上服务不可用的问题根源,并帮助解决重大线上事故。

事故描述背景

B 站基于开源 OpenResty 开发了他们的内部网关系统。

事故现场

B 站当时所有线上服务器的 OpenResty 进程总是占用 CPU 100%,但不能处理任何请求。重启无法恢复,回滚他们最近的业务代码变更也无法恢复。所有服务器都有这个问题。

B 站是我们的 OpenResty XRay 产品的商业客户。OpenResty XRay 是一款基于动态追踪技术的系统故障排查和性能优化软件。事故发生一段时间后,B 站的运维团队联系到我们,希望我们能帮助分析线上的一个严重问题。

事故分析过程

我们首先通过线上由 OpenResty XRay 产品自动采样的 C 语言级别 CPU 火焰图,确定了他们的 OpenResty 的 Nginx 进程的几乎所有 CPU 时间都花费在执行 Lua 代码上面。

出于对客户的隐私保护和数据安全,这张图里只显示了 OpenResty 开源软件里的函数帧,隐去了 B 站自己的 Lua 代码相关的信息。

然后我们再通过 OpenResty XRay 自动采样的 Lua 语言级别的 CPU 火焰图确认了几乎所有的 CPU 时间都花费在了单条 Lua 代码路径上。看起来是那条 Lua 代码路径发生了死循环。我们的 Lua CPU 火焰图定位的 Lua 代码路径可以精确到代码行级别。

同样地,我们只保留了不敏感的开源代码的函数帧。

B 站原文中提到的 Lua 火焰图就是 OpenResty XRay 在 B 站生产服务器上采样有问题的 OpenResty 服务进程得到的。

OpenResty XRay 在 B 站线上生成火焰图也就花费了几十秒到几分钟的时间,因为使用 100% 非侵入的动态追踪技术,整个过程不需要对 B 站的进程和应用进行任何修改。

根据 Lua 火焰图最终确认根源问题是 B 站的业务往配置元数据写入了个字符串类型的权重 0 值的坏数据(即 “0”),而 OpenResty 的 lua-resty-balancer 库的 Lua API 期望的是数值类型的权重值,从而导致了无限递归和无限循环。

LuaJIT 的即时( JIT)编译器在这里并没有 bug。之所以最初怀疑是 JIT 编译器的问题是因为对应的 Lua 代码路径乍一看并没有任何问题,同时 B 站另一个业务团队未告知的操作也对线上服务产生了影响。字符串 0 和数值 0 的区别是非常微妙的。最终我们排除了 JIT 编译器的 bug 可能性,确定了字符串 0 这个问题根源。

事故后续修复和加固

B 站在业务层面确保不会再有字符串类型的上游服务器的权重值被写入配置数据。

OpenResty XRay 新版也提供了打印 Lua 调用栈上所有局部变量的值的新功能,可以让类似问题被更快更直接地定位。

我们事后也对开源 OpenResty 的 lua-resty-balancer 库针对这种 API 误用进行特别加固,确保任何误传的字符串类型的权重值总是会被强制转成数值类型。

结语

事故最终得到完美解决。除了 B 站,OpenResty XRay 也曾经成功地帮助 Zoom、微软、去哪儿网等很多公司在线上定位和优化了很多线上问题,包括从高 CPU 波峰到高内存使用,再到内存泄漏、异常的请求延时、高硬盘 IO 等各种问题。

OpenResty XRay 目前可以自动针对 OpenResty、Nginx、LuaJIT、PHP、Python、Perl、Go、PostgreSQL、Redis 等各种不同的开源软件以及运行在这些开源软件之上的客户业务代码进行深入的分析和监控。未来我们还会陆续加入对更多技术栈的支持,包括 Java、Ruby 等。用户使用 OpenResty XRay,可以快速发现和精准定位各种性能问题、功能问题和安全问题, 从而保证应用的稳定性。

OpenResty XRay 中使用的 Lua 语言级别的 CPU 火焰图工具在这里有中文教程介绍。OpenResty XRay 使用的是增强过的私有动态追踪技术,感兴趣的同学可以参考我年初时写的系列文章:《Ylang: Universal Language for eBPF, Stap , GDB, and More》。

关于作者

章亦春是开源项目 OpenResty® 的创始人,同时也是 OpenResty Inc. 公司的创始人和 CEO。他贡献了许多 Nginx 的第三方模块,大量 Nginx 和 LuaJIT 核心补丁,并且设计了 OpenResty XRay、OpenResty Edge 和 OpenResty Showman 等产品。

    推荐阅读
  • 蚂蚁庄园7.3正确答案(蚂蚁庄园8.22答案)

    蚂蚁庄园7.3正确答案在支付宝蚂蚁庄园每日一题中,2022年8月22日的问题是问“蝙蝠的眼睛真的看不见吗”,蝙蝠的眼睛能看见东西吗,怎么选择该问题的正确答案,下面就和小编一起来看看8月22日今天蚂蚁庄园课堂答案。即便是将它的眼睛蒙上,它也是可以正常探路飞行的。这种动物在飞行的时候,会发出一种超声波信号,由于音频很高所以人类无法听见,要是超声波触碰到了其他的物体,它就会立刻返回,所以不会碰撞到其他东西。

  • 妇科护理创新项目(推动妇科各亚专业知识更新)

    会议期间,云南省医学会阴道镜宫颈病理学分会举行了换届选举会议,并进行了第一届阴道镜宫颈病理学分会工作总结。选举会议上,昆明市妇幼保健院妇女保健部主任邓继红继续连任分会主任委员。今年因受疫情影响,本次会议采取线上及线下结合的形式举行。专家用生动的语言和贴近生活的实例介绍了子宫颈癌早防早治内容,得到了现场观众的普遍认可和回应。

  • 为什么蚕蛾撒过卵后就会死去(是什么原因蚕蛾撒过卵后就会死去)

    地球上的生物都有一定的寿命,它们只能生活一段时期,最后终归死亡。一切生物都要经过自身的生长发育,以及产生后代的阶段。蚕蛾的口器已经退化,不能吃任何食物,生活所需要的水分、养分和能量,完全是从幼虫期(蚕宝宝)储存起来的。另一方面,蚕蛾身体内一些组织和器官也已经“老化”,不能再继续使用了。所以,蚕蛾撒过卵后,完成了生物本身的任务,自然而然就会死去。

  • 冰冻的大闸蟹如何做好吃(大闸蟹的做法)

    下面更多详细答案一起来看看吧!冰冻的大闸蟹如何做好吃材料:蟹一只、蒜头四两,辣椒、槐盐。先把蟹处理干净,切成4~6块。把蒜饵放入油锅炸至金黄色,捞起备用。

  • 结婚的鲜花一般用几朵(结婚用多少朵玫瑰花)

    结婚用多少朵玫瑰花1、11朵。结婚也适合用19朵玫瑰,作为新娘的手捧花使用,19朵玫瑰的花语是永远相爱,依旧爱你的意思,寓意较好。19朵不同颜色的玫瑰也代表不同的意思,蓝玫瑰为天长地久、粉玫瑰为爱到永久。结婚用99朵玫瑰花也较为合适,99朵玫瑰花代表着天长地久的意思,婚礼上使用既能向新娘表达爱意,也能给婚礼增加仪式感和纪念意义。99朵玫瑰花较重,最好提前准备。

  • 中药泡脚的功效与作用(中药泡脚的功效与作用介绍)

    我们一起去了解并探讨一下这个问题吧!中药泡脚的功效与作用对于脚踝部的跌打损伤后的遗留肿痛有活血消肿的功能。双足在人体的最低处,使人体阴经聚会的地方,阳气很难达到双脚。通过活血化瘀治疗可以温经、补肾、去寒、去疲劳、预防下肢的血栓,对于静脉曲张和下肢的浮肿也有较好的疗效。中药泡脚有温经散寒、活血化瘀的作用,对于女性的宫寒、腹痛也有较好的疗效。

  • 正宗清炖牛肉做法(如何做清炖牛肉)

    以下内容大家不妨参考一二希望能帮到您!正宗清炖牛肉做法牛腱子肉清洗干净,切大块。浸泡后的牛肉冲洗干净,放入凉水锅中,大火开始煮。开锅后稍煮一会。另起一锅,放入清水、牛肉,放入2大勺黄豆酱。放入适量的老抽。大火烧开,转小火炖1个小时。放适量的盐,继续炖20-30分钟。过火后,不要捞出来,放在锅里彻底放凉。捞出牛肉放入冰箱冷藏,隔夜取出切片,并撒上白芝麻。另外牛肉汤分装到保鲜盒里,用于炖菜、面条等等。

  • 小学生语文陈述句改反问句(小学语文句子专项训练)

    反问句改为陈述句的方法:1、将反问句中的肯定词改为否定词,或将否定词改为肯定词。所改成的陈述句是:欧阳海舍身拦惊马的英雄事迹,令我们感动。

  • 什么决定led车灯的亮度(一秒看懂LED车灯光通量)

    火丁课堂上回我们结束了火丁基础班的课程,解释了Led的工作原理、LED作为车灯的散热重要性、以及散热的原理。来,跟着火丁复习一下没有散不了的热,只有不努力的LED车灯~只谈亮度不谈散热的LED都是耍流氓~进阶班的课程,我们来说说一个好车灯应该是怎样的?提要打开一个LED车灯的产品说明,我们大概是这样的↓今天,我们先来解释一下,光通量、功率、色温,到底是个什么鬼?

  • 推荐几款新手好养又好看的多肉(最受欢迎的50种多肉)

    2观音莲观音莲,叶片像莲花座,出状态时叶尖呈紫红色,极容易爆崽。6红色浆果红色浆果,堪称迷你版的虹之玉,叶片排列紧密,由绿到红,通透感强,易群生。26不死鸟不死鸟,也叫落地生根,繁殖能力惊人,砍头扦插成活率很高。27乒乓福娘乒乓福娘,叶片鼓鼓的,表面有浓厚的白霜,出状态后会变成紫红色。32乌木乌木,是景天科冬云系多肉,长相高端霸气。35婴儿手指婴儿手指,叶片肥嘟嘟,胖乎乎,像小婴儿的手指,特别萌。