Cosmos DB
The presented resiliency recommendations in this guidance include Cosmos DB and associated resources and settings.
Summary of Recommendations
Recommendation | Category | Impact | State | ARG Query Available |
---|---|---|---|---|
COSMOS-1 - Configure at least two regions for high availability | Availability | High | Verified | Yes |
COSMOS-2 - Enable service-managed failover for multi-region accounts with single write region | Disaster Recovery | High | Verified | Yes |
COSMOS-3 - Evaluate multi-region write capability | Disaster Recovery | High | Verified | Yes |
COSMOS-4 - Choose appropriate consistency mode reflecting data durability requirements | Disaster Recovery | High | Preview | No |
COSMOS-5 - Configure continuous backup mode | Disaster Recovery | High | Verified | Yes |
COSMOS-6 - Ensure query results are fully drained | System Efficiency | High | Verified | No |
COSMOS-7 - Maintain singleton pattern in your client | System Efficiency | Medium | Verified | No |
COSMOS-8 - Implement retry logic in your client | Application Resilience | Medium | Verified | No |
COSMOS-9 - Monitor Cosmos DB health and set up alerts | Monitoring | Medium | Verified | No |
Recommendations Details
COSMOS-1 - 高可用性のために少なくとも 2 つのリージョンを構成します
Category: Availability
Impact: High
Guidance
Azure では、ラック、DC、ゾーン、リージョンの分離レベルによる多層分離アプローチが実装されています。Cosmos DB は、既定では 4 つのレプリカを実行することで高い回復性を備えていますが、リージョン全体または可用性ゾーンに関する障害や問題の影響を受けやすいままです。そのため、より高い SLA を実現するには、Cosmos DB で少なくともセカンダリ リージョンを有効にすることが重要です。そうすることでダウンタイムはまったく発生せず、地図上のピンを選択するのと同じくらい簡単です。厳密な整合性を利用する Cosmos DB インスタンスでは、1 つのリージョンで障害が発生した場合に書き込みの可用性を維持するために、少なくとも 3 つのリージョンを構成する必要があります。
Resources
- Distribute data globally with Azure Cosmos DB | Microsoft Learn
- Tips for building highly available applications | Microsoft Learn
Resource Graph Query
Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
array_length(properties.locations) < 2 or
(array_length(properties.locations) < 3 and properties.consistencyPolicy.defaultConsistencyLevel == 'Strong')
| project recommendationId='cosmos-1', name, id, tags
COSMOS-2 - 単一の書き込みリージョンを持つマルチリージョン アカウントのサービスマネージド フェールオーバーを有効にします
Category: Disaster Recovery
Impact: High
Guidance
Cosmos DB は、非常に高いアップタイムと回復性を備えた実証済みのサービスですが、最も回復性のあるシステムでも、小さな問題が発生することがあります。リージョンが使用できなくなった場合、サービス マネージド フェールオーバー オプションを使用すると、Azure Cosmos DB は、ユーザーの操作を必要とせずに、次に使用可能なリージョンに自動的にフェールオーバーできます。
Resources
Resource Graph Query
Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
array_length(properties.locations) > 1 and
tobool(properties.enableAutomaticFailover) == false and
tobool(properties.enableMultipleWriteLocations) == false
| project recommendationId='cosmos-2', name, id, tags
COSMOS-3 - 複数リージョンの書き込み機能を評価します
Category: Disaster Recovery
Impact: High
Guidance
複数リージョンの書き込み機能を使用すると、複数のリージョンでアクティブであるため、本質的に可用性の高いマルチリージョン アプリケーションを設計できます。ただし、そのためには、整合性の要件を綿密に検討し、競合解決ポリシーを使用して潜在的な書き込み競合を処理する必要があります。反対に、この構成を盲目的に有効にすると、予期しないアプリケーションの動作や、未処理の競合によるデータの破損により、可用性が低下する可能性があります。
Resources
- Distribute data globally with Azure Cosmos DB | Microsoft Learn
- Conflict resolution types and resolution policies in Azure Cosmos DB | Microsoft Learn
Resource Graph Query
Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
array_length(properties.locations) > 1 and
properties.enableMultipleWriteLocations == false
| project recommendationId='cosmos-3', name, id, tags
COSMOS-4 - データの持続性要件を反映した適切な整合性モードを選択します
Category: Disaster Recovery
Impact: High
Guidance
グローバルに分散されたデータベース環境内では、整合性レベルと、リージョン全体の停止が発生した場合のデータ持続性の間には直接的な関係があります。事業継続計画を策定する際には、破壊的なイベント後の復旧時にアプリケーションが損失を許容できる最近のデータ更新の最大期間を理解する必要があります。より強力な整合性モードが必要であることが確立され、書き込みレイテンシーの増加を許容し、読み取り専用リージョンでの停止が書き込みを受け入れる書き込みリージョンの機能に影響を与える可能性があることを理解していない限り、セッション整合性を使用することをお勧めします。
Resources
Resource Graph Query
// under-development
COSMOS-5 - 継続的バックアップ モードを構成します
Category: Disaster Recovery
Impact: High
Guidance
Cosmos DB によってデータが自動的にバックアップされるため、バックアップをオフにする方法はありません。要するに、あなたは常に保護されています。しかし、プロセスがうまくいかず、削除すべきでないデータを削除したり、お客様データが誤って上書きされたりなどの事故が発生した場合は、変更を元に戻すのにかかる時間を最小限に抑えることが重要です。継続モードでは、このような事故が発生する前の時点にデータベース/コレクションをセルフサービスで復元できます。ただし、定期モードでは、Microsoft サポートに連絡する必要があり、迅速なサポートを提供するよう努めているにもかかわらず、復元時間が必然的に長くなります。
Resources
Resource Graph Query
Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
properties.backupPolicy.type == 'Periodic' and
properties.enableMultipleWriteLocations == false and
properties.enableAnalyticalStorage == false
| project recommendationId='cosmos-5', name, id, tags
COSMOS-6 - クエリ結果が完全にドレインされるようにします
Category: System Efficiency
Impact: High
Guidance
Cosmos DB では、1 つの応答が 4 MB に制限されています。クエリが大量のデータまたは複数のバックエンド パーティションからのデータを要求する場合、結果は複数のページにまたがり、個別の要求を発行する必要があります。各結果ページには、さらに結果が利用可能かどうかが示され、次のページにアクセスするための継続トークンが提供されます。コードに while ループを含め、結果が得られなくなるまでページを走査する必要があります。
Resources
Resource Graph Query
// under-development
COSMOS-7 - クライアントでシングルトン パターンを維持します
Category: System Efficiency
Impact: Medium
Guidance
新しいデータベース接続の確立にはコストがかかるだけでなく、その維持にもコストがかかります。そのため、SDK クライアントのインスタンス (いわゆる “シングルトン”) を 1 つのアカウントごとに、アプリケーションごとに 1 つだけ維持することが重要です。接続 (HTTP と TCP) はどちらも、クライアント インスタンスにスコープが設定されます。ほとんどのコンピューティング環境には、同時に開くことができる接続の数に関する制限があり、これらの制限に達すると、接続が影響を受けます。
Resources
- Designing resilient applications with Azure Cosmos DB SDKs | Microsoft Learn Resource Graph Query
// under-development
COSMOS-8 - クライアントに再試行ロジックを実装します
Category: Application Resilience
Impact: Medium
Guidance
既定では、Cosmos DB SDK は多数の一時的なエラーを処理し、可能な場合は自動的に操作を再試行します。ただし、アプリケーションでは、SDK で一般的に処理できない明確に定義された特定のケースに対して再試行ポリシーを追加する必要があります。
Resources
Resource Graph Query
// under-development
COSMOS-9 - Cosmos DB の正常性を監視し、アラートを設定します
Category: Monitoring
Impact: Medium
Guidance
Azure Cosmos DB リソースの可用性と応答性を監視し、予期しないイベントが発生した場合にワークロードをプロアクティブに維持できるようにアラートを設定することをお勧めします。
Resources
Resource Graph Query
// under-development