Cosmos DB


The presented resiliency recommendations in this guidance include Cosmos DB and associated resources and settings.

Summary of Recommendations

Recommendations Details

COSMOS-1 - 高可用性のために少なくとも 2 つのリージョンを構成します

Category: Availability

Impact: High

Guidance

Azure では、ラック、DC、ゾーン、リージョンの分離レベルによる多層分離アプローチが実装されています。Cosmos DB は、既定では 4 つのレプリカを実行することで高い回復性を備えていますが、リージョン全体または可用性ゾーンに関する障害や問題の影響を受けやすいままです。そのため、より高い SLA を実現するには、Cosmos DB で少なくともセカンダリ リージョンを有効にすることが重要です。そうすることでダウンタイムはまったく発生せず、地図上のピンを選択するのと同じくらい簡単です。厳密な整合性を利用する Cosmos DB インスタンスでは、1 つのリージョンで障害が発生した場合に書き込みの可用性を維持するために、少なくとも 3 つのリージョンを構成する必要があります。

Resources

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

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

// 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