第24章: Geoレプリケーション

単一のデータセンターで動作するシステムは、単一障害点を持つシステムです。いくつレプリカを実行しても、いかに慎重にフェイルオーバーを設計しても、光ファイバーをバックホーで切断されたり、送電網の停電、冷却システムの障害により、すべてが一度にオフラインになる可能性があります。グローバル分散——複数の地理的リージョンでフルシステムを実行すること——は、プラネタリスケールのシステムがリージョン障害を乗り越え、世界中のユーザーに低レイテンシーでサービスを提供する方法です。

なぜ分散するのか

3つの力がグローバル分散を駆動します。レイテンシー:光がサンフランシスコとニューヨーク間を往復するのに74ms、アムステルダムまでは165msかかります。ユーザーはこれに気づきます。各リージョンにシステムのコピーを実行することで、ほとんどのリクエストがローカルで処理されます。可用性:別々のリージョンの独立したインフラストラクチャは、あるリージョンの障害が他に影響しないことを意味します。SFOリージョンがダウンしても、NYCとAMSはトラフィックの提供を続けます。データ主権:一部の法域では、市民に関するデータをその境界内に留めることを要求しています。マルチリージョンアーキテクチャはコンプライアンスを可能にします。

リージョンごとのフルスタック

私たちのアプローチはシンプルです:各リージョンが完全なシステムを実行します。ディスカバリルーティングキャッシングストレージモニタリングスケジューリング——すべてのサービスがすべてのリージョンで実行されます。ローカルリクエストはリージョンを離れません。リージョン境界を越えるのは2つだけ:ストレージレプリケーション(あるリージョンで書き込まれたデータが最終的に他のリージョンに現れる)とキャッシュ無効化(古いエントリがどこでもパージされる)です。

これは「アクティブ-アクティブ」マルチリージョンデプロイメントと呼ばれることがあります:すべてのリージョンが読み取りと書き込みを独立して処理でき、非同期レプリケーションで同期を維持します。

WireGuardメッシュ

リージョン間はプライベートなWireGuardメッシュネットワークで通信します。各リージョンは共有10.0.0.0/24サブネット上にWireGuard IPを持ちます:

SFO   10.0.0.1
NYC   10.0.0.2
AMS   10.0.0.3
WireGuardは最小限のオーバーヘッドで暗号化され認証されたトンネルを提供します。メッシュトポロジーは、すべてのリージョンがハブを経由せずに他のすべてのリージョンに直接到達できることを意味します。ネットワークオーバーレイの詳細は第32章: ネットワークを参照してください。

フェデレーテッドディスカバリ

マルチリージョンアーキテクチャの鍵となる洞察は、ディスカバリ自体がフェデレートされることです。各リージョンのディスカバリインスタンスは2つのレジストリを維持します:直接登録されたサービスのローカルレジストリと、他のリージョンのピアディスカバリインスタンスから転送されたサービスのフェデレーテッドレジストリです。

バックグラウンドタスクが5秒ごとに実行されます。ローカルに登録されたすべてのサービスを収集し、127.0.0.1アドレスをリージョンのWireGuard IPに書き換え、FEDERATED_REGISTER RPCを使用して各ピアディスカバリインスタンスにこれらの登録を転送します。

結果として2つの相補的なビューが得られます。discovery::list("storage")はすべてのリージョンのすべてのストレージインスタンスを返します——グローバルに伝播する必要があるキャッシュ無効化に便利です。discovery::list_local("storage")は現在のリージョンのインスタンスのみを返します——クロスリージョンレイテンシーがコンセンサスを非実用的にするクォーラム操作に便利です。

WALテーラー

クロスリージョンストレージレプリケーションはWALテーラーによって処理されます。ローカルのストレージインスタンスが生成するライトアヘッドログファイルを読み取り、リモートストレージインスタンスにリプレイする軽量サービスです。各リージョンで1インスタンスが実行されます。

レイテンシーのトレードオフ

3リージョンデプロイメントにおけるリージョン間レイテンシーはおおよそ:

SFO ↔ NYC    ~74ms RTT
SFO ↔ AMS   ~165ms RTT
NYC ↔ AMS    ~92ms RTT

これらのレイテンシーにより、ほとんどのワークロードでクロスリージョンのクォーラムコンセンサスは非実用的です。私たちのアーキテクチャはリージョン内の一貫性にはローカルクォーラム(高速、サブミリ秒)を使用し、リージョン間には非同期レプリケーション(結果整合性、書き込みパスにレイテンシーペナルティなし)を使用します。

これはグローバル分散の根本的なトレードオフです:リージョン間の強い一貫性か低レイテンシーの書き込みかのどちらかを選べますが、両方は選べません。私たちのシステムは結果的なクロスリージョン一貫性を伴う低レイテンシー書き込みを選択しています。