Config Controller のシャーディング ガイドライン

このドキュメントでは、Config Controller の使用をシャーディングする方法についての推奨事項を示します。シャーディングとは、Config Controller で管理されている Google Cloud リソースを複数の名前空間、クラスタ、プロジェクトに分割するプロセスです。

シャーディングには次のような利点があります。

  • 変更の影響を軽減する: 1 つのシャードが機能を停止しても、他のシャードは影響を受けません。
  • セキュリティ管理を支援する: 各シャードに専用の IAM と RBAC 構成を設定できます。1 つのシャードを侵害する悪意のある攻撃者は、他のシャードにアクセスできません。1 つのシャードの構成ミスが他のシャードに影響することはありません。
  • スケーラビリティの向上: 単一シャードでは、マネージド オブジェクトの数や API 割り当てなどのスケーラビリティのボトルネックが発生する可能性があります。複数のシャードを使用すると、Config Controller の使用の全体的なスケーラビリティが向上します。

Config Controller でシャーディングを使用する

シャーディングを実装する方法はいくつかあります。最適なアプローチは、お客様固有のニーズと要件によって異なります。

シャーディング モデル

シャーディング モデルには、主に次の 2 つがあります。

  • 事業部門またはアプリケーション チームによる処理: このモデルは通常、Config Controller が異なるチームによって使用される場合に使用します。このモデルでは、各チームに独自のシャードが存在します。
  • 環境による処理: このモデルは通常、Config Controller が異なる環境で使用される場合に使用します。たとえば、開発環境、QA 環境、本番環境それぞれに 1 つのにシャードがあるとします。

シャード間の参照の必要性を最小限に抑える

Config Controller の使用をシャーディングする場合は、シャード間の参照を最小限に抑える必要があります。シャード間の参照は、構成を複雑にし、管理を困難にする可能性があります。詳細については、インスタンス間のリソース参照をご覧ください。

シャーディング メカニズム

主なシャーディング メカニズムには次の 3 つがあります。

  • 名前空間による処理: 追加の名前空間を作成し、それらの名前空間のリソースを管理するように Config Connector を構成できます。
  • Config Controller インスタンスによる処理: 1 つの Google Cloud プロジェクト内に複数の Config Controller インスタンスを作成できます。
  • プロジェクトによる処理: 複数の Google Cloud プロジェクト内に複数の Config Controller インスタンスを作成できます。このメカニズムは、1 つのプロジェクトで割り当てのボトルネックが発生した場合に、API の割り当ての問題に対処するのに有効です。詳細については、複数のプロジェクトにリソースを分割するをご覧ください。

シャーディングを実装する際の注意点

Config Controller の使用にシャーディングを実装する際には、発生する可能性のある注意すべき問題がいくつかあります。これらの問題を軽減する計画を立ててください。

インスタンス間のリソース参照

Config Controller をシャーディングする際の課題の一つは、インスタンス間でのリソース参照の処理です。たとえば、プラットフォーム チームが 1 つのインスタンスでプロジェクトを作成し、アプリチームが他のインスタンスでそれらのプロジェクトを参照するリソースを作成することが考えられます。これにより、次のような問題が発生する可能性があります。

  • 複雑性の増大: クラスタ間でリソース参照を管理すると、構成が複雑になり、管理が困難になる可能性があります。
  • リスクの増大: あるシャードでリソースが削除されても、他のシャードにあるリソースによって引き続き参照される可能性があります。これにより、予期しない動作やデータ損失が生じる可能性があります。
  • パフォーマンスの低下: クラスタ間のリソース参照により、構成変更のレイテンシが増大する可能性があります。

相互参照の課題を回避するには、いくつかの方法があります。

  • シャード間の参照が不要な方法でシャーディングする。これは、環境またはチームでシャーディングすることで実現できます。
  • 外部参照を使用する。つまり、参照されているオブジェクトは実際には Config Controller によって管理されていません。オブジェクトが頻繁に変更されない場合は、この方法が適しています。
  • すべてのシャードで同じオブジェクトを利用可能にする。これはより複雑な方法ですが、オブジェクトが頻繁に変更される場合は最適な方法です。オブジェクトは、異なるシャードにあるオブジェクト間の調整による競合を回避するために、同じ信頼できる情報源を共有する必要があります。これらのオブジェクトの競合防止ポリシーnone に設定する必要があります。

いずれかを選択する前に、各アプローチの長所と短所を慎重に検討することが重要です。

API 割り当て

シャーディングを行うと、API の割り当てが増加する可能性があります。この点に留意して、計画を立ててください。API 割り当て上限の管理に関するベスト プラクティスについては、API 割り当て上限を管理するをご覧ください。

次のステップ