概況

  • Roblox は、2021年10月の障害の原因がピーク時の外部トラフィックや特定の体験ではないと発表した。同社は、このインシデントをワークロード内の Consul における2つの技術的問題、すなわちストリーミング機能に関連する競合と病理的な BoltDB パフォーマンスに起因するとした。複数の基本機能を担う単一の Consul クラスタが影響を拡大し、監視の依存関係が問題の発見を困難にした。
  • 復旧には直接的な原因の除去だけでは不十分だった。エンジニアはキャッシュの再構築、スケジューリング状態の修正、適切なキャパシティでのサービスの再起動と検証、そして段階的なトラフィック受付を行う必要があった。記録は、復旧ツールとコールドスタート演習が個別の継続性管理手段であり、障害発生後に即興で対応できるものではないことを示している。
  • Roblox はその後、独立したテレメトリ、Consul の追加分離、第2データセンター、セル型インフラ、アクティブ-アクティブ実験について説明した。これらの変更は優先順位の変更を示す意味のある証拠だが、持続可能な説明責任は依然として、計測されたフェイルオーバー、依存関係マップ、復旧訓練、クリエイター影響の評価方法、是正措置の公開による完了にかかっている。

アップタイムがプラットフォームの取引条件の一部になった

2021年10月に Roblox がオフラインになったとき、それはもはや単なるゲームのカタログではなかった。それは人々が出会い、クリエイターが体験や仮想アイテムを公開し、デベロッパーがビジネスを構築する管理されたプラットフォームだった。Roblox は、独立したスタジオがそうでなければ自ら構築しなければならないインフラの多くを提供していた:ホスティング、ストレージ、ネットワーキング、配信、課金、モデレーション、カスタマーサポート、グローバルコンプライアンス、大規模なオーディエンスへのアクセス。この取り決めは、創造のコストを引き下げた。同時に、運用管理を集中させた。

この区別は説明責任にとって重要である。従来のエンターテインメント停止は、顧客が購入したサービスを一定期間利用できなくする。プラットフォームの停止は、複数の関係を同時に遮断する可能性がある。ユーザーは社会的・娯楽的空間へのアクセスを失う。クリエイターは、影響を受けるプラットフォーム機能に作品が依存する度合いに応じて、エンゲージメント、取引、体験の運営能力を失う可能性がある。プラットフォーム収入に依存するチームは、作業時間と商業的勢いを失う可能性がある。Roblox 自身はアクティビティ、予約、信頼を失う。当事者は障害を防止または修復する能力において平等ではない。なぜなら Roblox が基盤システムを制御しているからである。

同社自身の数字は、その取引の規模を示している。技術的なポストモーテムによると、インシデント当時、毎日約5000万人のプレイヤーが Roblox を定期的に利用していた。2021年の財務資料は、デイリーアクティブユーザー、エンゲージメント、デベロッパーの収益の急速な成長を報告していた。Roblox は後に、デベロッパーコミュニティが2021年に5億ドル以上を稼いだと述べた。これらの数字は異なる集団と尺度を表しており、単一の被影響者数に混ぜてはならない。それらの関連性はより単純である:2021年後半までに、サービス継続性は消費者への影響だけでなく経済的な影響も持っていた。

これは、大規模プラットフォームが完全な可用性を約束するという意味ではない。複雑な分散システムは故障し、事業者は遅延、コスト、制御、回復力の間でトレードオフを行わなければならない。説明責任は、より実用的な質問から始まる:組織は、自らが招いた依存関係のために、システムを設計し、テストし、統治していたか?そのテストには、インシデント前のアーキテクチャ、変更検証の品質、可観測性の独立性、コールドスタートからの再起動能力、ステークホルダーへの影響を測定する方法、是正作業後の証拠が含まれる。

Roblox は意図的なインフラ選択を行った。レイテンシに敏感なワークロードには、プライベートインフラが自社の規模においてより経済的で予測可能だと信じたため、中核システムを自社のデータセンターで運用した。同社は、その節約がクリエイターに還元できるものに影響を与えたと述べた。これは合理的な戦略であり得る。しかし、所有権は責任のマップを変える。基盤となるコンピュート、ストレージ、ネットワーキング、オーケストレーションを制御する企業は、自社のコントロールプレーンで障害が発生した場合、継続性の責任をパブリッククラウドプロバイダーに帰する根拠が少なくなる。その決定を正当化するアーキテクチャ、運用モデル、復旧能力を自ら所有しているからである。

したがって、この障害は対照事例として最も有用である。効率性を向上させるために設計された技術的メカニズムが、スケール、共有依存関係、復旧中の制約とどのように相互作用するかを示している。また、詳細なポストモーテムがどれほど価値があっても、説明責任の一部に過ぎない理由も示している。より厳格な基準は、組織が教訓を、プラットフォームが成長しても機能し続ける独立した管理手段に変換できるかどうかを問う。

コントロールプレーンの障害がプラットフォーム停止に

Roblox の詳細な説明は、10月28日13:37 Pacific 時間に始まる。このとき Vault のパフォーマンスが低下し、1台の Consul サーバーで高い CPU 負荷が示された。プレイヤーにはまだ影響はなかった。プラットフォームは一連の HashiCorp 技術に依存していた。Nomad はコンテナをスケジュールし、Vault はシークレットと認証ワークフローをサポートし、Consul はサービスディスカバリ、ヘルスチェック、セッションロック、キーバリューストレージを提供していた。Roblox の規模では、これらは周辺的なツールではなかった。数千のサービスとコンテナが互いに発見し信頼するのを支援していた。

このアーキテクチャは、不健全な Consul クラスタが複数の制御機能を同時に損なう可能性があることを意味していた。サービスは依存関係を確実に発見できなくなる。Nomad と Vault も Consul に依存していた。新しいコンテナのスケジューリングと本番シークレットの取得が困難になった。したがって、基礎となるユーザーデータベースが最初の原因として説明されていないにもかかわらず、コントロールプレーンの問題はアプリケーション可用性の問題に波及した。

ポストモーテムによると、16:35までにオンラインプレイヤー数は通常の約半分に減少した。16:00のステータス記録は、多くのプレイヤー体験が影響を受けたと述べている。後の更新では、内部システムの問題、復旧作業中、特定された根本的な内部原因、段階的なトラフィック復旧が説明された。通常運営は10月31日16:45に復旧したとマークされた。エンジニアリングの説明は、この間隔を73時間と測定した。

Roblox は2つの技術的メカニズムを特定した。第一に、比較的新しい Consul ストリーミング機能が、同社の環境に存在する異常に高い読み取りと書き込み負荷の組み合わせ下で過剰な競合に遭遇した。ストリーミングは、ロングポーリングと比較して CPU 使用率とネットワーク帯域幅を削減することを意図していた。しかし、Roblox の本番パターン下では、その実装は競合を集中させ、書き込みをブロックし、クラスタを劣化させた。

第二に、Roblox のワークロードは、Consul が Raft 書き込み先行ログに使用していた BoltDB で病理的なパフォーマンスを露呈した。BoltDB はフリーリストで再利用可能なページを追跡していた。インシデントの使用パターン下では、その構造を維持することが高コストになった。ポストモーテムは、物理サイズとフリーリストがライブデータから示唆されるよりもはるかに大きいログストアを説明し、小さな論理追記がはるかに多くの作業を伴う原因となった。このメカニズムは、遅い Raft 書き込みと不安定なリーダーに寄与した。

これらは別個の問題だった。それらを漠然としたデータベースバグにまとめるのは不正確であり、単一の Consul クラスタを唯一の技術的ルート原因として説明するのも同様に不正確である。ストリーミング競合と BoltDB の動作は重要な障害メカニズムを説明する。共有クラスタとそれに依存する機能の数は、それらのメカニズムがなぜそれほど広範囲な結果をもたらしたかを説明する。可観測性とブートストラップの制限は、診断と復旧にこれほど時間がかかった理由を説明する。

この分離はガバナンスの中心である。根本原因、爆発半径、検出の弱さ、復旧の摩擦は通常、異なる管理責任者に属する。ソフトウェアオーナーは機能のロールアウトに責任を持つかもしれない。プラットフォームチームはクラスタトポロジを所有するかもしれない。可観測性チームはテレメトリの独立性を所有するかもしれない。サービスチームは再起動順序と縮退モードを所有するかもしれない。インシデントコマンドは復旧の決定と公開更新を所有するかもしれない。ポストモーテムがすべての問題を1つのバグに割り当てると、他の責任者をテスト可能な義務なしに残す可能性がある。

このアーキテクチャは、冗長性に関する一般的な前提にも挑戦する。Consul 自体は投票者と非投票者を使用し、通常のマシン障害を生き残ることができた。しかし、それによってワークロードとソフトウェアの動作がクラスタをシステムとして不健全にするのを防げなかった。1つの共有障害ドメイン内の冗長ノードは、独立した障害ドメインと同じではない。同じクラスタが多くのワークロードに対してサービスディスカバリ、ヘルス、コーディネーションを運ぶ場合、そのクラスタ内の重複は、マシン障害に対して可用性を維持できるが、共有パフォーマンス病理に対してほとんど保護を提供しない。

したがって、実用的な説明責任の質問は、Roblox に冗長サーバーがあったかどうかではない。組織が、どのコントロールプレーンサービスが一緒に障害を起こす可能性があるか、プラットフォームのどの程度がそれに追随するか、最小限のサービスまたは復旧を持続できる独立したパスはどれか、を特定していたかどうかである。これには、運用用語で表現された依存関係マップが必要であり、単なるインフラ図ではない。そのマップは、各制御コンポーネントに依存するユーザー機能、内部サービス、クレデンシャル、スケジューラ、キャッシュ、監視システム、およびコンポーネントが完全に利用不能ではなく遅くなったときに何が起こるかを示すべきである。

効率性の変更には本番形状のテストが必要

ストリーミング機能には魅力的な目的があった。CPU とネットワークのオーバーヘッドを減らして更新を配信するように設計されていた。Roblox は、サービスのサブセットで機能を有効にし、期待されるメリットを観察し、数か月かけて拡大したと述べた。10月27日、障害の1日前に、トラフィックルーティングを担当するバックエンドサービスでストリーミングを有効にした。また、年末の需要増加に備えて、トラフィックルーティングノードの数を50%増加させた。

このシーケンスは、単純に1つのデプロイが73時間のダウンタイムを引き起こしたという主張に還元されるべきではない。同社は、インシデントの前に約1日間新しいレベルで動作しているように見えたシステムについて説明した。また、ストリーミングの問題が軽減された直後に、2番目の BoltDB 問題を発見した。公開情報源は、内部承認記録、テスト計画、ロールアウト基準、個別の決定を確立していない。それらの記録なしに過失を割り当てることは証拠を超えるだろう。

それでも、このシーケンスは強力な管理質問を提起する:プリプロダクションと段階的ロールアウトのテストは何を代表していたのか?分散システムの変更は、機能テストと通常の負荷テストに合格するが、ストリーム数、チャーン、読み書き混合、CPU トポロジ、ロック競合、実際の依存関係グラフの相互作用下で失敗する可能性がある。平均リソース使用量を削減する機能でも、特定のワークロード下で危険なテールを作り出す可能性がある。したがって、スケールテストは、平均トランザクション率だけでなく、本番の形状を再現しなければならない。

コントロールプレーン機能の場合、本番形状のテストには少なくとも4つの次元を含めるべきである。第一に負荷構成:読み取り、書き込み、サブスクリプション、ヘルス更新、チャーンは現実的な組み合わせで発生しなければならない。第二にトポロジ:テストは本番で使用されるクライアント、クラスタ、投票者、データストア、CPU アーキテクチャの数を代表すべきである。第三に依存関係の影響:チームは、制御操作が遅くなったときにどのプラットフォーム機能が劣化するかを知る必要がある。第四に復元力:機能を無効にすることは、コントロールプレーン自体が損なわれている場合でも、安全かつ迅速でなければならない。

5番目の次元は成長余裕である。同社はインシデントをデータセンター内のサーバー数の増加と関連付けた。キャパシティ承認は、サーバー、コンテナ、サービスの基盤人口が急速に拡大している場合、一度きりのイベントではありえない。制御は、そうでなければ安定した設計が競合レジームに近づく時期を予測し、そこに到達する前に停止点を定義すべきである。そのためには、健全な効率性の向上を縮小する安全マージンから区別できるテレメトリが必要である。

段階的デプロイは、ステージが明示的な中止条件に接続されている場合にのみ有用である。ロールアウトのパーセンテージだけでは制御にならない。オペレーターは、サービスレベルインジケータ、競合信号、リーダー安定性指標、書き込みレイテンシしきい値、ダウンストリーム健全性基準を必要とし、次のステージが進行可能かどうかを決定する。また、ワークロードサイクルを捉えるのに十分な観測ウィンドウも必要である。1時間安定している変更でも、ルーティング更新、デプロイ、ヘルスチェックチャーンの異なる組み合わせ下で失敗する可能性がある。

組織の教訓は Consul よりも広い。企業は、作業を標準化し重複コストを削減するために、共有プラットフォームコンポーネントを採用することが多い。成功はより多くのチームがそれに依存することを促進する。そのコンポーネントは、単一の採用決定が危険に見えなくても、徐々に共通モードリスクになる。したがって、ガバナンスは使用量が変化するにつれて集中を再検討しなければならない。10のサービスにとって許容可能だった依存関係は、数百をサポートする場合、分離、シャーディング、または独立したフォールバックを必要とするかもしれない。

最初の修正がインシデントを修正しなかった理由

長い停止には、初期モデルが間違っているため機能しないいくつかの合理的なアクションが含まれることが多い。Roblox の説明は、クリーンな回顧パスを提示するのではなく、これらの失敗した仮説を説明している点で異常に有用である。

エンジニアは最初にレイテンシの上昇を見て、ハードウェアの劣化を疑った。大規模では、遅いハードウェアはもっともらしく、クラスタはクリーンに障害を起こすマシンとは異なる反応を示す可能性がある。チームはノードを交換し、後にコア数が2倍でストレージが高速な新しいマシンにクラスタを移行した。パフォーマンスは回復しなかった。ポストモーテムは、コア数の多いアーキテクチャが競合を悪化させた可能性があると述べた。

次にチームは状態リセット戦略を試みた。Consul をシャットダウンし、停止開始頃からのスナップショットを復元した。依存サービスがすぐに読み取りと書き込みを再開するため、エンジニアはネットワークルールを使用してアクセスをブロックし、制御された方法で再導入した。メトリクスは最初は健全に見えたが、サービストラフィックが戻ると再び劣化した。復元された状態は、クラスタを不健全にしたワークロードまたは実装条件を除去していなかった。

次にチームは需要を削減した。Consul ユーザーを特定し、非必須の使用を無効にし、サービスをスケールダウンし、ヘルスチェック頻度を低下させた。これらのアクションはクラスタに安定化の余地を与えるはずだった。しかし、はるかに少ない負荷下で問題が再発した。この結果は重要な観察だった:集約トラフィックだけでは障害を説明できなかった。

チームが低レベルのパフォーマンス証拠を調査した後にのみ、ストリーミング関連の競合が見えるようになった。ストリーミングを無効にすると Consul の書き込みレイテンシが改善した。それでも、一部の選出されたリーダーは遅いままだった。HashiCorp のエンジニアは後に、その動作を Roblox の使用パターン下での BoltDB フリーリスト保守に関連付けた。したがって、このインシデントは単一の遅れた洞察ではなく、一連のモデル改訂を含んでいた。

この履歴は2つの説明責任の問題を明らかにする。第一は診断の回復力である。システムは、劣化中に競合する仮説をテストするための十分な独立した証拠を保存すべきである。ハードウェアメトリクス、ロックプロファイル、リーダー動作、書き込みレイテンシ、クライアントチャーン、ネットワークバックプレッシャー、依存関係の健全性は、同じコントロールプレーンに依存せずに利用可能でなければならない。第二は意思決定の追跡可能性である。インシデントコマンドは、なぜ仮説が採用されたか、どの証拠がそれを反証するか、どのような変更が行われたか、何が起こったか、変更がもたらしたリスクを記録すべきである。

失敗した修復試行は、本質的に悪い慣行の証拠ではない。インシデントチームは不確実性の下で行動し、スピードと安全性のバランスを取らなければならない。疑わしいハードウェアの交換、既知のスナップショットの復元、負荷の削減はすべて合理的であり得る。組織が使用された証拠を示せず、成功とロールバックの基準を定義せず、結果から学ばずに介入を繰り返した場合にガバナンス問題が生じる。

より強力なハードウェアは特に重要な教訓を提供する。キャパシティはしばしばパフォーマンス障害の普遍的な治療法として扱われる。並行性病理では、タイミングと競合を変化させ、動作を不安定にする可能性がある。余裕を購入することは、調整コストを理解する代わりにはならない。ガバナンスレビューは、容量計画が CPU 使用率とストレージスループットだけでなく、ロック競合、キューイング、クロスソケット効果、障害増幅をモデル化しているかどうかを問うべきである。

スナップショット復旧は、状態の整合性とサービスの健全性の違いも示している。以前のスナップショットを復元すると、破損したまたは望ましくない状態が除去されるかもしれない。不健全なアクセスパターン、ソフトウェア実装問題、依存関係ループは除去されない。復旧手順は、スナップショットが修復すると期待されるものと、クライアントが再接続する前に変更しなければならない条件の明示的なモデルを必要とする。

73時間という時間は、したがって単に1つの隠れた欠陥を探すのに費やされたわけではない。説得力のある説明をテストし、コントロールプレーンが戻ってくるワークロードに耐えられないことを発見し、別のリーダー動作を回避してその上のサービスを再構築するのに費やされた時間を含んでいた。正直な継続性プログラムはその連鎖を予算化しなければならない。本当のタスクが依存プラットフォームを再構築することである場合、平均修復時間は1つのコンポーネントの再起動に必要な時間から予測できない。

復旧は別個のエンジニアリングシステムだった

Consul が安定した後、Roblox はすぐに再開できる状態ではなかった。キャッシング層を再デプロイする必要があった。ポストモーテムによると、キャッシュは通常、複数層にわたって毎秒約10億リクエストを処理し、基礎となるデータベースから再投入できる一時データを保持していた。理論的には、再デプロイは簡単だった。実際には、不正確なスケジューリング状態、スケジューラに利用可能に見える不健全なノード、そして大規模なコールドスタートではなく段階的な変更用に設計されたデプロイツールに遭遇した。

54時間時点で、Consul は復旧を続行できるほど安定した。61時間までに、同社は健全な Consul クラスタとキャッシングシステムを報告した。残りのサービスは、適切なキャパシティで起動し、トラフィックが戻る前に検証する必要があった。コールドキャッシュとシステム健全性の不確実性により、すべてのトラフィックの即時復帰は安全ではなかった。

Roblox は DNS ステアリングを使用して段階的にユーザーを許可した。ポストモーテムは、エンジニアがデータベース負荷、キャッシュパフォーマンス、全体的な安定性を監視しながら、約10%のステップでアクセスを増やしたことを説明している。ステータスページは、10月31日12:51に段階的なトラフィック許可を記録し、16:45に通常運転を記録した。これは単なるコミュニケーション段階ではなかった。復元されたプラットフォームが戻ってくる需要に耐えられるかどうかの管理された本番テストだった。

このシーケンスは、復旧計画における一般的な弱点を露呈する。組織はバックアップ作成、おそらくコンポーネントのフェイルオーバーをテストするが、完全なコールドスタートを定期的にテストしない。コールドスタートは異なる質問をする。スケジューラは正確な状態を再構築できるか?キャッシュはデータベースを圧倒せずにウォームアップできるか?シークレットとサービスディスカバリは正しい順序で初期化できるか?デプロイツールは、少数の変更ではなく数千のインスタンスが存在しない場合に効率的か?インシデントチームは、最小実行可能プラットフォームにどのサービスが必須かを知っているか?

したがって、復旧エンジニアリングは独自のプロダクトオーナー、要件、演習を持つべきである。依存関係を認識した起動計画、安全に停止できる自動化、コールドキャッシュの容量モデル、状態再構築の検証チェック、測定可能なゲートを持つトラフィック許可制御装置が必要である。ツールは通常の前提が偽の場合に機能しなければならない。

これはまた、オペレーターが復旧目標をどのように測定すべきかを変える。Consul の復旧時間目標は、Roblox プラットフォームの目標と同じではない。後者には、コントロールプレーン上のすべての重要な依存関係、整合性チェック、キャッシュウォーミング、認証、ユーザーデータアクセス、クリエイターツール、支払い、制御されたトラフィック復帰が含まれる。コンポーネントが正常であると宣言することは、技術的に正確であっても操作的には誤解を招く可能性がある。

逆もまた真である。公開ページの復元は、プラットフォームが復旧したことを証明しない。サービスは、バックグラウンド処理、クリエイターツール、トランザクション、データ整合性が依然として劣化している間に利用可能に見えるかもしれない。復旧証拠は、HTTP 応答や同時ユーザーグラフだけでなく、定義されたユーザーとクリエイターのジャーニーセットをカバーすべきである。

復旧コードは劣化するため、演習が重要である。サービス依存関係が変化し、新しいキャッシュが出現し、所有権が移動し、運用ドキュメントがずれる。1年前に機能したプレイブックは、もはやシステムを代表していない可能性がある。2022年1月、Roblox はキャッシュデプロイメカニズムを再設計したと述べたが、実装はまだ進行中で、より広範な自動化ツールとプロセスは開発中であった。また、長期不在後の大規模ジョブの立ち上げのための Nomad 機能強化が次の Nomad アップグレードで予定されていると別途述べた。説明責任のあるフォローアップは、それらのメカニズムが計画されただけでなく、意味のある規模で繰り返し実行された証拠である。

監視は監視対象のシステムを生き残らなければならない

ポストモーテムは、テレメトリと Consul の間の循環依存関係を特定した。一部の重要な監視システムが影響を受けたインフラに依存しており、エンジニアが最も必要とするときに可視性が低下した。Roblox は後にその依存関係を削除し、Consul と BoltDB のパフォーマンスに関するより焦点を絞った洞察を追加したと述べた。

これは典型的だが永続的な障害パターンである。テレメトリの集中化は通常の運用を改善できるが、監視パイプラインが監視対象サービスと同一性、ディスカバリ、スケジューリング、ストレージ、ネットワーク依存関係を共有している場合、広範なインシデント中に消失する可能性がある。ダッシュボードは空に見え、アラートは停止し、オペレーターはデータ不足を改善と誤解する可能性がある。

独立した可観測性には、すべての分析システムの2番目のコピーは必要ない。異なる障害依存関係を持つ最小限の証拠パスが必要である。そのパスは、少数の重要なメトリクスとログを保存すべきである:クラスタリーダーシップ、書き込みレイテンシ、キュー深度、エラー率、サービスディスカバリの健全性、認証の可用性、構成変更、ネットワーク到達可能性。インシデント対応者は、通常の本番制御サービスが利用できない場合でも、それにアクセスできるべきである。

監視と診断の区別は重要である。アラートはレイテンシが高いことを報告できるが、診断には履歴と比較証拠が必要である。エンジニアは、変更がいつ始まったか、どのワークロードがシフトしたか、リーダーシップが変わったか、ロック競合がどのように進化したか、どのダウンストリームサービスが最初に失敗したかを知る必要がある。その証拠への保持またはアクセスが障害のあるプラットフォームに依存している場合、組織は仮説を選択するために必要な時系列を失う。

Roblox の後の信頼性記事は、サービスレベルインジケータ、依存関係インジケータ、アーキテクチャレビュー、インシデントレポート、月次信頼性レポートを中心としたより広範な制御モデルを説明した。このモデルは、依存関係をサービス成果への測定可能な貢献者として扱うため重要である。サービスは内部健全性目標を達成しながら、依存関係が遅いか到達不能なために消費者を失敗させる可能性がある。消費者視点から測定することで、狭いサーバーメトリクスから成功を宣言する可能性が減少する。

ガバナンステストは、これらの対策が意思決定を促進するかどうかである。ダッシュボードは存在するだけでリスクを減らさない。チームはしきい値、所有者、結果を必要とする:依存関係がサービス目標を下回った場合、是正作業がトリガーされる;新しい依存関係は障害モードレビューなしにローンチできない;インシデントアクションは制御が機能する証拠が示されるまで未完了のままである;上級リーダーはチーム境界を越える共通依存関係を見ることができる。

独立した可観測性も実行されるべきである。回復力テスト中に、プライマリテレメトリパスを意図的に分離して、最小パスが利用可能で、信頼でき、理解されていることを確認できる。そうしないと、フォールバックは期限切れのクレデンシャル、欠落したルーティング、不十分なキャパシティ、または慣れないツールによって、必要な瞬間に失敗する可能性がある。

クリエイター依存が継続性テストを変える

クリエイターエコノミーは、このケースの装飾的な部分ではない。Roblox は、クリエイターが独自のグローバルインフラを運用せずに体験を構築、公開、収益化できるモデルを推進した。同社はプラットフォームサービスを処理し、Robux と Developer Exchange プログラムを通じて収益を分配した。2021年、Roblox は数億ドルのデベロッパー交換手数料を報告し、コミュニティが5億ドル以上を稼いだと述べた。

これらの数字は、障害中に失われた額を確定するものではない。デベロッパー収益の数字は期間と定義されたプログラムをカバーする。デイリーアクティブユーザーは活動を測定し、ビジネスではない。エンゲージメント時間、予約、トランザクションは異なる指標である。説明責任分析は、1日の平均に73時間を掛けてクリエイター損害と呼ぶべきではない。使用量は時間、地域、体験によって異なり、利用できないプラットフォームは活動を永久に排除するのではなくシフトさせる可能性がある。

関連する点は制御の非対称性である。クリエイターは体験を設計し、自分のチームを管理できたが、Roblox のサービスディスカバリ、キャッシュ、データセンターを復旧することはできなかった。プラットフォームの管理モデルはインフラ作業をクリエイターから遠ざけ、Roblox 内部に集中させた。プラットフォームが失敗したとき、それらのクリエイターには技術的な代替手段が限られていた。

そのため、ステークホルダー影響の測定は継続性管理手段となる。Roblox の最初の更新は、クリエイターコミュニティを経済的に完全にするポリシーを実施すると述べた。このコミットメントは、Roblox がインシデントをユーザーの不便さを超えた経済的影響を持つものとして扱ったことを示している。現在の記録にある公開情報源は、すべてのクリエイターがどのように測定され補償されたかを結論付けるのに十分な詳細を提供していない。コミットメントと結果は異なる事実である。

防御可能な完全補償方法は、適格性、影響期間、ベースライン活動、除外、異議申し立て、新規または季節的体験の扱いを定義する。予想 Robux、エンゲージメントベースの支払い、トランザクション、広告、またはその他のプロキシを使用したかどうかを説明する。また、直接的なトランザクションではなく、障害によるローンチの遅延やコミュニティ期待の管理に費やされたスタッフ時間など、主な損失が運用上のものであったクリエイターにも対応する。

完璧な反事実を再現できるモデルはない。説明責任は偽の精度を要求しない。透明なルール、一貫した適用、異常値をレビューできる証拠を要求する。方法は、履歴データがモデル化しやすい最大のクリエイターのみを報い、集中依存を持つ小規模チームを見落とすことを避けるべきである。

継続性設計はまた、インシデント前にクリエイターにより良い選択肢を与えることができる。プラットフォームステータスインターフェースは、ユーザーアクセス、Studio、アセット配信、データストア、トランザクション、公開を区別すべきである。クリエイター向けコミュニケーションは、どの機能が劣化しているか、どの作業が安全に実行できるかを述べるべきである。エクスポートとバックアップ機能は、体験自体が他の場所で実行できなくても、ソースアセットとビジネスレコードへの依存を減らすことができる。契約とポリシーの文言は、サービス期待と救済限度を理解可能にする。

同じ原則は Roblox を超えて適用される。マーケットプレイス、アプリストア、クラウドプラットフォーム、ソフトウェアエコシステムは、サードパーティが管理インフラ上でビジネスを構築するよう招待する。プラットフォームは収益を保証しないかもしれないが、継続性をどのように測定し、共通依存関係を保護し、インシデントを伝達し、害を評価するかを説明できるべきである。成長は、より多くの外部活動が内部制御の選択に結びつくため、その義務を増加させる。

Roblox の後の経済資料は、依存関係を明示的にしている。同社は、インフラホスティング、ストレージ、カスタマーサポート、ローカライゼーション、支払い処理、モデレーションを体験のために負担するコストとして説明した。また、数十億の仮想トランザクションと増加するクリエイター収益を説明した。これらは規模の利点であるが、可用性が経済アーキテクチャの一部である証拠でもある。

したがって、事業者はクリエイター継続性をユーザーエンゲージメントや収益と並んで取締役会レベルのリスクとして扱うべきである。有用な対策には、クリエイター向けサービス可用性、トランザクション完全性、公開可用性、遅延支払いの調整時間、クレーム処理時間、クリエイター規模別の影響分布が含まれる。単一のプラットフォームアップタイム数値は、クリエイターが依存するツールに不釣り合いに影響する障害を隠す可能性がある。

開示は原因、条件、コミットメントを分離すべき

Roblox の開示は段階的に進化した。CEO の11月1日の更新は、期間について謝罪し、高負荷下で圧倒された中核システム、外部トラフィックと特定の体験を原因として否定し、永続データ損失は知られていないと述べ、クリエイター救済を約束した。詳細なポストモーテムは、同社がより多くの分析を完了し信頼性改善の進捗を遂げた後、1月に到着した。

このシーケンスには強みがある。最初の声明は、最終的な技術的説明を含んでいると偽ることなく噂を修正した。後の文書は、失敗した仮説、アーキテクチャの集中、監視の弱さ、復旧の困難を説明した。また、責任を認め、進行中の変更をリストした。

記録は依然として帰属をもって読まれるべきである。因果関係の説明、データ損失なしの声明、修復の説明は Roblox の発見と表明である。HashiCorp との協力は技術的重みを追加するが、公開文書は独立した監査ではない。責任ある分析は、それらを広く使用しつつ、その起源について明確にすることができる。

優れたインシデントコミュニケーションは、少なくとも4つの層を分離する。第一は観察された影響:どのサービスがいつ、誰に対して失敗したか。第二は現在の理解:作業中の因果モデルとその信頼度。第三は運用アクション:何が変更されているか、復旧中にどのリスクが残っているか。第四は救済:影響を受けた当事者がどのように特定され支援されるか。

これらの層を混ぜると、回避可能な問題が生じる。暫定的な原因が最終的な発見と誤解される可能性がある。運用中とマークされたシステムは、すべてのクリエイターワークフローが復旧したことを意味すると受け取られる可能性がある。計画された管理手段が完了したものとして扱われる可能性がある。補償の約束が補償が行われた証拠として報告される可能性がある。

ステータス記録は、運用状態の同時変化を保存するため有用である。調査、特定、復旧、監視、段階的トラフィック許可、解決を示している。ポストモーテムは、ステータスページがインシデント中に提供できなかった技術的物語を提供する。2つの文書は異なる目的を果たし、その詳細レベルを尊重せずに1つのタイムラインに強制されるべきではない。

説明責任のあるクローズアウトは、すべての主要な発見を所有者、期日、検証方法に接続する。例えば、循環テレメトリ依存関係の除去は、Consol 分離中に重要なメトリクスが利用可能であることを示す回復力テストが続くべきである。ワークロードの分割は爆発半径演習が続くべきである。ブートストラップの改善は完全なコールドスタートドリルが続くべきである。別のデータセンターの構築は測定されたフェイルオーバーが続くべきである。

公開開示は機密構成を露出したりセキュリティリスクを生み出したりする必要はない。適切なレベルで制御目標、テストタイプ、結果を述べることができる。その証拠は、運用状況が判断できないプロジェクトの長いリストよりも価値がある。

1つのアクティブデータセンターからセルへ

Roblox の2023年インフラ回顧録は、障害後のトポロジの実質的な変更を説明した。インシデント当時、プラットフォームには1つのアクティブデータセンターしかなかったが、その内部のコンポーネントにはバックアップがあったと述べている。同社は別の地理的リージョンに第2データセンターを建設し、アクティブ-パッシブ構成に到達した:1つのサイトがワークロードを処理し、もう1つがバックアップとして待機する。

これは、ノードレベルの冗長性では対処できない障害モードに対処する。共通依存関係または運用エラーによりサイト全体が使用不能になった場合、別のサイトが別の復旧パスを提供できる。しかし、アクティブ-パッシブ保護は、レプリケーション、準備、フェイルオーバーと同じくらい強力である。パッシブサイトはドリフトする可能性があり、キャパシティが不足しているか、同じソフトウェア欠陥を継承する可能性がある。その価値は、データ整合性、コントロールプレーン可用性、クレデンシャル、ネットワークルーティング、トラフィック復帰を含む演習を通じて実証されなければならない。

Roblox はまた、データセンター内のセル型インフラを説明した。セルは障害を封じ込めることを目的とした限定されたマシンとサービスのセットである。サービスはセル間で複製でき、不健全なセルを削除して他のセルが動作を続けることができる。同社は、2023年の記事が公開された時点で、セルには約1,400台のマシンが含まれ、ピーク時にはバックエンドサービストラフィックの70%以上がセルから提供されていたと述べた。

セルは爆発半径に対する応答であり、単なるパッケージング技術ではない。依存関係、デプロイシステム、データアクセスが境界を尊重する場合に機能する。すべてのセルが1つのグローバル制御サービス、共有データベース、または共通構成プッシュに依存している場合、見かけの分離は図が示唆するよりも弱い可能性がある。Roblox 自身、アクティブ-アクティブ実験が特にデータアクセスに関する設計前提を特定し、再作業が必要だったと述べた。

均一性は別のトレードオフを生み出す。交換可能なセルはフェイルオーバーと再プロビジョニングを容易にする。同じ均一なソフトウェアと構成は、欠陥を迅速に広める可能性もある。したがって、回復力は選択された層での制御された多様性、セル間の段階的デプロイ、伝播を停止する能力を必要とする。セルアーキテクチャは、どの変更がすべてのセルに一度に到達できるか、どの変更が観測ゲートを通過しなければならないかを定義すべきである。

長期的な目標は、両方のデータセンターがトラフィックを運び、ロードバランサーがレイテンシ、キャパシティ、健全性に基づいて決定を行うアクティブ-アクティブ運用だった。アクティブ-アクティブは、代替パスがすでにユーザーにサービスを提供しているため、フェイルオーバー遅延を削減できる。また、調整の複雑さを増加させる。データ整合性、セッション状態、アイデンティティ、支払い、クリエイターアセットは、トラフィックがリージョン間で移動するときに異なる動作をする可能性がある。

説明責任のある指標は、組織に2つのデータセンターがあるか34のセルがあるかではない。現実的な障害下でどれだけのユーザーとクリエイター活動が生き残るかである。トポロジ数は入力である。結果の指標には、保存されたエンゲージメントの割合、セルを分離する時間、トラフィックをシフトする時間、データ整合性エラー率、クリエイターツールが使用可能かどうかが含まれる。

Roblox の2024年インフラグループ記事は、可用性作業を直接2021年の障害に結び付けた。99.99%の月次ユーザーアップタイム目標を説明し、可用性、サービス提供コスト、エンジニアリング生産性を中核指標として提示した。このフレーミングは現実の緊張を認識している。最大の冗長性は高コストで運用が複雑になり得る。コスト削減はマージンを弱める可能性がある。生産性ツールは共有依存関係を生み出す可能性がある。ガバナンスは、単一の指標が支配的になるのを許すのではなく、トレードオフを明示的にしなければならない。

同社はまた、数千の内部サービス、13万5,000台以上のサーバー、数億の同時接続をサポートするインフラフットプリントを説明した。正確な数字は日付と定義によって異なるため、注意せずに比較すべきではない。その方向性は明確である:プラットフォームはインシデント後も成長を続けた。したがって、是正アーキテクチャは成長を上回らなければならない。実装時点で十分だった制御手段は、サービス、マシン、クリエイターが倍増するにつれて不十分になる可能性がある。

後の提出書類は残存リスクの疑問を保持する

企業の回顧録は進捗を説明する一方、SEC 提出書類は障害リスクを説明し続ける。この2つは矛盾しない。是正は既知の障害モードを削減できるが、プラットフォーム中断の広範な可能性を排除するものではない。

Roblox の2021年 Form 10-K は10月の障害を特定し、中断がユーザー、デベロッパー、クリエイターとの関係を損ない、エンゲージメントを減少させ、ブランドを傷つけ、財務結果に影響を与える可能性があると警告した。後の提出書類は、技術インフラの運用コストと複雑さ、内部および外部サービスへの依存、冗長性と災害復旧の限界、事業中断保険がすべての損失をカバーしない可能性について議論した。

2023年 Form 10-K は、Roblox Cloud が耐障害性を備え、災害復旧に備えて設計されたと述べた。別途、同社所有のサーバーは19都市のデータセンターとリージョナルエッジデータセンターから運用され、Roblox は信頼性と耐障害性を向上させるために地域内および地域間の複数のデータセンターへの拡大を続けていると述べた。提出書類はまた、リスク議論の中で2021年10月と2022年5月の障害を特定し続け、2023年に2021年第4四半期のプラットフォーム障害に関連して認識された500万ドルの事業中断保険回収を開示した。

その会計項目は狭く解釈されるべきである。それは総損失の見積もり、クリエイター損害の数字、または是正の証明ではない。インシデントが後に記録された保険可能なビジネス結果を持っていたことを示している。また、障害の影響が報告期間を越える可能性があることを示している。

リスク要因の文言にはそれ自体の境界がある。提出書類は、特定のインシデントで何が起こったかではなく、何が起こり得るかを説明するかもしれない。それは会社の表明されたエクスポージャーと管理環境を特定するのに有用であるが、報告されていない障害を作り出すために使用すべきではない。逆に、是正後の繰り返されるリスク文言は是正の失敗を証明しない。それはこの規模のプラットフォームが継続性リスクを保持するという事実を反映している。

最も有益な比較は、管理主張と測定可能な結果の間である。会社がセルが爆発半径を制限すると言う場合、インシデントレポートはセル障害時に影響を受けるユーザーが少ないことを示すべきである。アクティブ-パッシブ保護が完全である場合、演習は第2サイトが定義された期間内に負荷を引き受けられることを示すべきである。監視が独立している場合、テストは対応者がコントロールプレーン障害中に重要なデータを保持することを示すべきである。ブートストラップが改善された場合、コールドスタートドリルは復旧目標内に完了すべきである。

この証拠は時間経過とともに傾向を見るべきである。単一の成功したテストは、パスが一度機能したことを証明するかもしれない。ソフトウェア、人員、データの変更後もパスが準備できていることを示さない。継続性管理手段は繰り返しの保証を必要とする。

実用的な説明責任基準

Roblox のケースは、10のリンクされたテストを持つ継続性基準を支持する。

第一に、消費者から後方に制御依存関係をマッピングする。インフラ製品ではなく、ユーザーとクリエイターのジャーニーから始める。各ジャーニーについて、アイデンティティ、サービスディスカバリ、スケジューリング、ストレージ、キャッシュ、支払い、ネットワーキング、構成、監視の依存関係を特定する。多くのジャーニーで共有されるサービスと、復旧に必要な最小限のパスをマークする。

第二に、障害ドメインを運用用語で定義する。ノード、クラスタ、セル、データセンターは、依存関係が境界を尊重する場合にのみ有用なラベルである。クリーンな障害だけでなく、スロー障害もテストする。劣化したコントロールプレーンは利用不能なものより困難であり得る。なぜなら、コンポーネントが名目上到達可能なまま、ヘルスチェックとリトライが負荷を増幅するからである。

第三に、変更テストを本番に似せる。実際の読み書き混合、クライアントチャーン、ストリーム人口、CPU トポロジ、サービス数、ピークサイクルを表現する。ロールアウトには定量化された中止条件とテスト済みの復元パスが必要である。容量計画は平均使用率だけでなく、競合レジームへの接近を監視すべきである。

第四に、独立した証拠を保存する。重要なテレメトリは、それが観察するシステムの障害を生き残らなければならない。リーダーシップ、書き込みレイテンシ、キュー深度、エラー、構成変更、依存関係の健全性のための最小限のオフドメインパスを維持する。そのパスを実行し、インシデント条件下でのアクセスを検証する。

第五に、コールドスタートを製品として扱う。起動順序、状態再構築、キャッシュウォーミング、シークレット可用性、データベース保護、最小実行可能サービスを文書化し自動化する。代表的なスケールでのコールドスタートからテストする。手動介入が残っている場所を記録し、意図的に削減する。

第六に、トラフィック復帰を制御する。復旧は測定可能な段階を使用すべきである。各段階で、エラー率、レイテンシ、キャッシュパフォーマンス、データベース圧力、トランザクション正確性、クリエイターツール可用性を評価する。トラフィックが戻り始める前に停止とロールバックの条件を定義する。

第七に、有効な分母でステークホルダー影響を測定する。ユーザー、クリエイター、トランザクション、エンゲージメント時間、ビジネスを分離する。前提と不確実性を説明する。クリエイター救済は、適格性と計算ルールを公開し、異議申し立てパスを提供すべきであり、不透明な総計を提示すべきではない。

第八に、発見事項を検証済みアクションに接続する。すべての主要なインシデント条件には、所有者、期日、検証方法が必要である。コードが出荷されたためにタスクをクローズすることは、障害演習が意図された結果を示したためにクローズすることよりも弱い。

第九に、集中を継続的に統治する。共有プラットフォームは採用が増えるにつれてリスクが高まる。1つのクラスタ、アイデンティティサービス、構成プレーン、可観測性システムが共通モード依存関係になっていないか再評価する。次のスケールしきい値の前に、通過点の後ではなく、分離またはフォールバックを要求する。

第十に、継続性を結果のポートフォリオとして報告する。単一のアップタイムパーセンテージでは不十分である。ユーザー可用性、クリエイターツール可用性、トランザクション整合性、フェイルオーバー時間、復旧時間、爆発半径、アクション項目年齢、演習結果を追跡する。上級リーダーシップは、コストと生産性の決定がこれらの結果をどのように変えるかを見るべきである。

これらのテストは、1つのチームがすべてを制御しているふりをせずに責任を割り当てる。ソフトウェアベンダーは自社製品の欠陥と修正を所有する。プラットフォームオペレーターは製品がどのようにテスト、構成、分離、監視されるかを所有する。サービスチームは縮退モードと再起動準備を所有する。インシデントコマンドは調整された決定を所有する。経営幹部はリスク選好とリソーストレードオフを所有する。クリエイタープラットフォームは、自らが運営するエコシステムへの害を評価し対処する方法を所有する。

これらのテストはまた、プライベートクラウドとパブリッククラウドの間の非生産的な議論を防ぐ。Roblox は、プライベートインフラが自社の規模でコストとレイテンシの利点を提供し、適切な場合にパブリッククラウドを使用したと主張した。どちらのモデルも失敗し得る。パブリッククラウドは独立したゾーンと管理されたコントロールプレーンを提供するかもしれないが、顧客は依然として共有依存関係や弱い復旧パスを作成できる。プライベートインフラは制御を提供するが、事業者はプロバイダーが提供するかもしれない機能を構築し検証しなければならない。説明責任は、マーケティングカテゴリではなく、制御と依存関係に従う。

2021年のインシデントは、複数の層を同時に露出したため重要であり続けている。効率性のために設計された機能が異常なワークロードと悪い相互作用を起こした。2番目のストレージ動作がリーダーを不安定にした。複数の基本的役割を担う共有クラスタが集中リスクの問題を生み出した。監視は影響を受けた環境に依存していた。復旧ツールは必要なコールドスタート用に設計されていなかった。クリエイターはプラットフォームの復帰に依存していた。

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