マルチクラウドトポロジ
1)マルチクラウドが正当化された場合
ドライバー:- 信頼性/可用性:プロバイダレベルの独立した障害ゾーン。
- 主権/コンプライアンス:管轄区域による保管/処理(データ常駐)。
- リスクマネジメント:ベンダーロシンの削減、購入/価格レバー。
- 地理/パフォーマンス:ユーザーとデータソースに近い。
- 特別なサービス:異なる雲の最高の「ニッチ」機能へのアクセス。
- SDLC/観測/操作の大幅な複雑性。
- プロバイダ間の出力値とレイテンシの増加。
- 異なるIAM/ネットワークモデル/クォータ/制限→より多くの運用上のリスク。
2)トポロジカルパターン
3)ネットワーク層およびルーティング
3.1グローバルログイン
GSLB/DNSルーティング:latency-/health --based;移行ウィンドウへの短いTTL。
Anycast+L7プロキシ:単一のIP、地域のヘルスルーティング。
管轄区域によるポリシー:ジオブロッキング/ジオピニングトラフィック。
python def pick_cluster(client, intent):
вход: ip, geo, tenant, feature allowed = filter_by_compliance(client. geo) # sovereignty healthy = [c for c in allowed if sdo (c). ok and slo(c). ok]
return argmin(healthy, key=lambda c: latency_estimate(client, c))
3.2クラウド間の接続
可能な限りプライベートチャンネル/ピアリング。それ以外の場合-インターネット経由でTLS+mTLS。
出力制御:集計/圧縮、ローカルキャッシュ/アグリゲータ。
コードとしてのネットワーク:Terraform/Blueprints、 CIDRポリシー、ルートおよび出口ゲートウェイ。
4)データと一貫性
4.1モデル
グローバルに強力な一貫性は、クラウド間で現実的なことはめったにありません(レイテンシ/グリッド/コスト)。
実用的なイベント:競合解決の双方向CDC(変更データキャプチャ)。
CRDT/idempotency: counters/sets/logs-可換構造。
4.2パターン
outboxを使用した二重書き込み:トランザクションイベントレコーディング→ブローカー→近隣のクラウドへのレプリケーション。
Read-local/Write-home:「ホーム」領域/クラウドに書き込み、ローカルで読み取り(バージョンと古いポリシー)。
Split-brain protection:分散検出、「補償」(saga)、通貨不変量のための手動仲裁。
DB → Debezium/stream → Events(topic@vN) → Cross-cloud relay → Apply w/ resolver resolver: prefer_higher_version prefer_home business_rule()
4.3オブジェクトストレージ
Bucket、ハッシュ/マニフェスト、dedupの非同期レプリケーション。
ILM (hot/warm/cold)ポリシーはクラウドに依存しません。
主権規則:「PIIはUA/EEAを離れません」-コードとして検証されます。
5)アイデンティティ、秘密、鍵
アイデンティティ・フェデレーション:単一のIdP、短命のトークン、パイプライン上のOIDC-trust。
秘密:各クラウド+Vaultクラス抽象化のKMS/HSM;回転/スイッチのための二重キー。
PoLP/ABAC:属性(クラウド、リージョン、env、 data_class)に基づく権利。
暗号ドメイン:管轄区域の異なるルートキー→スコープ別の暗号消去。
6)エグゼクティブ環境: クラスタとメッシュ
マルチクラスター(K8):クラウド/リージョンごとに1つのクラスタ。GitOps (ArgoCD/Fleet)による艦隊制御。
C: mTLS、再試行、サーキットブレーカ、フェイルオーバーポリシーのクロスクラスタ。
- 静的サービス→インプレイス。
- インタラクティブAPI→各クラウド(Active/Active)
- バッチ/ETL→「緑」窓/安い領域(カーボン/コスト意識)。
rego package placement
allow[cloud] {
input. service. pii == false cloud:= input. clouds[_]
cloud. features. contains("cheap_gpu")
}
deny["PII outside allowed region"] {
input. service. pii == true not input. target_region in {"eu-central","eu-north","eu-west"}
}
7)複数の雲の観察可能性そしてSLO
マルチリースラベル:'cloud'、 'region'、 'tenant'、 'data_domain'。
SLI/SLO per-cloudとグローバル: 「≥ 1 cloudが利用可能な場合、グローバルに利用可能」
テレメトリーコレクション:エグレスコントロールを使用したローカル+アグリゲーション。
トレース:グローバルトレースID、コンテキスト伝播、テールベースのテールによるサンプリング。
比較ダッシュボード:エンドポイント/p99/error-budget burnごとにAとBを比較します。
8) SDLC/IaCおよび「コードとしてのポリシー」
単一のIaCモノラルディレクトリ:プロバイダモジュール/スタック、不変量(タグ、ネットワーク、暗号化)。
GitOps:宣言的マニフェスト、ドリフト検出、プロモーション環境。
適合テスト:API/イベントコントラクト、両方のクラウドのカナリア。
リリースゲート:1つのクラウドでSLOに違反する危険性のあるブロック(バーンレート予測)、主権試合がない場合。
yaml gate: multi-cloud-slo-and-compliance checks:
- slo_burn_rate(global) < 1. 0
- slo_burn_rate(cloud:A) < 2. 0
- compliance_rule("pii_in_region") == pass
- egress_forecast < budget on_fail: block_release
9)費用およびカーボン(FinOps/GreenOps)
単位メトリック:'$/req'、 '$/GB-egress'、 'gCO₂e/req'。
重要でないバッチのコスト/カーボンルーティング:安価/グリーンウォッチ/リージョン。
排出キャップ:クラウド間トラフィックの予算;キャッシュ/集計/圧縮/TTL。
RI/SP/コミット各クラウドでの使用+「弾性層」スポット/プリエンプチブル。
10)テストは失敗し、練習します
ゲームの日々:「クラウドAを消去する」「、データベースを遅くする」「、排出限界を突破する」。
チェックポイント:RTO/RPO、 DNS収束時間、フラグフィーチャーロール、キャッシュ動作。
リリースのカオススモーク:依存関係の悪化は、レトレイのカスケードにつながるべきではありません。
11)セキュリティ、プライバシー、コンプライアンス
ゼロトラスト:サービス/クラウド間のmTLS、アーティファクト署名、SBOM。
DPA/主権:データセットカタログ、ローカライゼーションルール、ILMの上の法的保持。
秘密と鍵:回転マガジン、プレイブックは妥協/キルスイッチ。
Webhookと外部統合:署名、アンチリプレイ、地域エンドポイント。
12)データ/イベント統合テンプレート
12.1双方向カフカ橋(アイデア):
cloudA. topicX ⇄ relayA→B ⇄ cloudB. topicX cleanup. policy=compact,delete key-based routing idempotent producer
12.2 Outboxのテーブルおよびリレー:
sql
-- outbox id uuid pk, aggregate_id, type, payload jsonb, version int, created_at timestamptz
-- transactional insertion with domain table change
次に、コネクタはアウトボックスを読み取り、イベントをローカルブローカー+リレーに公開します。
12.3紛争戦略(擬似):
python def resolve(local, remote):
if local. version > remote. version: return local if remote. version > local. version: return remote equal versions: domain rules return business_tiebreak (local, remote)
13)アンチパターン
"すべてをそのまま2つの雲にドラッグします。"勝つことなく難易度を倍増。
ホットトラック上の同期クラウド間トランザクション。
すべてのクラウド/リージョンに対する単一のグローバル暗号化キー。
PIIを使用したログ/トレイルは、変装せず、ローカライゼーションルールなし。
外部測定はありません(実際の可用性はプロバイダのステータスページにのみ表示されます)。
プレイブック/ドリルなし-DRは現時点では動作しませんX。
1つのクラウドの劣化中のリトレイのカスケード(リミッター/シェーディング/ブレーカなし)。
脱出のためにカウントされていない予期しない請求書です。
14)建築家のチェックリスト
1.マルチクラウドドライバを策定(SLO/DR/主権/コスト)?
2.選択されたパターン(AA/AP/DR-Only/Poly-Service)とRTO/RPOがコミットされていますか?
3.ネットワークプラン:GSLB/Anycast、健康サンプル、出口キャップ、プライベートチャンネル?
4.データ:CDC/CRDT/デュアルライト、紛争解決ルール、アウトボックス?
5.主権:データ/地域マップ、政治家はコードとそのゲートとして?
6.IAM/秘密:フェデレーション、短命トークン、ドメイン別KMS?
7.クラスタ/メッシュ:フェイルオーバー戦略、制限/ブレーク/タイムアウト?
8.Observability:ラベル「クラウド/リージョン」、クラウドごとのSLOとグローバル、外部合成?
9.SDLC/IaC/GitOps:シングルカタログ、コンフォーマンステスト、リリースゲート?
10.FinOps/GreenOps:ユニットメトリック、エグレスバジェット、「グリーン」バッチウィンドウ?
11.ドリル:通常のゲーム日、プロトコル、再テスト?
12.終了計画:データのエクスポート/フォーマット/期限、主要サービスのセカンドソース?
15)ミニサンプル構成
15.1管轄ルーティングポリシー(Pseudo-YAML):
yaml route:
pii:
allowed_regions: ["eu-central","eu-north","eu-west"]
deny_cross_cloud: false analytics:
allowed_regions: ["eu-","us-"]
prefer_low_carbon: true weights:
eu-central@cloudA: 60 eu-central@cloudB: 40
15.GSLBのための2つの健康サンプル:
http
GET /healthz
200 OK x-region: eu-central x-slo: ok at-risk breach
15.3フェイルオーバー機能フラグ(擬似コード):
python if slo_at_risk("cloudA", "payments"):
route. weight["cloudA"] -= 20 route. weight["cloudB"] += 20 enable_stale_rates(ttl=1560)
結論
マルチクラウドは、ラベルではなく、エンジニアリング分野です。それは明確な動機、トポロジーの意識的な選択、データとの思慮深い作業、強力なオートメーションと厳格なポリシーを必要とします。あなたがリスクとコストを測定し、「教科書に従って」ネットワークとデータを構築し、fyloversを訓練し、シンプルさに向かって操縦すると、マルチクラウドプラットフォームはあなたに安定性、柔軟性と自由を与えます-請求書に驚くことなく、ユーザーエクスペリエンスに妥協することなく。