コントロール プレーンの依存関係 は、アプリケーションのリソース定義を管理する 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とimageViewsAPI リクエストを送信します。ゾーン ワークロードの場合は、親リージョンを使用します。 読み取りをローカライズすることで、別のリージョンでのネットワークの中断や停止がローカル サービスに影響しないようにします。 - リージョン文字列を動的に検出する: 共有クライアント ライブラリまたはデプロイ テンプレートに特定のデフォルト リージョン 文字列をハードコードしないでください。代わりに、ワークロードの現在の実行リージョンをローカル ランタイム環境から動的に検出して、マルチリージョン フェイルオーバーが透過的に機能するようにします。
- 競合するワークロードに対してリージョン割り当ての分離を使用する:
Compute Engine は、リージョンごとに API レート制限を適用します。1 つのリージョンでトラフィックの急増やスクリプトの暴走が発生しても、他の重要なリージョンで API の可用性に影響したり、レート制限(
429 Too Many Requests)をトリガーしたりすることなく、その特定のリージョンのバケットから読み取り割り当てが消費されます。
次のステップ
- 高可用性を実現するためにグローバル リソースにリージョン単位でアクセスする方法を学習する。
- グローバル リソースのリージョン ビューのトラブルシューティング方法を学習する。