摘要

  • Roblox 表示,峰值外部流量和某个特定体验并非 2021 年 10 月停机的原因。它将事件归因于其工作负载下 Consul 内部的两个技术问题:与流式功能相关的争用以及病理性的 BoltDB 性能。一个承担多项基础功能的单一 Consul 集群扩大了影响,而监控依赖关系使问题更难发现。
  • 恢复所需的工作不止是消除直接原因。工程师必须重建缓存、纠正调度状态、以正确容量重启服务并进行验证,然后逐步允许流量进入。记录表明,恢复工具和冷启动演练是独立的连续性控制措施,而非故障后可以临时凑合的细节。
  • Roblox 后来描述了独立的遥测、额外的 Consul 分离、第二个数据中心、蜂窝式基础设施和主动-主动实验。这些变化是重点转移的有意义证据,但持久的问责仍取决于可衡量的故障切换、依赖关系图、恢复演练、针对创作者的影响方法以及补救措施的公开关闭。

正常运行时间成为平台交易的一部分

当 Roblox 在 2021 年 10 月离线时,它已经不仅仅是一个游戏目录。它是一个托管平台,人们在此见面、创作者发布体验和虚拟物品、开发者建立业务。Roblox 提供了独立工作室通常需要自行组装的许多基础设施:托管、存储、网络、分发、计费、审核、客户支持、全球合规以及访问大量受众。这种安排降低了创作成本。它同时也集中了运营控制。

这种区别对于问责很重要。传统的娱乐中断会阻止客户在一段时间内使用已购买的服务。而平台中断可能同时中断多种关系。用户失去对社交和娱乐空间的访问。创作者可能失去参与度、交易以及根据其工作对受影响平台功能的依赖程度来操作体验的能力。依赖平台收入的团队可能失去工作时间和商业动力。Roblox 自身则失去活动、预订和信任。各方在预防或修复故障方面的能力并不平等,因为 Roblox 控制着基础系统。

公司自己的数据说明了这种交易规模。其技术事后报告称,事件发生时每天约有 5000 万玩家定期使用 Roblox。其 2021 年财务材料显示日活跃用户、参与度和开发者收入快速增长。Roblox 后来表示,开发者社区在 2021 年收入超过 5 亿美元。这些数据描述了不同的人群和衡量标准;它们不得被混入一个单一的受影响人数。它们的相关性更简单:到 2021 年底,服务连续性已具有经济和消费后果。

这并不意味着大型平台保证完美可用性。复杂的分布式系统会发生故障,运营商必须在延迟、成本、控制和弹性之间做出权衡。问责始于一个更实际的问题:组织是否为其所邀请的依赖关系设计、测试和治理了系统?该测试包括事件前的架构、变更验证的质量、可观测性的独立性、从冷启动重启的能力、衡量利益相关者影响的方法以及补救工作后产生的证据。

Roblox 做出了深思熟虑的基础设施选择。它在其自有数据中心运营核心系统,因为它相信私有基础设施在其规模下更经济且可预测,特别是对于延迟敏感的工作负载。该公司表示,这些节省影响了它能够返还给创作者的内容。这可以是一种合理的策略。但所有权改变了责任地图。控制基础计算、存储、网络和编排的公司,当故障出现在其自身控制平面时,更难以将连续性责任归咎于公共云提供商。它拥有证明该决策合理性的架构、运营模式和恢复能力。

因此,这次停机最有用的方式是作为控制案例。它展示了旨在提高效率的技术机制如何与规模、共享依赖关系以及在恢复过程中变得可见的恢复约束相互作用。它还展示了为什么详细的事后分析(无论多么有价值)只是问责的一部分。更严格的标准问的是组织是否能够证明经验教训已转化为独立的控制措施,并且这些措施随着平台增长继续发挥作用。

控制平面故障演变为平台中断

Roblox 的详细描述始于太平洋时间 10 月 28 日 13:37,当时 Vault 性能下降,一个 Consul 服务器显示高 CPU 负载。玩家尚未受到影响。该平台依赖于一系列 HashiCorp 技术。Nomad 调度容器。Vault 支持秘密和认证工作流。Consul 提供服务发现、健康检查、会话锁定和键值存储。在 Roblox 的规模上,这些并非外围工具。它们帮助数千个服务和容器相互定位和信任。

这种架构意味着一个不健康的 Consul 集群可能同时削弱多个控制功能。服务无法可靠地发现其依赖关系。Nomad 和 Vault 也依赖 Consul。调度新容器和检索生产秘密变得困难。因此,即使底层用户数据库并非最初描述的原因,控制平面问题也会传播为应用程序可用性问题。

根据事后报告,到 16:35,在线玩家数量已降至正常水平的一半左右。16:00 的状态记录显示许多玩家体验受到影响。后来的更新描述了内部系统问题、持续恢复、已识别的根本内部原因以及增量流量恢复。10 月 31 日 16:45 恢复正常运营。工程记录测量间隔为 73 小时。

Roblox 确定了两种技术机制。首先,一个相对较新的 Consul 流式功能在公司环境中异常高的读写负载组合下遭遇了过度争用。流式功能本意是比长轮询减少 CPU 使用和网络带宽。然而,在 Roblox 的生产模式下,其实现以阻止写入并降低集群性能的方式集中了争用。

其次,Roblox 的工作负载暴露了 BoltDB(Consul 用于其 Raft 预写日志)中的病态性能。BoltDB 在空闲列表中跟踪可重用页面。在事件的使用模式下,维护该结构变得昂贵。事后报告描述了一个日志存储,其物理大小和空闲列表远大于活动数据所暗示的大小,导致小的逻辑追加涉及更多工作。该机制导致了 Raft 写入缓慢和不稳定的领导者。

这是两个不同的问题。将它们归结为一个模糊的数据库错误是不准确的,同样,将单一 Consul 集群描述为唯一的技术根本原因也是不准确的。流式争用和 BoltDB 行为解释了重要的故障机制。共享集群以及依赖它的功能数量解释了这些机制为何产生如此广泛的后果。可观测性和引导限制帮助解释了诊断和恢复为何花费如此长时间。

这种分离对于治理至关重要。根本原因、爆炸半径、检测弱点和恢复摩擦通常属于不同的控制所有者。软件所有者可能负责功能发布。平台团队可能拥有集群拓扑。可观测性团队可能拥有遥测独立性。服务团队可能拥有重启顺序和降级模式。事件指挥可能拥有恢复决策和公开更新。如果事后报告将每个问题归因于一个错误,可能会使其他所有者没有可测试的义务。

这种架构也挑战了关于冗余的常见假设。Consul 本身使用投票者和非投票者,并且能够承受普通的机器故障。但这并未阻止工作负载和软件行为使集群作为一个系统变得不健康。在一个共享故障域内的冗余节点不同于独立的故障域。当同一个集群为许多工作负载提供服务发现、健康和协调时,该集群内的复制可以针对机器故障保持可用性,但对于共享性能病理几乎不提供保护。

因此,实际的问责问题不是 Roblox 是否有冗余服务器。而是组织是否识别了哪些控制平面服务可能同时故障、平台有多大比例会跟随它们以及哪个独立路径可以维持最低服务或恢复。这需要以运营术语表达的依赖关系图,而不仅仅是基础设施图。它应说明哪些用户功能、内部服务、凭据、调度器、缓存和监控系统依赖每个控制组件,以及当组件变慢而非完全不可用时会发生什么。

效率变更需要生产形状测试

流式功能有一个有吸引力的目的。它旨在以更少的 CPU 和网络开销分发更新。Roblox 表示,它在部分服务上启用了该功能,观察到了预期收益,并逐步扩展到其他服务。10 月 27 日,停机前一天,它为负责流量路由的后端服务启用了流式功能。它还将流量路由节点数量增加了 50%,为预期的年底需求做准备。

不应将这个序列简化为一个简单的说法,即一次部署导致了 73 小时的停机。该公司描述了一个在事件发生前大约在新水平上运行了一天的系统。它还发现在立即的流式问题缓解后出现了第二个 BoltDB 问题。公开来源并未确定内部的批准记录、测试计划、推出标准或个别决策。没有这些记录就认定疏忽将超出证据范围。

然而,这个序列提出了一个强烈的控制问题:预生产和分阶段推出测试代表了什么?分布式系统变更可能通过功能测试和普通负载测试,但在流数量、变动、读写混合、CPU 拓扑、锁争用和真实依赖关系图的交互下失败。一个减少平均资源使用的功能仍可能在特定工作负载下产生危险的尾部。因此,规模测试必须再现生产的形状,而不仅仅是其平均事务率。

对于控制平面功能,生产形状测试应至少包括四个维度。第一个是负载组成:读、写、订阅、健康更新和变动必须以真实组合发生。第二个是拓扑:测试应代表生产中使用的客户端数量、集群、投票者、数据存储和 CPU 架构。第三个是依赖影响:团队需要知道当控制操作变慢时哪些平台功能会降级。第四个是逆转:即使控制平面本身受损,禁用该功能也必须安全且快速。

第五个维度是增长空间。该公司将事件与其数据中心服务器数量的增长联系起来。当底层服务器、容器和服务数量快速增长时,容量审批不能是一次性事件。控制应预测何时一个原本稳定的设计会进入争用机制,并在到达之前定义停止点。这需要能够区分健康的效率提升和缩小的安全边际的遥测。

分阶段部署仅在阶段与明确的中止条件相关联时才有用。推出百分比本身不是控制。操作人员需要服务水平指标、争用信号、领导者稳定性指标、写入延迟阈值和下游健康标准,以确定下一阶段是否可以继续。他们还需要一个足够长的观察窗口来捕捉工作负载周期。一个保持稳定一小时的变化仍可能在路由更新、部署和健康检查变动的不同组合下失败。

组织层面的教训比 Consul 更广泛。企业经常采用共享平台组件,因为它标准化工作并降低重复成本。成功鼓励更多团队依赖它。该组件逐渐成为常见模式风险,尽管没有单一的采用决策看起来危险。因此,治理必须随着使用变化重新审视集中度。一个对十项服务可容忍的依赖关系,当支持数百项服务时,可能需要隔离、分片或独立的回退。

为什么最初的修复没有解决事件

长时间的中断通常包括多个合理但无效的行动,因为初始模型是错误的。Roblox 的描述异常有用,因为它描述了这些失败的假设,而不是呈现一条光滑的回顾路径。

工程师首先看到延迟升高,怀疑硬件降级。在规模上,缓慢的硬件是可能的,集群对性能不佳的机器的反应可能与对干净故障的反应不同。团队更换了一个节点,后来将集群迁移到核心数加倍且存储更快的新机器。性能并未恢复。事后报告称,更多核心的架构可能使争用更严重。

团队随后尝试了状态重置策略。他们关闭 Consul 并恢复了停机开始附近的快照。由于依赖服务会立即恢复读写,工程师使用网络规则阻止访问并以受控方式重新引入。指标最初看起来健康,但当服务流量返回时再次降级。恢复的状态并未移除使集群不健康的工作负载或实现条件。

接下来,团队减少了需求。他们识别了 Consul 用户,禁用了非必要使用,缩减了服务规模,并降低了健康检查频率。这些操作本应给集群稳定空间。然而,问题在负载低得多的情况下再次出现。这个结果是一个关键观察:总流量无法单独解释故障。

只有在团队检查了更底层的性能证据后,与流式相关的争用才变得可见。禁用流式功能改善了 Consul 写入延迟。即使如此,一些当选的领导者仍然缓慢。HashiCorp 工程师后来将此行为与 Roblox 使用模式下 BoltDB 空闲列表维护联系起来。因此,事件涉及一系列模型修订,而不是单一的延迟洞察。

这段历史揭示了两个问责问题。第一个是诊断弹性。系统应保留足够的独立证据,以便在降级时测试竞争假设。硬件指标、锁配置文件、领导者行为、写入延迟、客户端变动、网络背压和依赖健康必须在无需依赖相同控制平面的情况下保持可用。第二个是决策可追溯性。事件指挥应记录为何采用某一假设、什么证据可能证伪它、做出了什么更改、发生了什么以及该更改引入了什么风险。

失败的补救尝试本身并非不良实践的必然证据。事件团队在不确定性下行动,必须在速度和安全之间权衡。更换可疑硬件、恢复已知快照和减少负载都可以是合理的。如果组织无法展示所使用的证据、未定义成功和回滚标准、或未从结果中学习的情况下重复干预,则会出现治理问题。

更强大的硬件提供了特别重要的教训。容量常被视为性能故障的通用补救措施。在并发病理中,它可能改变时序和争用,使行为更不稳定。购买余量不能替代理解协调成本。治理审查应询问规模计划是否建模了锁争用、排队、跨套接字效应和故障放大,而不仅仅是 CPU 利用率和存储吞吐量。

快照恢复也说明了状态完整性和服务健康之间的区别。恢复先前的快照可能移除损坏或不良状态。它不会移除不健康的访问模式、软件实现问题或依赖关系循环。恢复程序需要明确模型,说明快照预期修复什么以及客户端重新连接前必须改变哪些条件。

因此,73 小时的持续时间不仅仅是寻找一个隐藏缺陷所花费的时间。它包括测试合理假设、发现控制平面无法承受返回工作负载、单独领导人行为的工作绕行、然后重建其上的服务。诚实的连续性计划必须为这个链条预留预算。平均修复时间无法根据重启一个组件所需的时间来预测,当实际任务是重建一个依赖平台时。

恢复是一个独立的工程系统

一旦 Consul 稳定,Roblox 并未立即准备好重新开放。缓存层必须重新部署。事后报告称,缓存通常处理每秒约 10 亿次请求,跨多个层,并持有可从底层数据库重新填充的临时数据。理论上,这使得重新部署简单。实际上,恢复遇到了不正确的调度状态、一个对调度器看似可用但不健康的节点,以及为增量变更而非大型冷启动设计的部署工具。

在 54 小时时,Consul 足够稳定以继续恢复。到 61 小时,公司报告了健康的 Consul 集群和缓存系统。剩余服务随后必须以适当容量启动并通过验证,然后流量才能返回。冷缓存和系统健康的不确定性使得立即返回所有流量不安全。

Roblox 使用 DNS 转向逐步接纳用户。事后报告描述了以大约 10% 的步骤增加访问,同时工程师监控数据库负载、缓存性能和整体稳定性。状态页面记录了 10 月 31 日 12:51 的增量流量准入和 16:45 的正常运营。这不仅仅是通信阶段。这是对恢复的平台能否承受返回需求的受控生产测试。

这个序列暴露了弹性规划中的一个常见弱点。组织测试备份创建,也许还有组件故障切换,但不定期测试完整的冷启动。冷启动提出不同的问题。调度器能否重建准确状态?缓存能否在不压倒数据库的情况下预热?秘密和服务发现能否按正确顺序初始化?当数千个实例缺失而不是小百分比变化时,部署工具是否高效?事件团队是否知道哪些服务对最小可行平台是必要的?

因此,恢复工程应有自己的产品负责人、需求和练习。它需要依赖感知的启动计划、可以安全停止的自动化、冷缓存的容量模型、状态重建的验证检查以及具有可测量门控的流量准入控制器。工具必须在正常假设为假时也能工作。

这也改变了运营商应如何衡量恢复目标。Consul 的恢复时间目标与 Roblox 平台的恢复目标不同。后者包括控制平面之上的所有关键依赖、完整性检查、缓存预热、认证、用户数据访问、创作者工具、支付和受控的流量返回。在服务可用之前声明组件健康可能在技术上准确,但在操作上具有误导性。

反过来也成立。恢复公共页面并不证明平台已恢复。当后台处理、创作者工具、交易或数据完整性仍然降级时,服务可能看似可用。恢复证据应覆盖一组定义的用户和创作者旅程,而不仅仅是 HTTP 响应或并发用户图。

练习之所以重要,是因为恢复代码会衰退。服务依赖关系变化,新缓存出现,所有权转移,操作文档过时。一年前有效的剧本可能不再代表系统。2022 年 1 月,Roblox 表示已重新设计其缓存部署机制,而实施仍在进行中,更广泛的自动化工具和流程仍在开发中。它单独表示,已确定的 Nomad 增强功能,用于在长时间不可用后启动大型作业,计划在其下一次 Nomad 升级中。负责的后续行动是这些机制在有意义规模上反复演练的证据,而不仅仅是它们被计划。

监控必须在其监控的系统崩溃时幸存

事后报告确定了遥测和 Consul 之间的循环依赖。一些关键监控系统依赖受影响的基础设施,在工程师最需要时减少了可见性。Roblox 表示后来移除了该依赖,并增加了对 Consul 和 BoltDB 性能的更有针对性洞察。

这是一个经典但持续的故障模式。集中遥测可以改善正常运营,然而与监控服务共享身份、发现、调度、存储或网络依赖的监控管道可能在广泛事件期间消失。仪表板可能看起来空白,警报可能停止,运营商可能将缺失数据误认为是改进。

独立可观测性不需要每个分析系统的第二份副本。它需要一条具有不同故障依赖的最小证据路径。该路径应保留一小组关键指标和日志:集群领导力、写入延迟、队列深度、错误率、服务发现健康、认证可用性、配置更改和网络可达性。事件响应者应在正常生产控制服务不可用时也能访问它。

监控和诊断之间的区别很重要。警报可以报告延迟高,但诊断需要历史比较证据。工程师需要知道变化何时开始、哪个工作负载转移了、领导力是否改变、锁争用如何演变以及哪些下游服务首先失败。如果对该证据的保留或访问依赖受损的平台,组织将失去在假设之间进行选择所需的时间顺序。

Roblox 后来的可靠性文章描述了一个更广泛的控制模型,围绕服务级别指标、依赖指标、架构审查、事件报告和月度可靠性报告。该模型很重要,因为它将依赖关系视为服务结果的可衡量贡献者。一项服务可以满足其内部健康目标,但由于依赖关系缓慢或不可达而使其消费者失败。从消费者角度衡量减少了从狭窄服务器指标宣告成功的可能性。

治理测试是这些措施是否驱动决策。仪表板的存在并不减少风险。团队需要阈值、负责人和后果:低于其服务目标的依赖关系触发纠正工作;新依赖关系未经故障模式审查不得启动;事件行动项保持开放直到证据显示控制有效;高级领导者可以看到跨团队边界的共同依赖关系。

独立可观测性也应被演练。在弹性测试中,可以故意隔离主要遥测路径,以确认最小路径仍然可用、可信且被理解。否则,回退可能在需要时因过期的凭据、缺失的路由、不足的容量或不熟悉的工具而失败。

创作者依赖改变了连续性测试

创作者经济并非此案例的装饰部分。Roblox 推广了一种模式,创作者无需运营自己的全球基础设施即可构建、发布和货币化体验。公司处理平台服务,并通过 Robux 和开发者交换计划分配收入。2021 年,Roblox 报告了数亿美元的开发者交换费用,并表示其社区收入超过 5 亿美元。

这些数字并未确定停机期间损失的金额。开发者收入数字涵盖一个时期和一个定义的计划。日活跃用户衡量活动,而非业务。参与小时数、预订和交易是不同的指标。问责分析不应将每日平均值乘以 73 小时并称结果为创作者损失。使用因时间、地理和体验而异,不可用的平台可能会转移活动,而非永久消除每笔交易。

相关点是控制不对称。创作者可以设计体验并管理自己的团队,但无法恢复 Roblox 的服务发现、缓存或数据中心。平台的托管模型将基础设施工作从创作者转移开并集中在 Roblox 内部。当平台失败时,这些创作者几乎没有技术替代选择。

这使得利益相关者影响衡量成为连续性控制。Roblox 的第一次更新表示将实施一项政策,使创作者社区在经济上得到弥补。该承诺表明 Roblox 将事件视为具有超出用户不便的经济影响。当前记录中的公开来源未提供足够细节来得出结论关于每个创作者如何被衡量或补偿。承诺和结果是不同的事实。

一个可辩护的弥补方法将定义资格、受影响期间、基线活动、排除、申诉以及新体验或季节性体验的处理。它将解释衡量使用了预期的 Robux、基于参与的支付、交易、广告还是其他代理。它还将解决那些主要损失是运营而非直接交易的创作者,例如因停机延迟发布或员工时间用于管理社区期望。

没有模型可以重建完美的反事实。问责不要求错误的精确性。它要求透明的规则、一致的适用以及异常情况可以被审查的证据。方法应避免只奖励历史数据最容易建模的最大创作者,而忽视依赖集中度较高的小团队。

连续性设计也可以给创作者在事件前更好的选择。平台状态界面应区分用户访问、Studio、资产交付、数据存储、交易和发布。面向创作者的通告应说明哪些功能降级以及哪些工作可以安全执行。导出和备份功能可以减少对源资产和业务记录的依赖,即使体验本身无法在其他地方运行。合同和政策语言应使服务期望和补救限制可理解。

同样的原则也适用于 Roblox 之外。市场、应用商店、云平台和软件生态系统邀请第三方在托管基础设施上建立业务。平台可能不保证收入,但它应能解释如何衡量连续性、保护共同依赖关系、沟通事件和评估损害。增长增加了这一义务,因为更多外部活动与内部控制选择耦合。

Roblox 后来的经济资料使依赖关系明确。公司描述了基础设施托管、存储、客户支持、本地化、支付处理和审核作为其承担的成本。它还描述了数十亿虚拟交易和不断增长的创作者收入。这些是规模的好处,但它们也是可用性构成经济架构一部分的证据。

因此,运营商应将创作者连续性视为董事会层面的风险,与用户参与和收入并列。有用的衡量包括面向创作者的服务可用性、交易完整性、发布可用性、延迟支付调整时间、索赔处理时间以及跨创作者规模的影响分布。一个单一的平台正常运行时间数字可能隐藏一个对创作者依赖的工具产生不成比例影响的停机。

披露应区分原因、条件和承诺

Roblox 的披露分阶段演变。CEO 在 11 月 1 日的更新对持续时间表示歉意,描述了在重负载下不堪重负的核心系统,否认了外部流量和特定体验是原因,表示没有已知的持久性数据丢失,并承诺创作者补救。详细的事后报告在一月到达,此前公司表示完成了更多分析并在可靠性改进方面取得了进展。

这个序列有优势。第一份声明纠正了谣言,而没有假装包含最终的技术说明。后来的文件描述了失败的假设、架构集中、监控弱点和恢复困难。它还承认了责任并列出了进行中的变更。

然而,记录应带有归因阅读。因果说明、无已知数据丢失声明和补救描述是 Roblox 的发现和陈述。与 HashiCorp 的合作增加了技术分量,但公开文件不是独立审计。负责任的分析可广泛使用它们,同时明确其来源。

良好的事件沟通至少分离四个层面。第一个是观察到的影响:哪些服务失败、何时以及为谁。第二个是当前理解:工作因果模型及其置信度。第三个是操作行动:正在更改什么以及在恢复期间仍存在什么风险。第四个是补救:如何识别和支持受影响方。

混合这些层面会产生可避免的问题。初步原因可能被误认为是最终发现。一个标记为运营的系统可能被当作每个创作者工作流都已恢复。一个计划中的控制可能被视为已完成。补偿承诺可能被报告为补偿已发生的证据。

状态记录很有用,因为它保留了运营状态的实时变化。它显示了调查、识别、恢复、监控、增量流量准入和解决。事后报告提供了状态页面在事件期间无法提供的技术叙述。这两个文件服务于不同目的,不应在尊重其详细程度的情况下被强制纳入一个时间线。

一个负责任的结案会将每个主要发现与负责人、截止日期和验证方法关联。例如,移除循环遥测依赖后应进行弹性测试,显示在 Consul 隔离期间关键指标仍然可用。拆分工作负载后应进行爆炸半径演习。改进引导后应进行完整的冷启动演练。建设另一个数据中心后应进行可衡量的故障切换。

公开披露无需暴露敏感配置或创建安全风险。它可以以适当的水平说明控制目标、测试类型和结果。该证据比一个无法判断运营状态的冗长项目列表更有价值。

从一个活跃数据中心到单元

Roblox 的 2023 年基础设施回顾描述了停机后拓扑的重大变化。在事件发生时,它说,平台有一个活跃数据中心,尽管其内部组件有备份。公司建设了另一个地理区域的数据中心,并实现了主动-被动安排:一个站点处理工作负载,另一个站点准备作为备份。

这解决了节点级冗余无法应对的故障模式。如果共同依赖或操作错误使整个站点不可用,不同的站点可以提供另一条恢复路径。但主动-被动保护的强度仅取决于复制、准备状态和故障切换。被动站点可能漂移、缺乏容量或继承相同的软件缺陷。其价值必须通过包括数据一致性、控制平面可用性、凭据、网络路由和流量返回的演练来证明。

Roblox 还描述了其数据中心内部的蜂窝式基础设施。一个单元是一组有界的机器和服务,旨在包含故障。服务可以跨单元复制,允许移除不健康的单元而其他单元继续运行。公司表示,当 2023 年文章发表时,一个单元包含约 1400 台机器,并且超过 70% 的后端服务流量在高峰时来自单元。

单元是对爆炸半径的响应,而不仅仅是封装技术。它们只有在依赖关系、部署系统和数据访问尊重边界时才有效。如果每个单元都依赖一个全局控制服务、共享数据库或通用配置推送,表面的分离可能比图表显示的更弱。Roblox 自己表示,主动-主动实验识别了设计假设,特别是关于数据访问的假设,需要返工。

统一性创造了另一个权衡。可互换的单元使故障切换和重新配置更容易。相同的统一软件和配置也可能快速传播缺陷。因此,弹性需要选定层的受控多样性、跨单元的分阶段部署以及停止传播的能力。单元架构应定义哪些变更可以同时到达所有单元,哪些必须经过观察门。

更长远的目的是主动-主动操作,其中两个数据中心都承载流量,负载均衡器基于延迟、容量和健康做出决策。主动-主动可以减少故障切换延迟,因为备用路径已经在服务用户。它也增加了协调复杂性。数据一致性、会话状态、身份、支付和创作者资产在流量跨区域移动时可能表现不同。

问责指标不是组织是否有两个数据中心或 34 个单元。而是用户和创作者活动在真实故障中幸存多少。拓扑数量是一个输入。结果衡量包括保留的参与百分比、隔离单元的时间、转移流量的时间、数据协调错误率以及创作者工具是否仍然可用。

Roblox 的 2024 年基础设施组文章直接将可用性工作与 2021 年停机联系起来。它描述了 99.99% 的月度用户正常运行时间目标,并将可用性、服务成本和工程生产力作为核心指标。这种框架认识到了真实的紧张关系。最大冗余可能昂贵且操作复杂。成本降低可能削弱边际。生产力工具可能创建共享依赖。治理必须明确权衡,而不是允许任何一个指标主导。

公司还描述了支持数千内部服务、超过 135,000 台服务器和数亿并发连接的基础设施足迹。确切数字因日期和定义而异,因此不应不加小心地进行比较。其方向是明确的:平台在事件后继续增长。因此,补救架构必须跑赢增长。在实施时足够的控制,随着服务、机器和创作者倍增可能变得不足。

后续文件保留了残余风险问题

公司回顾描述了进展,而 SEC 文件继续描述中断风险。两者并不矛盾。补救可以减少已知故障模式,而不消除平台中断的更广泛可能性。

Roblox 的 2021 年 10-K 表确定了十月停机,并警告中断可能损害与用户、开发者和创作者的关系,减少参与,损害品牌并影响财务结果。后来的文件讨论了运营技术基础设施的成本和复杂性、对内部和外部服务的依赖、冗余和灾难恢复的限制,以及业务中断保险可能不覆盖每种损失的可能性。

2023 年 10-K 表表示 Roblox Cloud 被设计为容错并准备好灾难恢复。单独地,它表示公司拥有的服务器在 19 个城市的数据中心和区域边缘数据中心运营,并且 Roblox 继续扩展至多个数据中心(地理区域内和跨区域)以提高可靠性和容错。该文件还继续在其风险讨论中识别 2021 年 10 月和 2022 年 5 月的停机,并披露了 2023 年确认的 500 万美元业务中断保险追偿,与 2021 年第四季度平台中断相关。

该会计项应被狭义解释。它不是总损失估计、创作者损害赔偿数字或补救证明。它显示事件有可保险的商业后果,并在后来记录。它也说明了中断效应如何跨报告期。

风险因素语言有其自身边界。文件可能描述可能发生的情况,而非特定事件中发生的情况。它对于识别公司所声称的风险敞口和控制环境很有用,但不应被用来制造未报告失败。反之,补救后重复的风险语言并不证明补救失败。它反映了这种规模的平台保留连续性风险的事实。

最有信息的比较是在控制声明和可衡量结果之间。如果公司说单元限制爆炸半径,事件报告应显示当单元失败时影响更少用户。如果主动-被动保护完整,演练应显示第二站点能在定义期间内承担负载。如果监控独立,测试应显示响应者在控制平面故障期间保留关键数据。如果引导改进,冷启动演练应在恢复目标内完成。

该证据应随时间趋势化。单个成功测试可能证明路径一次有效。它不能证明在软件、人员和数据变化后路径仍然准备就绪。连续性控制需要周期性的保证。

一个实用的问责标准

Roblox 案例支持一个具有十项关联测试的连续性标准。

第一,从消费者向后映射控制依赖关系。从用户和创作者旅程开始,而非基础设施产品。对于每个旅程,识别身份、服务发现、调度、存储、缓存、支付、网络、配置和监控依赖关系。标记跨多个旅程共享的服务以及恢复所需的最小路径。

第二,以运营术语定义故障域。节点、集群、单元和数据中心仅在依赖关系尊重边界时才是有用的标签。测试缓慢故障以及干净故障。降级的控制平面可能比不可用的控制平面更难处理,因为健康检查和重试会在组件名义上可达时放大负载。

第三,使变更测试类似生产。代表实际的读写混合、客户端变动、流数量、CPU 拓扑、服务数量和峰值周期。推出应有定量的中止条件和经过测试的逆转路径。容量计划应监控接近争用机制,而不仅仅是平均利用率。

第四,保留独立证据。关键遥测必须在其观察的系统故障时幸存。为领导力、写入延迟、队列深度、错误、配置更改和依赖健康保留最小离域路径。演练该路径并验证事件条件下的访问。

第五,将冷启动作为产品对待。记录并自动化启动顺序、状态重建、缓存预热、秘密可用性、数据库保护和最小可行服务。以代表性规模从冷启动测试。记录哪里仍需要手动干预并有意减少它。

第六,控制流量返回。恢复应使用可测量阶段。在每个阶段,评估错误率、延迟、缓存性能、数据库压力、事务正确性和创作者工具可用性。在流量开始返回前定义停止和回滚条件。

第七,使用有效分母衡量利益相关者影响。区分用户、创作者、交易、参与小时数和业务。解释假设和不确定性。创作者补救应发布资格和计算规则,并提供申诉路径,而非呈现不透明的总数。

第八,将发现与已验证行动连接。每个主要事件条件需要负责人、目标日期和验证方法。因为代码已发货而关闭任务比因为故障演练展示了预期结果而关闭更弱。

第九,持续治理集中度。共享平台随着采用增长变得风险更高。重新评估一个集群、身份服务、配置平面或可观测性系统是否已成为共模依赖。在下一个规模阈值之前要求隔离或回退,而非之后。

第十,将连续性报告为结果组合。单一的正常运行时间百分比不足够。跟踪用户可用性、创作者工具可用性、事务完整性、故障切换时间、恢复时间、爆炸半径、行动项年龄和演练结果。高级领导者应看到成本和生产力决策如何改变这些结果。

这些测试分配了责任,而不假装一个团队控制一切。软件供应商拥有其产品中的缺陷和修复。平台运营商拥有产品如何被测试、配置、隔离和监控。服务团队拥有降级模式和重启准备。事件指挥拥有协调决策。高管拥有风险偏好和资源权衡。创作者平台拥有用于评估和处理其运营的生态系统损害的方法。

这些测试也防止了私有云与公共云之间无益的辩论。Roblox 认为私有基础设施在其规模下提供了成本和延迟优势,并在适当的地方使用公共云。任何一种模式都可能失败。公共云可能提供独立区域和托管控制平面,但客户仍然可能创建共享依赖或弱恢复路径。私有基础设施提供控制,但运营商必须构建和验证提供商可能提供的功能。问责跟随控制和依赖,而非营销类别。

2021 年事件之所以仍然重要,是因为它一次暴露了多个层面。一个为效率设计的功能与不寻常的工作负载不良交互。第二个存储行为使领导者不稳定。一个共享集群承担了几个基础角色,创建了集中风险问题。监控依赖受影响环境。恢复工具未设计用于所需的冷启动。创作者依赖平台的恢复。

Roblox 的详细描述和后来的架构工作提供了异常丰富的学习证据。公司描述了具体的技术机制,承认了循环遥测,建设了另一个数据中心,引入了单元并实验了主动-主动操作。这些是比投资可靠性的通用承诺更强的信号。

最终的问责判断应仍基于证据。正确的问题不是 Roblox 是否声明已从停机中学习。而是平台能否反复证明一个类似的控制平面故障现在仍控制在可观察和可恢复的范围内,同时用户和创作者保留可接受的服务水平。随着平台增长,这种证明必须更新。

来源

  1. https://about.roblox.com/intelligence team/2021/11/update-recent-service-outage
  2. https://about.roblox.com/intelligence team/2022/01/roblox-return-to-service-10-28-10-31-2021
  3. https://about.roblox.com/intelligence team/2022/01/2021-year-review-letter-ceo
  4. https://about.roblox.com/intelligence team/2022/01/year-roblox-2021-data
  5. https://about.roblox.com/intelligence team/2022/02/supporting-protecting-roblox-developer-user-community
  6. https://about.roblox.com/intelligence team/2022/04/delivering-large-scale-platform-reliability
  7. https://about.roblox.com/intelligence team/2022/10/team-behind-the-tech-creator-group
  8. https://about.roblox.com/intelligence team/2023/03/enabling-creation-anything-anywhere-anyone
  9. https://about.roblox.com/intelligence team/2023/04/team-behind-tech-economy-group
  10. https://about.roblox.com/intelligence team/2023/07/vision-roblox-economy
  11. https://about.roblox.com/intelligence team/2023/12/making-robloxs-infrastructure-efficient-resilient
  12. https://about.roblox.com/intelligence team/2024/07/how-the-infrastructure-group-drives-the-future-of-everything-we-do-at-roblox
  13. https://about.roblox.com/intelligence team/2023/03/tech-stack-metaverse
  14. https://about.roblox.com/intelligence team/2024/08/how-roblox-is-fueling-career-opportunities-across-the-us
  15. https://www.sec.gov/Archives/edgar/data/1315098/000131509821000030/rblx-2021118xexhibit991.htm
  16. https://www.sec.gov/Archives/edgar/data/1315098/000131509821000030/rblx-2021118xexhibit992.htm
  17. https://www.sec.gov/Archives/edgar/data/1315098/000131509822000035/rblx-20220215xexhibit991.htm
  18. https://www.sec.gov/Archives/edgar/data/1315098/000131509822000035/rblx-20220215xexhibit992.htm
  19. https://www.sec.gov/Archives/edgar/data/1315098/000131509822000058/rblx-20211231.htm
  20. https://www.sec.gov/Archives/edgar/data/1315098/000131509822000084/rblx-20220331.htm
  21. https://www.sec.gov/Archives/edgar/data/1315098/000131509822000125/rblx-20220630.htm
  22. https://www.sec.gov/Archives/edgar/data/1315098/000131509823000035/rblx-20221231.htm
  23. https://www.sec.gov/Archives/edgar/data/1315098/000131509824000026/rblx-20231231.htm
  24. https://status.roblox.com/pages/incident/59db90dbcdeb2f04dadcf16d/617b33af51fec9053d6122a1