リージョン ビューを使用して、復元力のあるコントロール プレーンの読み取りを行う

コントロール プレーンの依存関係 は、アプリケーションのリソース定義を管理する API とメタデータ サービスです。可用性と復元力の高いアプリケーションを構築し、Compute Engine でデプロイ ワークフローを自動化するには、これらの依存関係を分離することが重要です。グローバル API エンドポイントはすべてのリージョンで強整合性を提供しますが、グローバル コントロール プレーンまたはリモート リージョンで一時的なレイテンシの急増や中断が発生すると、ローカル サービスが遅延またはブロックされる可能性があります。

グローバル API の中断に耐え、各リージョン内で独立して動作できる信頼性の高いアプリケーションを構築するには、グローバル リソースのリージョン ビューをクエリするようにサービスを構成します。リージョン化された読み取り専用 API エンドポイントを使用してリソース定義を読み取ることで、アプリケーションは特定のリージョンのコントロール プレーンと厳密に通信します。このリージョン障害分離により、グローバルな中断が発生した場合でも、サービスの高可用性と応答性が維持されます。

サポートされるリソースタイプ

リージョン ビュー エンドポイントは、次のグローバル リソースで使用できます。

  • プロジェクト: projectViews エンドポイントは、グローバル プロジェクト リソースへのリージョン読み取り専用 アクセスを提供します。
  • OS イメージ: imageViews エンドポイントは、グローバル OS イメージ リソースへのリージョン読み取り専用アクセス を提供します。

制限事項

すべてのグローバル リソースのメタデータは、中央のグローバル データベースに保存されます。 標準のグローバル API エンドポイントを使用してリソースを作成、読み取り、更新、削除すると、Compute Engine は中央のグローバル データベースから読み取り、直接書き込みを行い、強整合性を提供します。

リージョン ビュー エンドポイントは、中央のグローバル データベースのリージョン読み取り専用レプリカからリソース メタデータを読み取ります。変更はこれらのリージョン レプリカに非同期でコピーされるため、リージョン ビューをクエリすると、次の動作が発生する可能性があります。

  • わずかな遅延: リソースをグローバルに作成、更新、削除すると、 その変更がすべてのリージョン ビュー エンドポイントにコピーされるまでに最大 60 秒かかることがあります。この短い期間に、リージョン ビューから読み取ると、少し古いデータが返される可能性があります。
  • 自動フォールバック: リージョンへのコピーが完了する前にリージョン ビューからリソースをリクエストすると、リクエストが成功するように、Compute Engine は中央のグローバル データベースから直接読み取ります。

リージョン ビューとグローバル API の違い

次のタブでは、各リソースタイプについて、リージョン ビュー エンドポイントと標準のグローバル API エンドポイントの違いをまとめています。

プロジェクト

次の表に、プロジェクト リソースのリージョン ビュー エンドポイントと標準のグローバル API エンドポイントの違いをまとめます。

機能 グローバル API リージョン ビュー API
エンドポイント グローバル リージョン
リソース URL /projects/PROJECT_ID /projects/PROJECT_ID/regions/REGION/projectViews
障害発生ドメイン グローバル 指定されたリージョンに分離
サポートされるメソッド 読み取りと書き込み 読み取り専用(Get)
API 割り当て グローバル API の読み取りと書き込みの割り当てバケットを消費する リージョン API の読み取り割り当てバケットを消費する
書き込み後読み取り整合性 強整合性(中央のグローバル データベースから読み取る) 結果整合性(リージョン レプリカから読み取る)
割り当てフィールドの動作 quota 配列を返します。クロスリージョン ファンアウトを使用して すべてのリージョンとゾーンでリアルタイムの割り当て使用量データを提供します。 返された Project オブジェクトから quota 配列が除外されます。projectViews エンドポイントはリージョン レプリカから厳密に読み取り、割り当て指標を収集するためにクロスリージョン ファンアウトを実行しないため、quota 配列は返されません。割り当て構成 上限と正確なリアルタイム使用量指標については、グローバル projects.get エンドポイントをクエリしてください。

OS イメージ

次の表に、OS イメージ リソースのリージョン ビュー エンドポイントと標準のグローバル API エンドポイントの違いをまとめます。

機能 グローバル API リージョン ビュー API
エンドポイント グローバル リージョン
リソース URL /projects/PROJECT_ID/global/images /projects/PROJECT_ID/regions/REGION/imageViews
障害発生ドメイン グローバル 指定されたリージョンに分離
サポートされるメソッド 読み取りと書き込み 読み取り専用(Get と List)
API 割り当て グローバル API の読み取りと書き込みの割り当てバケットを消費する リージョン API の読み取り割り当てバケットを消費する
書き込み後読み取り整合性 強整合性(中央のグローバル データベースから読み取る) 結果整合性(リージョン レプリカから読み取る)

料金

リージョン読み取り専用 API エンドポイントを介してリージョン ビューにアクセスしても、追加料金は発生しません。標準のグローバル Compute Engine API リクエストと同様に、リージョン ビュー エンドポイントへのリクエスト は、プロジェクトの標準 API 割り当て(特にリージョン API の読み取り割り当て)を消費しますが、追加料金は発生しません。

高可用性のベスト プラクティス

アプリケーションの復元力を最大限に高め、コントロール プレーンの負荷を不均衡にしないようにし、単一リージョンのホットスポットを作成しないようにするには、自動システムとクライアント ワークロードを構成するときに、次の信頼性のプラクティスに従います。

  • ローカル リージョンをクエリして影響を受ける範囲を減らす: クライアント ワークロードまたは デプロイ クラスタが実行される正確なリージョンに projectViews と imageViews API リクエストを送信します。ゾーン ワークロードの場合は、親リージョンを使用します。 読み取りをローカライズすることで、別のリージョンでのネットワークの中断や停止がローカル サービスに影響しないようにします。
  • リージョン文字列を動的に検出する: 共有クライアント ライブラリまたはデプロイ テンプレートに特定のデフォルト リージョン 文字列をハードコードしないでください。代わりに、ワークロードの現在の実行リージョンをローカル ランタイム環境から動的に検出して、マルチリージョン フェイルオーバーが透過的に機能するようにします。
  • 競合するワークロードに対してリージョン割り当ての分離を使用する: Compute Engine は、リージョンごとに API レート制限を適用します。1 つのリージョンでトラフィックの急増やスクリプトの暴走が発生しても、他の重要なリージョンで API の可用性に影響したり、レート制限(429 Too Many Requests)をトリガーしたりすることなく、その特定のリージョンのバケットから読み取り割り当てが消費されます。

次のステップ