分享方式:


適用於 NoSQL 的 Azure Cosmos DB 復原建議

本文包含針對 NoSQL 的 Azure Cosmos DB 實現復原能力的建議。 許多建議都包含支援 Azure Resource Graph (ARG) 查詢,以協助識別不符合規範的資源。

復原建議影響矩陣

每個建議都會根據下列影響矩陣來標示:

映像 影響 Description
需要立即修正。
在 3-6 個月內修正。
需要檢閱。

復原建議摘要

類別 優先順序 建議
可用性 為高可用性設定至少兩個區域
災害復原 針對具有單一寫入區域的多重區域帳戶啟用服務管理的故障轉移
評估多區域寫入功能
選擇反映數據持久性需求的適當一致性模式
設定連續備份模式
系統效率 確定已完全清空查詢結果
在客戶端中維護單一模式
應用程式復原能力 在您的客戶端中實作重試邏輯
監視 監視Cosmos DB健康情況並設定警示

可用性

為高可用性設定至少兩個區域

請務必讓 Cosmos DB 上的次要區域達到更高的 SLA。 這樣做不會產生任何停機時間,而且它就像選取地圖上的釘選一樣簡單。 使用強式一致性的 Cosmos DB 實例必須設定至少三個區域,以在發生一個區域失敗時保留寫入可用性。

潛在優點: 增強 SLA 和復原能力。

深入瞭解:適用於 No SQL 的 Cosmos DB 可靠性 (高可用性)

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 DB 擁有高運行時間和復原能力。 即便如此,也可能會發生問題。 使用 服務管理的故障轉移時,如果區域關閉,Cosmos DB 會自動切換至下一個可用的區域,而不需要用戶動作。

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

評估多區域寫入功能

多重區域寫入功能可讓您設計跨多個區域高度可用的應用程式,不過它需要仔細注意一致性需求和衝突解決。 不正確的設定可能會降低可用性,並導致數據損毀,因為發生未處理的衝突。

潛在優點: 增強高可用性。

深入了解:

Resources
| where type =~ 'Microsoft.DocumentDb/databaseAccounts'
| where
    array_length(properties.locations) > 1 and
    properties.enableMultipleWriteLocations == false
| project recommendationId='cosmos-3', name, id, tags

選擇反映數據持久性需求的適當一致性模式

在全域分散式資料庫中,一致性層級會影響區域中斷期間的數據持久性。 瞭解復原規劃的數據遺失容錯。 除非需要更強,否則請使用會話一致性,接受來自唯讀中斷的較高寫入延遲和潛在的寫入區域影響。

潛在優點: 增強數據持久性和復原。

深入瞭解:Azure Cosmos DB 中的一致性層級

設定連續備份模式

Cosmos DB 的備份一律為開啟,可針對數據提供保護。 連續模式允許自助還原到預先發生點,不同於需要連絡 Microsoft 支援的定期模式,導致還原時間更長。

潛在優點: 更快速的自助數據還原。

深入瞭解:Azure Cosmos DB 中具有時間點還原功能的連續備份

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 DB 有 4 MB 的回應限制,導致大型或分割區跨越查詢的編頁結果。 每個頁面都會顯示可用性,並提供下一個的接續令牌。 程序代碼中的 while 循環必須周游所有頁面,直到完成為止。

潛在優點: 最大化數據擷取效率。

深入瞭解:適用於 No SQL 的 Azure Cosmos DB 中的分頁。

在客戶端中維護單一模式

針對每個帳戶和應用程式使用SDK用戶端的單一實例非常重要,因為聯機會系結至用戶端。 計算環境有開啟連線的限制,這會影響超過時的連線能力。

潛在優點: 優化連線和效率。

深入瞭解:使用 Azure Cosmos DB SDK 設計復原應用程式。

應用程式復原能力

在您的客戶端中實作重試邏輯

Cosmos DB SDK 會透過重試自動管理許多暫時性錯誤。 儘管如此,應用程式必須實作以 SDK 無法一般解決的特定案例為目標的其他重試原則,以確保更健全的錯誤處理。

潛在優點: 增強錯誤處理復原能力。

深入瞭解:使用 Azure Cosmos DB SDK 設計復原應用程式。

監視

監視Cosmos DB健康情況並設定警示

監視 Azure Cosmos DB 資源的可用性和回應性,併為您的工作負載設定警示是很好的作法。 這可確保您保持主動處理未預期事件。

潛在優點: 主動式問題管理。

深入瞭解:使用 Azure 監視器建立 Azure Cosmos DB 的警示