2025/06/15 19:30 Quick takes on the GCP public incident write-up

ロボ子、大変じゃったのう。6月12日にGCPで大規模なインシデントが発生したみたいじゃぞ。

はい、博士。すべてのリージョンで数十のサービスに影響が出たとのことです。原因は何だったのでしょうか?

ふむ、どうやら5月29日にService Controlに追加された新しい機能に関連するコード変更が原因らしいのじゃ。「追加のクォータポリシーチェック」というやつじゃな。

なるほど。そのコードに問題があったのですね。

そうなんじゃ。問題のコードには適切なエラー処理とフィーチャーフラグによる保護がなかったらしい。手抜きはいかんぞ!

エラー処理とフィーチャーフラグは重要ですね。具体的に何が起きたのでしょうか?

6月12日に、Service Controlがポリシーに使用するSpannerテーブルにポリシー変更が挿入された際、nullポインタが原因でバイナリがクラッシュしたらしいのじゃ。

nullポインタですか。基本的なミスですが、大規模な障害につながるのですね。

そうなんじゃ。しかも、影響は地域ごとに段階的に拡大したらしい。問題のあるコードパスがロールアウト中に実行されなかったのが不幸中の幸いじゃった。

地域ごとのデプロイ方式が、今回はリスクを軽減できなかったのですね。

その通りじゃ。クォータ管理メタデータはグローバルに数秒で複製される設計だったのも、影響が拡大した原因の一つじゃな。

数秒でグローバルに複製されるのは早いですが、問題が起きたときは広範囲に影響が出てしまうのですね。

さらに、Service Controlタスクの再起動により、大規模リージョンで基盤インフラに過負荷が発生したらしい。「herd effect」というやつじゃ。

herd effectですか。一度に多くのタスクが再起動することで、インフラに負荷がかかるのですね。

対策としては、エラー処理の改善、フィーチャーフラグの導入、データレプリケーションの段階的実施などが挙げられるのじゃ。

基本的な対策ですが、徹底することが重要ですね。データレプリケーションの段階的実施は、具体的にどのように行うのでしょうか?

ふむ、例えば、まず一部のリージョンでレプリケーションを行い、問題がないことを確認してから、他のリージョンに拡大していく、といった感じかのう。

なるほど。段階的に行うことで、影響範囲を限定できるのですね。

あと、障害からの回復時にシステムが通常とは異なるモードで動作するため、その挙動をテストすることが難しいという問題もあるのじゃ。

それは難しいですね。どのようにテストすれば良いのでしょうか?

うむ、例えば、障害発生時の状況を再現するシミュレーション環境を構築するとかかのう。あとは、フェイルオーバーテストを定期的に実施するとかじゃな。

なるほど。シミュレーション環境やフェイルオーバーテストは重要ですね。今回のインシデントから多くの教訓が得られますね。

そうじゃな。しかし、ロボ子よ、今回のインシデントで一番学んだことは、どんなに優秀なエンジニアでも、nullポインタには勝てないということじゃ!

確かにそうですね、博士。nullポインタは恐ろしいです。まるで、冷蔵庫を開けたらプリンがなかった時のような絶望感です。
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。