博客
返回博客文章
2014 年 8 月 7 日
对今天的连接问题的事后分析
作者 Sam Kottler
RubyGems.org 网络界面和 API 于 8 月 7 日从大约 UTC 时间 8:43 至 14:07 之间断断续续出现宕机。这篇文章旨在解释此次问题及其解决方法,从而避免今后出现类似问题。
在美东时间的清晨,RubyGems.org 内部和外部监控系统开始向运维团队发送警报。由于警报发生的时间,没有掌握诊断并修复该问题的人员清醒着,这导致该警报在一段时间内未被确认。最终,运维团队成员已上线并开始诊断此问题。当我们开始深入研究应用程序层中的日志时,很明显有大量请求导致应用程序向客户端返回 404。与负载均衡器返回 404 的请求不同(例如不存在的宝石文件),这些请求开始消耗我们的应用程序服务器上所有可用的工作进程。数据库上的负载激增,并且应用程序将无法及时响应请求。鉴于我们整个系统中实施了各种超时,因此在工作进程和数据库不堪重负之前,请求将获得妥善处理。
我们立即采取行动,将流量来源隔离,并在负载均衡器层实施了修复。从我们收集到的信息来看,似乎有人在自己的 pom.xml
中将 RubyGems.org 配置为存储库,而 Maven 使用此文件来配置和运行与构建相关的各种任务。鉴于我们看到流量来自的地址空间,因此 pom.xml
很可能已分发到具有多台计算机的构建场。我们已屏蔽所有包含特定关键词(例如 .jar
)的请求,以防止进一步的此类请求。
在接下来的几天和几周内,我们将在工作进程使用方面实施更好的监控。我们已经开始讨论设置随叫轮换机制,并计划尽快实施。
对此次事件感到十分抱歉,它使用户无法有效使用 RubyGems.org。如果您有任何疑问或担忧,请随时 给我发送电子邮件。