微服务的战争:级联故障和雪崩

本文转载自微信公众号「脑子进煎鱼了」,微服务作者陈煎鱼。战争转载本文请联系脑子进煎鱼了公众号。故障
“微服务的和雪战争” 是一个关于微服务设计思考的系列题材,主要是微服务针对在微服务化后所出现的一些矛盾/冲突点,不涉及具体某一个知识点深入。战争如果你有任何问题或建议,故障欢迎随时交流。和雪
在《微服务的微服务战争:统一且标准化》中,经过好几周与不同业务组不同事业部的战争跨部门讨论后,终于把初始的故障标准化方案给定下来了。
大家欢快的和雪使用起了内部的统一框架,疯狂的微服务创建起了新服务,没隔多久服务调用链就变成了下图:

服务间存在多次内部调用,战争服务 A =》服务 B =》服务 C =》服务D,故障而 服务 E =》 服务 B,服务 F =》服务 E,也就是存在着多个流量入口,且依赖相同的服务。
背景
服务与服务中,总存在业务服务,服务器托管公共服务,基础服务等类型。但在某一个夜晚,突然发现 BFF 调用后端服务开始逐渐不正常,客户给你截图反馈问题,你发现有点问题:

单从表现来看,你发现是 BFF 调用服务 A 极度缓慢,也不知道怎么了...正当以为是服务 A 出问题,想着万能重启一下时。你在日志平台和链路追踪系统一看,发现了大量的错误日志和缓慢,让你略微震惊,一时间不知道从何下手。
这可怎么办?
级联故障和雪崩
实际上这是一次很经典的级联故障,最终导致系统雪崩的情景再现。单从上述拓扑来看,问题点之一在于服务 B:

服务 B 本身作为服务 A 和服务 F 的两个流量入口必经之处,想必至少是一个公共服务,但他也依赖了其他多个服务。因此若服务 C 和服务 D 其中一个有问题,在没有熔断措施的情况下,就出现级联故障,系统逐渐崩盘,最后雪崩:

服务 D 所依赖的b2b信息网外部接口出现了故障,而他并没有做任何的控制,因此扩散到了所有调用到他的服务,自然也就包含服务 B,因此最终出现系统雪崩。
这种最经典的是出现在默认 Go http client 调用没有设置 Timeout,从而只要出现一次故障,就足矣让记住这类 “坑”,毕竟崩的 ”慢“,错误日志还多。
解决方法
常见的方式是根据特定的规则/规律进行熔断和降级,避免请求发生堆积:
超时时间控制。 慢调用比例。 错误比例。 自适应(例如:负载情况等)。当然,这也只是壮士断腕,后续措施还包含监控告警,通知对应的开发人员来处理。且需提前对被降级的模块进行业务逻辑进行处理等等,这样才能够比较柔和且快速地度过这一次危机。
总结
在分布式应用中,源码下载级联故障和雪崩是非常常见的,一些开发同学在模块设计时可能并没有意识到这块的问题,在微服务化后会一个不留神就碰到,因为其调用链变得特别的长且多。因此建议配套设施和限流熔断措施都应该及时跟上,否则面对一大堆的错误日志还是很无奈的。
相关文章
华为电脑桌面设置教程(通过多个桌面设置,让华为电脑更适合你的需求)
摘要:随着数字化办公的发展,华为电脑成为了越来越多人的首选,而个性化的桌面设置则可以提升工作效率和使用体验。本文将为您介绍如何通过多个桌面设置,让华为电脑更加适合您的需求。创建新...2025-11-04
引言TensorFlow是Google基于DistBelief进行研发的第二代人工智能学习系统,被广泛用于语音识别或图像识别等多项机器深度学习领域。其命名来源于本身的运行原理。Tensor(张量)意味2025-11-04
【.com快译】总结来讲,所谓代码瘦身,即是从源代码当中删除不必要的字符的相关技术。业界亦将此称为代码压缩及代码最小化。很多生产型网站都在使用JavaScript瘦身举措,但JS本身亦提供相关技术以将2025-11-04
阿尔法狗击败人类的背后:AI的发展仍存在哪些桎梏,我们又该如何应对?
作者 | 钱天培 那么,AI的发展前景是否有我们想象的那么乐观呢?节前大热的AlphaGo与柯洁的大战以人类失败告终,柯洁事后评价说,AlphaGo只是一个冷冰冰的机器人,他不懂得围棋背2025-11-04以5s升级iOS9.3.1的最佳方法(简单、快速、安全升级你的iPhone)
摘要:随着科技的不断进步,iOS系统也在不断更新和升级。升级iOS系统可以为我们的iPhone带来更多的功能和性能优化。本文将介绍如何使用5s升级到最新的iOS9.3.1系统,为你提供一...2025-11-04
1.模块的写法模块化编程一般都有这么几个过渡过程,如下描述。原始方法functionm1(){//...}functionm2(){//...} 上面的函数m1()和m2(),组成一个模2025-11-04

最新评论