九里大集

Eternachen's Blog

1月4日Slack服务中断分析

2021年新年伊始,复工第一天,在全球IT公司中比较流行的团队协作软件Slack(企业即时通信工具)就挂了。全球IT从业人员无不欢欣鼓舞,奔走相告,相当于多放一天假。老板们想找人也联系不上,急的干瞪眼。好景不长,Slack第二天就恢复了。本文中将对发生在2021/1/4的Slack全球服务中断进行分析。

废话少说,直接上干货。Slack官方事件分析 - Final Slack Root Cause Analysis (RCA) Report

全文观感(划重点)

  • 本次事件起因是网络 - 云厂商网络边界上不断恶化的网络丢包引起的。更为严重的是丢包发生在后端服务器之间,数据库也受到巨大影响
  • 那么这个云厂商是谁呢?嗯,搜索引擎说是AWS
  • 由于网络丢包,服务发现系统把很多后端服务器标记为不健康。这样由于健康服务器的数目减少,就触发了自动扩容的操作。
  • 然而自动扩容的数目太大,暴露了扩容配置服务(provision service)的三个问题,开始出现雪崩
  • 由于网络原因,监控系统失效了,因为访问不到数据库。。。。。。
  • 最终解决方案还得是先恢复网络
  • 雪崩之下没有一片雪花是无辜的
  • 技术债迟早是要还的
  • 云厂商不是万能的,时不时给你带来惊喜
  • 不知道最后AWS给Slack赔了多少钱
  • AWS关于网络问题的分析也没看到

全文翻译

Powered By Google Translate

太平洋标准时间(PST)上午6:00左右,在我们的云提供商网络上的网络边界之间开始出现网络丢包问题。太平洋标准时间上午6:30之前丢包开始恶化,导致后端服务器错误率增加。在上午6:46由于高错误率我们收到PagerDuty。

由于网络问题,许多后端服务器忙于处理高延迟请求,包括后端服务器,其他服务主机和数据库服务器。虽然这些高延迟请求仅占总请求的1%,但是它们使用了大约40%的服务器时间。

随后由于网络问题,服务发现系统(service discovery system)开始将许多后端服务器标记为不正常。我们的负载均衡器进入了紧急路由模式,在此模式下负载均衡器会将健康主机和不健康主机同样对待来分配流量。网络问题持续恶化大大减少健康服务器的数量。太平洋标准时间(PST)上午7:00之前,已经没有足够的健康后端服务器来满足客户流量。客户要么无法加载其Slack客户端,要么看到错误页面。

我们的后端服务器集群开始自动扩展以满足流量需求。 在太平洋标准时间上午7:01和7:15之间,我们的自动化服务尝试同时向后端队列添加1200台服务器, 这个速度比我们通常处理的服务器配置速度要高得多。因此我们用来在云环境中配置新服务器的预配服务(provision service),出现了三个问题:

  • 它无法满足以要求的速率完成配置服务器的多项任务,(例如设置DNS配置),导致服务器群中的不能正常运行。 预配开始花费越来越多的时间,最终达到30分钟操作超时。

  • 服务用完了打开文件句柄,因为它为每个服务器保留了一个打开文件句柄。这次扩容配置的数目大大超过了我们在负载测试中的最大值。
  • 该服务受到云提供商的API速率限制,从而进一步降低了速度。

之所以发生这种情况,很大程度上是因为我们的预配服务在前所未有的负载下失效了。 持续的网络问题加剧了这种情况,新创建的服务器在配置时遇到网络问题,未能完成必要的初始化来启动服务。最终,我们的预配服务无法再扩容主机。

我们的监控平台也无法访问,因为它与数据库连接受到网络不稳定的影响。这使我们的调试工作复杂化,延长了服务恢复时间。我们尝试重新生成并预配监控平台,但是由于预配服务的问题而未能成功。我们开始数据库直连来查询指标后端。

太平洋标准时间(PST)上午8:05左右,我们诊断到我们的配置服务已用完打开文件句柄。我们在太平洋标准时间上午8:13通过提高文件句柄限制来解决该问题。然后,我们能够成功地进行服务器配置,并将生成配置完成的服务器加入集群,这表明我们云提供商的网络不稳定有所改善。之后,云提供商告知我们,在这段时间里,他们为了减少网络不稳定性而增加了网络容量。

整改措施

我们已经完成了详细调查并整理了以下整改措施

  • 我们的云提供商已提高了其跨边界网络流量系统的容量, 并将我们从共享网络环境转移到专用网络环境。他们为我们提供了详细的RCA
  • 我们有一本新的故障手册,介绍如何在不使用监控平台的条件下直接查询指标
  • 我们准备了一些方法来减少跨网络边界的流量。如果问题再次发生,我们可以使用这些方法
  • 我们提高了预配服务的打开文件句柄限制
  • 云提供商已提高了我们的API调用速度上限
  • 我们将为跨网络边界之间的数据包速率创建警报。这项工作将于2021-02-12完成。
  • 我们将增加预配服务的worker数量,以便快速配置服务器。这项工作将于2021-02-12完成。
  • 我们将改善预配服务的可观察性。这项工作将由 2021-02-12。
  • 我们将重新审视预配服务设计。这项工作将于2021-04-13完成。
  • 我们将对配置服务进行负载测试。这项工作将于2021-04-13完成。
  • 我们将重新访问后端服务器扩展自动化,以确保我们具有正确的预测性缩放设置,缩放率设置以及相关用于缩放参考的指标。这项工作将由 2021-04-13。
  • 我们将改进运行手册,以诊断网络问题。这项工作将由 2021-02-12。
  • 我们将调查和测试后端服务器的两个设置。第一个是请求超时,第二个是同时处理的请求数。通过调整这些值,我们可以限制少数请求使用大多数后端服务器上的资源。这项工作将于2021-04-13完成。

版权声明

转载请注明出处

Top