谷歌云将上周的大面积中断归咎于其服务控制系统中的代码更新缺陷,由于缺少错误处理和缺乏功能标志保护,该更新引发了全局崩溃循环。据 The Register 报道:谷歌对此次事件的解释开篇即告知读者,其 API 以及谷歌云的 API 均通过我们的谷歌 API 管理和控制平面提供服务。这两个平面分布在各个区域,并“负责确保每个传入的 API 请求都经过授权,并遵循相应的策略和检查(例如配额),以满足其端点的要求”。构成该策略检查系统的核心二进制文件被称为“服务控制”。5 月 29 日,谷歌为服务控制添加了一项新功能,以启用“额外的配额策略检查”。谷歌的事件报告解释说:“此次代码变更和二进制文件发布已按区域逐一进行,但由于需要触发该代码的策略变更,因此在此次发布过程中从未执行过失败的代码路径。” 这家搜索垄断企业似乎对此次变更有所担忧,因为它“附带一个红色按钮,可以关闭该特定的策略服务路径”。但这项变更“既没有适当的错误处理,也没有功能标志保护”。如果没有适当的错误处理,空指针会导致二进制文件崩溃。“谷歌使用功能标记来捕获其代码中的问题。“如果该代码已受标记保护,那么该问题就会在测试阶段被发现。” 这段未受保护的代码一直在谷歌内部运行,直到6月12日,该公司更改了一项包含“意外空白字段”的政策。接下来发生的事情是:“服务控制部门随后对每个区域数据存储区的政策进行了区域性配额检查。这会根据相应的政策更改提取空白字段,并执行命中空指针的代码路径,导致二进制文件陷入崩溃循环。鉴于每个区域部署,这种情况在全球范围内都发生过。”谷歌在帖子中表示,其站点可靠性工程团队在两分钟内发现并开始对事件进行分类,在10分钟内确定了根本原因,并在40分钟内开始恢复。但在一些较大的谷歌云区域,“随着服务控制任务的重启,它对其依赖的底层基础设施产生了群体效应……导致基础设施超负荷。”服务控制并非为处理此类问题而设计的,因此在其较大的区域内花了近三个小时才解决这个问题。运行因此次事件而宕机的谷歌产品的团队随后不得不自行执行恢复工作。展望未来,谷歌承诺将进行一些运营方面的改进,以防止此类错误再次发生:“我们将改进我们的外部沟通,包括自动化和人工沟通,以便我们的客户尽快获得所需信息,从而应对问题、管理系统并为客户提供帮助。我们将确保我们的监控和通信基础设施即使在谷歌云和我们的主要监控产品宕机时也能保持正常运行,为客户提供服务,确保业务连续性。”
在 Slashdot 上阅读更多内容。