Azure Cosmos DB におけるベクトル検索のマルチテナント
"OpenAI は、高い信頼性と低メンテナンスを実現する、これまでで最も急速に成長しているコンシューマー アプリの 1 つである ChatGPT サービスを動的にスケーリングするために Cosmos DB に依存しています。" — Satya Nadella
Azure Cosmos DB は、ベクトル検索を備えた世界初の完全な機能を備えたサーバーレス運用データベースとして、比類のないスケーラビリティとパフォーマンスを提供します。 Azure Cosmos DB を利用することで、ユーザーはベクトル検索機能を強化し、マルチテナント アプリケーションの高い信頼性と低いメンテナンス必要性を確保できます。
マルチテナントにより、データベースの単一のインスタンスが複数の顧客 (またはテナント) に同時にサービスを提供できます。 このアプローチは、インフラストラクチャと運用のオーバーヘッドを効率的に共有し、コストを削減し管理を簡略化できます。 これは、SaaS アプリケーションや一部の企業内ソリューションにとって極めて重要な設計上の考慮事項です。
マルチテナントは複雑さをもたらします。 システムは、固有のワークロード、要件、およびサービス レベル アグリーメント (SLA) を持つ可能性のあるすべてのテナントで高いパフォーマンスを維持するために、効率的に拡張する必要があります。
ResearchHub という架空の AI 支援研究プラットフォームがあるとします。 何千もの企業や個人研究者にサービスを提供する ResearchHub では、さまざまなユーザー ベース、データスケール、SLA を管理しています。 優れたユーザー エクスペリエンスを維持するには、クエリの待ち時間を短縮し、高いパフォーマンスを確保することが不可欠です。
DiskANN ベクトル インデックス機能を備えた Azure Cosmos DB は、マルチテナント設計を簡略化し、高パフォーマンスなアプリケーションに効率的なデータ ストレージとアクセス メカニズムを提供します。
Azure Cosmos DB のマルチテナント モデル
Azure Cosmos DB では、マルチテナントを管理するために、テナントごとのパーティション キーまたはテナントごとのアカウントという 2 つの主要なアプローチをお勧めしています。
1.テナントごとのパーティション キー
テナントの密度が高く、分離度が低い場合は、テナントごとのパーティション キー モデルが効果的です。 各テナントには、指定されたコンテナー内で一意のパーティション キーが割り当てられ、データを論理的に分離できます。 この戦略は、各テナントのワークロード量がほぼ同じ場合に最適です。 重大な偏りがある場合は、自身のアカウントでそれらのテナントを分離することを検討してください。 さらに、1 つのテナントに 20 GB を超えるデータがある場合は、階層パーティション キー (HPK) を使用する必要があります。 特に、ベクトル検索では、ベクトル検索クエリが特定のパーティションまたはパーティションのセットにフォーカスできる場合、quantizedFlat インデックスは非常に優れたパフォーマンスを発揮します。
メリット:
- コスト効率: 単一の Cosmos DB アカウントを複数のテナントで共有することで、オーバーヘッドを削減できます。
- スケーラビリティ: 多数のテナントを管理でき、各テナントはパーティション キー内で分離されています。
- 簡略化された管理: 管理する Cosmos DB アカウントが少なくなります。
- 階層パーティション キー (HPK): テナント数の多いマルチテナント アプリのデータ編成とクエリのパフォーマンスを最適化します。
短所:
- リソース競合: 共有リソースは、ピーク使用時に競合が発生する可能性があります。
- 限定的な分離: 物理的な分離ではなく論理的な分離で、厳密な分離要件を満たさない場合があります。
- 柔軟性の低下: geo レプリケーション、ポイントインタイム リストア (PITR)、カスタマー マネージ キー (CMK) などのアカウントレベルの機能を有効にするためのテナントごとの柔軟性が低下します。
階層パーティショニング: 強化されたデータの編成
階層パーティション分離は、テナントごとのパーティション キー モデルをベースに、より深いレベルのデータ編成を追加します。 この手法では、よりきめ細かなデータ管理のために、複数のレベルのパーティション キーを作成します。 階層パーティション分割の最下位レベルは、高いカーディナリティが必要です。 通常、テナントあたり 20 GB を超える継続的なスケーラビリティを確保するために、このレベルでは ID/guid を使用することをお勧めします。
長所:
- 最適化されたクエリ: 親パーティション レベルでのサブパーティションのより正確なターゲット設定により、クエリの待ち時間が短縮されます。
- スケーラビリティの向上: スケーリングを容易にするために、詳細なデータ分割を促進します。
- より優れたリソース割り当て: ワークロードを均等に分散し、テナント数が多い場合のボトルネックを最小限に抑えます。
考慮事項:
- アプリケーションのテナント数が非常に少なく、階層パーティション分割を使用している場合、同じ第 1 レベルのキーを持つすべてのドキュメントが同じ物理パーティションに書き込まれるため、ボトルネックになる可能性があります。
例: ResearchHub では、各テナントのパーティション内のデータを "部署 ID" や "研究者 ID などのさまざまなレベルで階層化し、効率的な管理やクエリを行うことができます。
2.テナントごとのアカウント
最大限分離するには、テナントごとのアカウント モデルをお勧めします。 各テナントは専用の Cosmos DB アカウントを取得し、リソースを完全に分離します。
メリット:
- 高分離: 専用リソースによる競合や干渉はありません。
- カスタムSLA: リソースと SLA を個々のテナントのニーズに合わせて調整できます。
- 強化されたセキュリティ: 物理的なデータ分離で堅牢なセキュリティが確保されます。
- 柔軟性下: テナントは、必要に応じて geo レプリケーション、ポイントインタイム リストア (PITR)、カスタマー マネージ キー (CMK) などのアカウントレベルの機能を有効にできます。
短所:
- 管理の増加: 複数の Cosmos DB アカウント管理の複雑化。
- コストの上昇: アカウント数が増えると、インフラストラクチャのコストも上昇します。
カスタマー マネージド キーを使用したセキュリティの分離
Azure Cosmos DB は、データ暗号化のためにカスタマー マネージド キーを有効にし、マルチテナント環境のセキュリティ レイヤーを追加します。
実装の手順:
- Azure Key Vault の設定: 暗号化キーを安全に保存します。
- CosmosDB へのリンク: Key Vault を Cosmos DB アカウントに関連付けます。
- キーの定期的な回転: キーを定期的に更新することで、セキュリティを強化します。
カスタマー マネージド キーを使用することで、各テナントのデータが一意に暗号化され、堅牢なセキュリティとコンプライアンスが提供されます。
その他の分離モデル
コンテナーとデータベースの分離
テナントごとのパーティション キー モデルとテナントごとのアカウント モデルに加えて、Azure Cosmos DB ではコンテナー分離やデータベース分離などの他の分離手法が提供されます。 これらの手法ではさまざまなレベルのパフォーマンスの分離が提供されますが、テナントごとのアカウント モデルと同じレベルのセキュリティ分離は提供されません。
コンテナーの分離
コンテナー分離モデルでは、各テナントは共有の Cosmos DB アカウント内に個別のコンテナーが割り当てられます。 このモデルでは、パフォーマンスとリソースの割り当てに関して、ある程度分離できます。
メリット:
- パフォーマンスの分離の向上: コンテナーに特定のパフォーマンス リソースを割り当てることができるため、あるテナントのワークロードが別のテナントに与える影響を最小化できます。
- 簡略化された管理: 通常、1 つのアカウントで複数のコンテナーを管理する方が、複数のアカウントを管理するよりも簡単です。
- コスト効率: テナントごとのパーティション キー モデルと同様に、この方法は複数アカウントのオーバーヘッドを削減します。
短所:
- 限定的なセキュリティ分離: 個別のアカウントとは異なり、同じアカウント内のコンテナーで物理的なデータ分離は提供されません。 そのため、このモデルは厳しいセキュリティ要件を満たしていない可能性があります。
- リソースの競合: 1つのコンテナーでワークロードの負荷が大きいと、リソース制限に違反した場合、他のコンテナーにも影響する可能性があります。
データベースの分離
データベース分離モデルでは、共有 Cosmos DB アカウント内で各テナントに個別のデータベースを割り当てます。 これにより、リソースの割り当てと管理の面で分離が強化されます。
メリット:
- 強化されたパフォーマンス: データベースを分離することで、リソースの競合リスクを低減し、パフォーマンスの分離が向上します。
- 柔軟なリソース割り当て: データベース レベルでリソースを割り当てて管理できるため、カスタマイズされたパフォーマンス機能が提供されます。
- 一元管理: 複数のアカウントで管理するよりも簡単ですが、コンテナーレベルの分離よりも高い分離性が得られます。
短所:
- 限定的なセキュリティ分離: コンテナーの分離と同様に、単一のアカウント内に別々のデータベースがあると物理的なデータの分離が提供されません。
- 複雑さ 複数のデータベースの管理は、特にテナント数が増えた場合に、コンテナーの管理より複雑になる可能性があります。
コンテナーやデータベースの分離モデルではテナントごとのアカウント モデルと同じレベルのセキュリティ分離は提供されませんが、引き続きパフォーマンスの分離や柔軟なリソース管理を実現するのに役立ちます。 これらの手法は、コスト効率と管理の簡略化が優先され、厳格なセキュリティ分離が重要な要件ではないシナリオに有益です。
マルチテナント アプリケーションの具体的なニーズと制約を慎重に評価することで、Azure Cosmos DB で最適な分離モデルを選択し、パフォーマンス、セキュリティ、コストのバランスを取りながら、テナントにとって最良の結果が得られます。
実際の実装時の注意事項
Cosmos DB を使用してマルチテナント システムを設計する場合、次の要素を考慮してください。
- テナントのワークロード: データ サイズとアクティビティを評価して適切な分離モデルを選択します。
- パフォーマンス要件: 定義された SLA とパフォーマンス メトリックにアーキテクチャを一致させます。
- コスト管理: インフラストラクチャのコストと分離およびパフォーマンスのニーズのバランスをとります。
- スケーラビリティ: スケーラブルなモデルを選択することで成長を計画します。
Azure Cosmos DB での実践的な実装
テナントごとのパーティション キー:
- パーティションキーの割り当て: 各テナントの一意のキーにより、論理的な分離が確保されます。
- ストアデータ: テナント データはそれぞれのパーティション キーに限定されます。
- クエリの最適化: 効率的でターゲット設定したクエリ用にパーティション キーを使用します。
階層パーティション分離:
- マルチレベル キーの作成: テナント パーティション内のデータをさらに整理します。
- ターゲット設定されたクエリ: 正確なサブパーティション ターゲット設定でパフォーマンスを強化します。
- リソースの管理: ワークロードを均等に分散してボトルネックを防ぎます。
テナントごとのアカウント
- 個別アカウントの提供: 各テナントには専用の Cosmos DB アカウントが提供されます。
- リソースのカスタマイズ: パフォーマンスと SLA をテナントの要件に合わせて調整します。
- セキュリティの確保: 物理的なデータ分離では堅牢なセキュリティとコンプライアンスが提供されます。
Azure Cosmos DB で Azure Cosmos DB を使用するためのベスト プラクティス
Azure Cosmos DB は、DiskANN ベクトル インデックス機能をサポートしているため、ResearchHub のような AI 支援研究プラットフォームなど、高速かつ高次元の検索が必要なアプリケーションに最適です。 これらの機能を活用する方法を説明します。
効率的な格納と取得:
- ベクトル インデックス: DiskANN ベクトル インデックスを使用して、高次元ベクトルを効率的に格納および検索します。 これは、画像認識やドキュメントの類似性など、大規模なデータセットの類似性検索を伴うアプリケーションに役立ちます。
- パフォーマンスの最適化: DiskANN のベクトル検索機能は、迅速で正確に検索でき、待機時間を短縮し高いパフォーマンスが確保されます。これは、優れたユーザー エクスペリエンスの維持に不可欠です。
テナントをまたいだスケーリング:
- テナントごとのパーティション キー: Cosmos DB のスケーラブルなインフラストラクチャを活用しながら、パーティション キーを利用してテナント データを論理的に分離します。
- 階層パーティション分離: 階層パーティション分割を実装して、各テナントのパーティション内でデータを詳細にセグメント化し、クエリのパフォーマンスとリソースの分散を改善します。
セキュリティとコンプライアンス:
- カスタマー マネージド キー: 静止時のデータ暗号化のためにカスタマー マネージド キーを実装し、各テナントのデータが安全に分離されるようにします。
- 定期的なキーのローテーション: Azure Key Vault に格納されている暗号化キーを定期的にローテーションすることで、セキュリティを強化します。
実際の例: ResearchHub の実装
テナントごとのパーティション キー:
- パーティション キーの割り当て: 各組織 (テナント) には一意のパーティション キーが割り当てられます。
- データストレージ: テナントの研究者データはすべてパーティション内に格納され、論理的に分離されます。
- クエリの最適化: クエリはテナントのパーティション キーを使用して実行され、データ アクセスを分離することでパフォーマンスが向上します。
階層パーティション分離:
- マルチレベル パーティション キー: テナントのパーティション内のデータは、"DepartmentId" と "ResearcherId"、またはその他の関連する属性によって詳細にセグメント化されます。
- 詳細なデータ管理: この階層的アプローチにより、ResearchHub は効率的にデータを管理し、クエリを実行し、待機時間を短縮し、応答時間を改善できます。
テナントごとのアカウント
- 個別の Cosmos DB アカウント: 注目度の高いクライアントや機密データを持つクライアントには、個別の Cosmos DB アカウントが提供されます。
- カスタム構成: リソースと SLA は、各テナントの特定のニーズに合わせて調整され、最適なパフォーマンスとセキュリティが確保されます。
- データ セキュリティの強化: カスタマー マネージド暗号化キーを使用してデータを物理的に分離することで、堅牢なセキュリティ コンプライアンスが確保されます。
まとめ
Azure Cosmos DB のマルチテナント、特に DiskANN ベクトル インデックス機能では、スケーラブルで高性能な AI アプリケーションを構築するための強力なソリューションが提供されます。 テナントごとのパーティション キー、階層パーティション分割、テナントごとのアカウントのいずれのモデルを選択しても、コスト、セキュリティ、パフォーマンスのバランスを効果的にとることができます。 これらのモデルとベスト プラクティスの活用により、マルチテナント アプリケーションが顧客の多様なニーズを満たし、優れたユーザー エクスペリエンスを提供できるようになります。
Azure Cosmos DB は、堅牢で、セキュリティで保護され、スケーラブルなマルチテナント環境を構築するために必要なツールを提供します。 DiskANN ベクトル インデックスの力を活用して、AI アプリケーションを促進する高速な高次元検索を実現できます。