ゾンビ映画から考えた「壊れても動き続けるインフラ」
先日、日本のゾンビ映画を観ました。
最も印象に残ったシーンは、
主人公たちがなんとかゾンビから逃げてタクシーに乗り込む場面でした。
タクシーの中でテレビのチャンネルを回すと、ほとんどの放送局が緊急ニュースを繰り返していましたが、
なぜかTV Tokyo(東テレ)だけは、いつも通りアニメを放送していました。
「まだアニメをやっているなら、大丈夫なのではないか」
そう思って安心したのも束の間、
突然その放送がニュースに切り替わります。
その瞬間、主人公たちは状況の深刻さを理解します。
このシーンを見て、ひとつの疑問が浮かびました。
「もし国家すら正常に機能しない状況になったとしたら、
自分が作ったシステムは本当に動き続けられるのだろうか」
そのような状況では、高可用性だけでは不十分ではないか
AWSで高可用性を考えるとき、
Multi-AZ、Auto Scaling、Load Balancerといった構成を思い浮かべます。
しかし、これらはあくまで
「基盤が正常に動いていること」を前提とした設計です。
もし次のような状況が起きたらどうでしょうか。
- リージョン単位の障害
- 広域ネットワークの断絶
- 運用者がアクセスできない状態
このような場合、従来のアーキテクチャでは
サービスの継続が難しくなる可能性があります。
「Survivable Architecture」という視点
単に障害に耐えるのではなく、
一部が壊れても動き続ける構造が必要だと感じました。
そのために重要だと考えた要素を整理します。
1. リージョン分散(Multi-Region)
単一リージョンに依存せず、
複数リージョンに独立した環境を構築します。
DNSベースでトラフィックを制御し、
障害時には自動で切り替わる仕組みが必要です。
2. データのリージョン間複製
単一リージョン内のレプリケーションだけでは不十分です。
- Aurora Global Database
- DynamoDB Global Tables
などを利用し、リージョンをまたいでデータを保持する必要があります。
3. 疎結合な構成(Decoupling)
密結合なシステムは、一部の障害が全体停止につながります。
- SQS
- SNS
- EventBridge
といったイベント駆動の仕組みを用いることで、
一部の機能が停止しても全体は動き続ける構成にすることが重要です。
4. コア機能を優先する設計
すべての機能を維持するのではなく、
最低限の価値を提供し続けることが重要だと考えました。
例えば:
- 読み取り専用モードへの切り替え
- キャッシュベースのレスポンス
- 機能の一部制限
といった対応です。
最も重要だと感じた前提
これらを整理する中で、次の考えに至りました。
システムはいつか必ず一部が壊れる
この前提を受け入れることで、
アーキテクチャの考え方そのものが変わると感じました。
この経験をきっかけに、単に安定して動くシスtてテムだけでなく、
「問題が起きても動き続ける構造」について考え続けていきたいと思います。
まだ学習段階ではありますが、
こうした視点を実際のアーキテクチャにどう落とし込めるか、少しずつ試していきたいです。