Azure Cosmos DB 的可靠性

Azure Cosmos DB for NoSQL 是一項全球分布式、多模型的資料庫服務,支援具備彈性結構的文件資料模型。 Azure Cosmos DB 提供全面的可靠性功能,包括多重一致性層級以平衡效能與可用性、區域冗餘部署以防範可用性區故障、多區域複製(服務管理或客戶管理故障轉移),以及持續且定期的備份選項以保護資料。

當您使用 Azure 時, 可靠性是共同的責任。 Microsoft 提供一系列功能以支援韌性與復原。 您有責任瞭解這些功能在您使用的所有服務中如何運作,並選取符合業務目標和正常運作時間目標所需的功能。

本文說明如何讓 Azure Cosmos DB 具備對各種潛在故障與問題的韌性,包括暫時故障、可用性區域中斷、區域中斷及服務維護。 同時說明如何利用備份從其他類型的問題中復原,並強調關於 Azure Cosmos DB 服務水準協議(SLA)的關鍵資訊。

生產部署建議

Azure Well-Architected Framework 提供關於可靠性、安全性、成本、營運與效能的建議。 欲了解這些領域如何相互影響並促成可靠的Azure Cosmos DB解決方案,請參閱 Architecture 關於 Azure Cosmos DB 的最佳實務。

可靠性架構概觀

本節說明服務運作中從可靠性角度來看最為重要的部分。 本節介紹邏輯架構,包含你部署和使用的部分資源與功能。 它還討論了物理架構,其中提供了有關服務如何在幕後工作的詳細信息。

邏輯架構

你部署的主要資源是 Azure Cosmos DB account。 每個帳號可以 有多個資料庫 和多個 容器。 容器是分發與可擴展性的邏輯單元。 你可以根據你用來與 Azure Cosmos DB 互動的 API 建立容器,例如集合、表格和圖形。 想了解更多關於資源模型的資訊,請參閱 Azure Cosmos DB 中的 資料庫、容器和項目。 每個容器都使用 分割區,支援高規模與高效能。

你要設定 吞吐量,代表你可以用來查詢和處理資料的系統資源量。 你可以 手動配置吞吐量使用自動擴展 功能根據工作負載需求動態調整容量,或使用 無伺服器帳號 類型來按實際使用量收費。

單一帳號可以跨越多個Azure區域,這能提升你對區域故障的韌性。 你可以設定多個區域來讀取,如果你使用 商業關鍵層,也可以同時使用多個區域來寫入。 Azure Cosmos DB 會自動地理複製你嘅資料。 地理複製行為會受到你所使用的配置影響,例如 一致性等級,這會顯示你希望在資料一致性、可用性、延遲與吞吐量之間做出取捨。 不同的一致性層級針對不同問題進行優化,支持不同的保證,並提供不同類型的跨區域複製。

實體架構

Azure Cosmos DB會儲存多個複本以備援。 該服務會自動透過維持各區域副本間的法定人數來減輕複本中斷。 此方法保證高可用性,並在單一節點故障時防止資料遺失,無需更改應用程式或設定。

在內部,Azure Cosmos DB 透過多種結構管理您的資料,包括 物理分割區分割區集合,以及 複本集。 如需了解 Azure Cosmos DB 如何運作的更詳細資訊,請參閱 全域資料分布與 Azure Cosmos DB 的背後運作

對瞬態故障的彈性

暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能妥善處理暫時性錯誤,通常透過重試受影響的請求來進行。

所有雲端託管應用程式在與任何雲端託管的 API、資料庫及其他元件通訊時,都應遵循 Azure 暫態故障處理指引。 如需詳細資訊,請參閱 處理暫時性錯誤的建議

我們建議你使用 Azure Cosmos DB SDK。 SDK 自動實作多項韌性考量的支援,包括透過自動重試來處理暫時性故障,以及尊重服務發送的速率限制回應。 如需詳細資訊,請參閱 使用 Azure Cosmos DB SDK 設計具備韌性的應用程式

在處理多區域帳戶時,SDK 也支援 基於門檻的可用性策略,也稱為 對沖,這種策略會向多個區域發送平行讀取請求並接受最快的回應。 當區域暫時出現比平常更高的延遲時,此方法能提升應用程式效能。

對可用性區域故障的抵抗力

可用性區域 是 Azure 區域內物理上獨立的資料中心群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。

Azure Cosmos DB 支援 區域備援。 當您啟用區域備援時,Azure 會將資料的複本分散到多個可用性區域,為資料中心問題和中斷提供復原能力。 Microsoft 選擇使用可用性區域。

圖示,顯示一個Azure Cosmos DB帳號,副本組包含三個副本,分布於三個不同的可用性區域。

Azure Cosmos DB 帳號可能會使用多個區域(地點)來進行全球分發、擴展和故障轉移。 你可以在帳戶裡為每個區域分別設定區域冗餘。

在 Azure Cosmos DB 中使用區域冗餘對效能或延遲沒有明顯影響。 它不需要調整所選的一致性模式,也不需要修改應用程式程式碼。

建議您在支援區域備援的區域中使用區域備援,尤其是單一區域帳戶。 由於可用性區域在實體上是分開的,並提供不同的電源、網路和冷卻,因此區域備援帳戶的 Azure Cosmos DB 可用性 SLA 高於不使用可用性區域的帳戶。

提示

啟用區域冗餘是提升 Azure Cosmos DB 資料庫韌性的好方法,同時不會增加額外應用複雜度或影響效能。 根據你的帳戶設定,甚至可能不會產生額外費用。

如果你沒有啟用區域性冗餘,該帳戶在該區域是不具區域性的。 非區域帳號可能會在同一可用區域內找到副本,若該區域出現問題,可能導致停機。

Requirements

  • Region support: 你可以在支援可用性區域的Azure區域啟用區域冗餘。 想看看你的區域是否支援可用性區域,請參閱 支援區域列表

    區域冗餘不是帳號層級的設定。 Azure Cosmos DB 帳號可以跨越多個區域,且每個區域可以獨立設定以使用可用性區域。 不支援可用性區的區域,並不會阻止你在同一帳號內啟用其他區域的區域冗餘。

  • 無伺服器帳號: 你只能在建立區域冗餘的無伺服器帳號時進行設定。 你無法將沒有可用區域的現有無伺服器帳號轉換成可用性區域配置。 對於關鍵任務負載,我們建議你使用預備吞吐量。

考慮事項

  • 多個區域同時停電: 具有區域冗餘的單一區域帳號,當故障影響單一可用區域時,可以維持讀寫可用性。 然而,若中斷影響多個可用區域或整個區域,單一區域帳號將失去讀寫權限,直到服務恢復為止。 如果你需要對多個區域同時失效保持韌性,可以考慮部署多區域帳號。

  • 多區域帳號: 如果你有多區域帳號,可以選擇性地在任何或所有支援可用性區域的帳號區域啟用區域冗餘。 我們強烈建議當你的帳號設定使用單一區域,或設定為使用單一寫入區域並有多個讀取區域時,啟用區域冗餘。

Cost

啟用區域冗餘的區域會收取額外費用。 然而,對於設定多區域寫入的帳戶,以及設定為自動擴展吞吐量模式的集合,可用性區域的加價則被免除。 更多資訊請參閱 Azure Cosmos DB 價格

設定可用性區域支援

大多數帳號只有在新增區域到 Azure Cosmos DB 帳號時才會啟用區域冗餘。 若要在現有帳戶啟用可用性區支援,請新增一個區域並啟用區域冗餘。 你可以依照流程新增臨時區域,這樣你就能在原本的區域設定區域冗餘。 詳細步驟請參見 啟用 Azure Cosmos DB 帳戶的區域冗餘

對於無伺服器帳號,創建帳號時必須啟用區域冗餘。

所有區域都狀況良好時的行為

本節說明 Azure Cosmos DB 帳戶在配置區域冗餘時的預期情況,以及所有區域正常運作時的狀態。

  • 跨區域操作: Azure Cosmos DB自動將請求路由至跨可用區域的副本,因此任何副本都能提供請求。

  • 跨區域資料複製: 當客戶端對任何資料做出變更時,該變更會套用到不同區域的多個副本以達成法定人數。 這種方法稱為 同步複製。 同步複製確保高度的資料一致性,降低區域故障時資料遺失的可能性。 可用區域彼此相對接近,這意味著對延遲或吞吐量的影響很小。

區域失敗期間的行為

本節說明當你設定 Azure Cosmos DB 帳號以進行區域冗餘時,當其中一個區域發生故障時,會遇到的情況。

  • 偵測與回應: Azure Cosmos DB平台負責偵測可用性區域內的故障。 您不需要執行任何動作即可起始區域容錯移轉。
  • Active requests: 當可用區域無法使用時,Azure Cosmos DB 終止所有與受影響區域副本連接的進行中請求,應用程式必須重新嘗試這些請求。 請依照臨時 故障處理指引,確保您的申請做好準備。

  • 預期資料遺失: 區域故障不會造成預期的資料遺失。

  • 預期的停機時間: 在區域中斷期間,連線可能會短暫中斷,通常持續幾秒鐘,因為流量會重新分配。 確定您的應用程式已遵循暫時性錯誤處理指導來做好準備。

  • Redistribution: Azure Cosmos DB 會自動將收到的請求導向到其他可用區域的健康副本。 當可用區域出現故障時,平台會自動將已配置的吞吐量重新分配給其他副本。

區域復原

當可用性區域恢復時,Azure Cosmos DB 會自動恢復可用性區域內的副本,並照常在副本間重新路由流量。

測試區域失敗

Azure Cosmos DB 的可用性區域故障轉移與恢復由 Microsoft 完全管理。 你不需要啟動或驗證可用性區故障流程。

對區域範圍故障的復原能力

當你在單一區域部署 Azure Cosmos DB 帳號時,影響所有 Azure Cosmos DB 節點的區域性中斷通常不會導致資料遺失,但會阻止你的應用程式存取資料。 Azure Cosmos DB 會在受影響區域的服務恢復後恢復資料存取。 只有在該地區發生無法復原的災難時,才會發生資料遺失。

為了準備罕見的區域故障,您可以透過以下方法之一配置 Azure Cosmos DB,以支援不同程度的耐用性與可用性:

下表根據帳戶設定及故障類型,總結了可用的復原選項。 本文後續章節將詳細說明這些選項及其相關行為。

Configuration 停電類型 可用性影響 持久性影響 怎麼辦?
單一地區帳號 區域服務中斷 讀寫存取權會失去,直到服務恢復。 除非該區域發生無法恢復的災難,否則不會有資料遺失。 等待服務恢復或請求從備份的帳號還原到其他區域。
單一寫入區域,多重區域帳號 讀取區域中斷 SDK 會根據偏好區域設定重新導向可用區域。

對於僅使用兩個區域進行強一致性的帳戶,或設有界陳腐度且超出陳腐視窗的情況,除非你將受影響的區域下線,否則寫入可用性也會喪失。
無資料遺失。 確保剩餘區域有足夠的吞吐量。 為了強一致性或有限過期一致性,考慮將受影響的區域下線。
單一寫入區域,多重區域帳號 區域故障(啟用 PPAF) 自動分割層故障轉移;無需人工介入。 如果帳號使用強一致性,就不會有資料遺失。 如果帳號沒有使用強一致性,未複製的資料在該地區發生極不可能的永久性資料遺失事件時可能會丟失。 不需要執行任何動作。 PPAF 會自動管理故障轉移。
單一寫入區域,多重區域帳號 區域寫入故障(無 PPAF) 寫入可用性會喪失,直到區域離線操作或服務管理故障轉移完成。 閱讀持續來自健康地區。 如果帳號使用強一致性,就不會有資料遺失。 如果帳號沒有使用強一致性,在極少數情況下該地區發生永久數據遺失時,未複製的資料可能會遺失。 執行 區域離線操作。 如果啟用了服務管理的故障轉移,Azure Cosmos DB 會自動啟動故障轉移,但這可能需要一小時或更久。 斷線期間不要更改寫入區域。
多重寫入區域帳戶 任何區域故障 透過 SDK 設定自動路由至健康區域;無需人工介入。 失敗區域近期更新的資料可能在其他區域無法取得。 在不太可能發生的情況下,若該地區出現永久性資料遺失,未複製的資料可能會遺失。 確保剩餘區域有足夠的吞吐量。 復原後,Azure Cosmos DB 會自動利用配置的衝突解決方法恢復未複製的資料。
任何帳號設定 資料損壞或意外刪除 不影響可用性。 資料遺失的風險取決於何時偵測到損壞或刪除。 即時還原(連續備份)或從定期備份還原。

Note

本文聚焦於 Azure Cosmos DB 多區域功能的可靠性面向。 多讀寫區域還有其他好處,例如全球分散應用的效能與規模提升。 你應該評估整個解決方案架構,並考慮使用這些功能的所有好處。

SDK 與韌性

Azure Cosmos DB SDK 是您應用程式韌性策略中的重要一環。 當你擁有多區域帳號時,SDK 設定會影響請求在區域間的路由方式,包括優先連接的區域,以及應該排除的區域。 SDK 監控區域與分割區的可用性,並能動態重新配置以使用健康的區域與分割區,例如透過分割層的斷路器。

欲了解更多關於 SDK 如何支援高可用性的資訊,請參閱您所使用該 SDK 的高可用性文件:

區域中斷期間可能的資料遺失

當你在多個區域部署 Azure Cosmos DB 帳號時,資料的持久度取決於你設定的一致性等級。 以下表格詳述了所有一致性等級下,部署於至少兩個區域的 Azure Cosmos DB 帳號的復原點目標(RPO)。 RPO 代表區域中斷期間可能的資料遺失。

一致性層級 區域中斷的 RPO
工作階段、開頭一致、最終 少於 15 分鐘
界限-陳舊 KT
強大 0

K = 項目的版本數目 (也就是更新次數)。

T = 自上次更新後的時間間隔。

針對多區域帳戶,KT 的最小值為 100,000 個寫入作業或 300 秒。 此值會定義使用限定過期時資料的最小 RPO。

如需一致性層級差異的詳細資訊,請參閱 Azure Cosmos DB 中的一致性層級

多個讀取區域與單一寫入區域

如果你的解決方案需要在區域中斷期間持續運作,你可以設定 Azure Cosmos DB 在多個區域複製資料,寫入則由主要區域處理。 你可以選擇性地設定應用程式連接到特定的讀取區域,這有助於提升效能。 如果某地區發生故障,該帳戶仍可在健康區域繼續運作。

圖示,顯示一個Azure Cosmos DB帳戶。區域 A 是寫入與讀取區域,區域 B 是讀取區域。區域 A 的應用程式會對區域 A 的 Azure Cosmos DB 帳號進行讀寫。區域 B 的應用程式會對區域 B 的帳號進行讀取,但寫入時則是區域 A。內部則Azure Cosmos DB會複製區域間的變更。

區域間的故障切換

你可以用優先排序的讀取區域清單來配置 Azure Cosmos DB SDK。 SDK 會將你的應用程式連接到列表中第一個可用的區域。 在讀取區域中斷時,SDK 會透過後端回應碼偵測區域中斷,標記為不可用,並將未來操作導向偏好列表中下一個可用區域。 確保優先區域清單設定正確,且符合您的業務及延遲需求。 詳細指南請參閱 疑難排解 Azure Cosmos DB SDK 可用性

故障轉移是指使您的帳戶中的某個區域完全或部分不可用。 故障轉移的效果取決於該區域是寫入區還是讀取區:

  • 若寫入區域無法使用,另一個區域將成為寫入區域。
  • 若讀取區域無法使用,該區域無法提供讀取請求,其他區域則被用於讀取操作。

Azure Cosmos DB 提供多種故障轉移類型:

  • 每分割區自動故障轉移(PPAF): 內部而言,Azure Cosmos DB 將資料分散在多個實體分割區。 如果支援某分割區的基礎設施出現問題,其他分割區可能不會受到影響。 PPAF 允許單一寫入區域帳戶自動將個別分區的故障轉移到次要區域,同時保持主要區域內的健康分區。 PPAF有助於減少停機時間,並促進部分區域失效時更快的恢復。 欲了解更多資訊,請參閱如何開通並採用適用於 Azure Cosmos DB 的分區自動故障轉移(PPAF)

    Note

    按磁碟分割的自動容錯轉移為公開預覽版。 此功能不提供服務等級協議。 欲了解更多資訊,請參閱 Microsoft Azure 預覽版補充使用條款

  • 強制故障轉移: 你可以將你帳號的其中一個區域下線。 這也稱為 客戶管理故障轉移,或 離線區域 操作。 這是在停電期間快速恢復可用性的推薦方法。 你負責偵測停電並觸發故障轉移。 你也可以使用強制故障轉移來模擬區域失效情境,用於測試,如在災難復原演練時。

    如果你將寫入區域離線,次高優先權的讀取區域就會成為新的寫入區域。 如果你將讀取區域離線,應用程式可以連接到帳號內的其他讀取區域。

    強制切換寫入區域可能會導致未複製的寫入資料遺失。

    強制故障切換後,Microsoft 必須讓該區域重新上線。 對於健康地區,這個過程是自動化的,但可能需要數天時間。 如果區域在一兩天內仍未恢復,請開啟支援案件以尋求協助。

  • 更改寫入區域: 當區域狀況正常時,你可以更改帳號的寫入區域。 這項變更實際上是對您帳戶的寫入區域進行的計畫性故障轉移。

    更改寫入區域不會造成資料遺失,因為資料複製會在新的寫入區域被升階前就已經追上進度。 可能會有短暫中斷,但使用重試邏輯及其他暫態故障處理技術的用戶端通常不會受到重大影響。

    此操作需要區域保持健康狀態, 因此無法在區域停電時使用。

  • Service-managed failover: 當你的帳號使用服務管理故障轉移時,Microsoft 負責決定何時在不同區域間執行故障轉移。 要啟用服務管理故障轉移,請為每個區域指定優先順序。 然而,宣告停電並觸發服務管理故障轉移的過程可能需要相當長的時間——可能長達一小時以上。 為了更快地恢復,請執行強制故障轉移,而非等待由服務管理的故障轉移來觸發。

    如果 Microsoft 對帳號的寫入區域觸發服務管理的故障轉移,任何未複製的寫入可能會遺失。

    在服務管理故障轉移後,Microsoft 必須讓某個區域重新上線。 Microsoft 會自動將該區域上線,但這個過程可能需要好幾天時間。

Requirements

Region support:你可以將任何Azure區域設定為你的 Azure Cosmos DB 帳號的讀取區域。

Cost

在 Azure Cosmos DB 帳號中新增一個讀取區域,會增加每個區域的現有成本。 更多資訊請參閱 Azure Cosmos DB 價格

配置多個讀取區域

容量規劃和管理

如果你的應用程式將請求分散在不同區域,而其中一個區域離線,剩下的區域會面臨更高的請求量。 利用自動擴展吞吐量,根據需求動態調整容量。 如果你使用預配置的吞吐量,請規劃足夠的容量以應對區域失效而不造成服務品質下降,並考慮超額配置。 如需詳細資訊,請參閱 使用過度布建來管理容量

當所有區域都正常時的行為

本節說明當您設定一個擁有多個讀取區域且所有區域皆正常運作的 Azure Cosmos DB 帳號時,會遇到什麼情況。

  • 跨區域作業: 你的應用程式會設定應該接收讀取操作的區域。 你可以設定應用程式的優先區域清單,或排除部分區域。 欲了解更多區域選擇的運作方式,請參閱 多區域環境中診斷與排查 Azure Cosmos DB SDK 可用性

    所有寫入操作都會導向你帳號的寫入區域。

  • 跨區域資料複寫: 所有寫入操作都發生在你帳戶的主要區域。 寫入會根據帳號設定的一致性等級,複製到其他讀取區域。 關於最大複製延遲的資訊,請參閱 區域中斷期間潛在資料遺失

讀取區域失效期間的行為

本節說明當您設定一個擁有多個讀取區域的 Azure Cosmos DB 帳號,且其中一個已讀區域發生故障時,會遇到的情況。

Important

理想情況下,讀取區域中斷應由客戶端處理,透過在 SDK 設定中正確配置偏好 區域清單 。 在正確配置下,SDK 會自動偵測中斷並將讀取操作重新導向下一個可用區域,無需任何服務端故障轉移。

  • 偵測與回應: 偵測故障並回應的責任取決於你帳號使用的故障轉移類型。

    • PPAF: PPAF 通常不適用於讀取區域中斷。 然而,對於一致性強且只有兩個區域的帳號,失去讀取區域會將帳號縮減為單一區域,無法維持動態法定人數。 在這種情況下,PPAF 可以啟動,透過將受影響的分區移至健康區域來維持可用性。

    • 強制故障轉移: 你負責執行強制故障轉移。 詳細步驟請參見 為你的Azure Cosmos DB帳號執行強制故障轉移

      如果你沒有執行故障轉移,則帳戶的行為將取決於其一致性等級:

      • 強一致性:強一致性需要兩個或以上區域維持 動態的法定人數。 如果可用區域少於兩個,且你沒有執行故障轉移,帳號就會失去寫入可用性,直到服務恢復。

      • 有界的陳舊一致性: 有界的陳舊一致性依賴於區域間維持特定的陳舊閾值。 如果區域中斷時間超過閾值,系統就無法維持寫入間的一致性。 如果您不執行故障轉移,帳號將失去寫入功能的可用性,直到服務恢復為止。

    • Service-managed failover: 如果啟用服務管理故障轉移,Microsoft 最終會偵測到故障並啟動你的帳號故障轉移。 然而,這個過程可能需要相當長的時間,甚至一小時以上。 為了更快的恢復,請執行強制故障轉移,而非等待服務管理故障轉移觸發。

  • 活躍請求: 任何活躍的請求可能會被終止,故障轉移完成後需要由客戶端重新嘗試。 如果您的用戶端能透過在短暫延遲後重試而適當處理好暫時性錯誤,通常就能避免產生重大影響。

  • 預期資料遺失: 讀取區域的中斷不會導致資料遺失。 Azure Cosmos DB 持續遵守讀取一致性保證。

  • 預期的停機時間: 你的帳號停機時間長短取決於你使用的故障轉移類型。

    • PPAF: 啟用 PPAF 後,系統會自動偵測並從故障中恢復,通常在 3 分鐘內,無需人工介入。

    • 強制故障轉移: 停機時間取決於:

      • 你發現停電並啟動故障轉移需要多久時間。

      • 故障切換通常需要多少時間,通常只需幾秒鐘。

        警告

        在停電情境下,請勿對受影響區域執行任何設定(控制平面)操作,因為這會導致帳號不一致並延遲恢復。 應避免的控制平面操作範例包括:

        • 更改寫入區域或修改故障切換優先順序
        • 將帳號更新為多重寫入設定
        • 更新一致性等級或其他帳號設定
        • 更新私有端點設定或網路設定
        • 更新帳號吞吐量或擴展操作
        • 任何其他會修改帳號設定或區域設定的操作
    • Service-managed failover: Microsoft 負責啟動服務管理故障轉移,而您的帳戶停機時間取決於 Microsoft 宣告中斷並啟動故障轉移所需的時間。 在某些情況下,可能需要一小時以上。 如果你的帳戶出現寫入中斷,需要快速恢復寫入的可用性,請強制切換。

  • 重新劃分: 對於強制故障轉移或服務管理故障轉移,受影響區域會被斷線並標記為離線。

    不需要對應用程式的程式碼做任何變更來處理讀取區域中斷。 Azure Cosmos DB SDK 的 會將讀取操作重新導向到偏好區域列表中下一個可用的區域。 若首選區域列表中的區域皆不可用,讀取操作會自動回退到服務中設定的帳號目前寫入區域。

    Note

    如果你使用私有端點並使用 Azure Cosmos DB 帳號,請確保私有 DNS 在離線區域操作後路由正確。 如需詳細指引,請參閱 私有端點的故障轉移考慮

寫入區域失效時的行為

本節說明當您設定一個擁有多個讀取區域的 Azure Cosmos DB 帳號,且帳號的寫入區域出現故障時,會遇到的情況。

  • 偵測與回應: 偵測故障並回應的責任取決於你帳號使用的故障轉移類型。

    • PPAF: Microsoft 會自動偵測中斷,並在適當情況下啟動部分分割區的故障轉移。 你的申請不需要採取任何行動。

    • 強制故障轉移: 你必須負責執行強制故障轉移。 詳細步驟請參見 為你的Azure Cosmos DB帳號執行強制故障轉移

      如果你沒有執行故障轉移,帳戶會失去寫入權限,直到服務恢復正常。

      如果你的帳號寫入區域中斷,避免執行 變更寫入區域 操作。 如果來源或目的區域中斷,寫入區域變更是無法成功的。 原因在於區域變更程序包含一致性檢查,需要區域間的連結性。

    • 服務管理的故障轉移: Microsoft 會自動偵測到服務中斷並啟動您的帳戶故障轉移。 你的申請不需要採取任何行動。

  • 活躍的請求: 任何活躍的請求可能會被終止,並且在故障轉移完成後,客戶端需要重新嘗試。 如果您的用戶端能透過在短暫延遲後重試而適當處理好暫時性錯誤,通常就能避免產生重大影響。

  • 預期資料遺失: 如果你設定帳號有強一致性,就不會發生資料遺失。 否則,任何未複製的寫入在故障轉移完成後可能會遺失。 關於區域中斷期間預期最大資料遺失的資訊,請參見 區域中斷期間潛在資料遺失

  • 預期的停機時間: 你的帳號停機時間長短取決於你使用的故障轉移類型。

    • PPAF: 啟用PPAF時,通常會有短暫的中斷,大約3分鐘左右。

    • 強制故障轉移: 停機時間取決於:

      • 你發現停電並啟動故障轉移需要多久時間。
      • 故障切換需要多長時間,通常只需幾秒鐘。

    警告

    在停電情境下,請勿對受影響區域執行任何控制平面操作,因為這會導致帳戶不一致並延遲恢復。 應避免的控制平面操作範例包括:

    • 更改寫入區域或修改故障切換優先順序
    • 將帳號更新為多重寫入設定
    • 更新一致性等級或其他帳號設定
    • 更新私有端點設定或網路設定
    • 更新帳號吞吐量或擴展操作
    • 任何其他會修改帳號設定或區域設定的操作
    • Service-managed failover: 由 Microsoft 負責啟動服務管理故障轉移。您帳戶的停機時間取決於 Microsoft 宣告中斷和啟動故障轉移所需的時間。 在某些情況下,可能需要一小時以上。 為了快速恢復寫入功能的可用性,請執行強制故障轉移操作。
  • 重新劃分: 寫入流量重新分佈取決於您的帳戶使用的故障轉移類型。

    • PPAF: Azure Cosmos DB 會自動將不健康的分割區轉移到健康的區域。

    • 強制故障轉移: 當你執行強制故障轉移時,帳號的寫入區域會變成你指定的區域。

    Note

    如果你使用私有端點並使用 Azure Cosmos DB 帳號,請確保私有 DNS 在離線區域操作後路由正確。 如需詳細指引,請參閱 私有端點的故障轉移考慮

    • Service-managed failover: Azure Cosmos DB 會自動將帳號的一個次要區域升格為新的主要寫入區域。 容錯移轉會依您指定的區域優先順序,在另一個區域進行容錯移轉。

區域復原

Microsoft 必須讓一個區域重新上線。 當區域在中斷後恢復時,Microsoft 會自動將該區域重新啟用。 然而,這個過程可能需要數天時間。

Important

強制切換後,Microsoft 會自動讓健康的區域恢復正常運作。 如果區域在一兩天內仍未恢復,請開啟支援個案以申請協助。

區域上線後,你採取的操作會根據斷線是在讀取區還是寫入區而有所不同。

  • 讀取區域斷線後: 當受影響的區域重新上線時,會先與目前的寫入區域同步,並在完全追上後再次可用來提供讀取請求。 後續的讀取會被重新導向至復原的區域,不需要對應用程式的程式碼做任何變更。 在容錯移轉及重新加入先前失敗的區域期間,Azure Cosmos DB 會繼續遵守讀取一致性保證。

  • 寫入區域中斷後: 當受影響區域恢復上線時,該區域在 Azure 入口網站中顯示為「在線」,並且就成為讀取區域。 此時,可以安全地 將寫入區域改回恢復的區域

    Important

    恢復的區域 不會自動升格回寫入區域 。 一旦確定安全後,你有責任把恢復後的區域重新設為寫入區域。

    在更改寫入區域之前、期間或之後, 都不會有資料或可用性損失 。 應用程式可繼續保有高可用性。

    如果在區域離線前沒有重複寫入,你可以從 衝突訂閱源讀取未複製的寫入。 你的應用程式可以讀取衝突資料,根據應用程式特定的邏輯解決衝突,並適時將更新的資料寫回容器。

區域故障測試

即使你的 Azure Cosmos DB 帳號高度可用,你的應用程式也可能無法正確處理區域故障轉移。 若要在應用程式測試或災害復原 (DR) 演練期間,測試應用程式的端對端高可用性,請暫時停用帳戶的服務管理容錯移轉。 使用 PowerShell、Azure CLI 或 Azure portal 呼叫強制故障轉移,然後監控你的應用程式。 完成測試後,當該區域自動恢復上線時,你可以切換回主要區域,然後恢復該帳號的服務管理故障轉移。 如果區域在一兩天內仍未恢復,請開啟客服申請協助。

如果你的帳號使用 PPAF,可以模擬分區故障轉移。 欲了解更多資訊,請參閱測試PPAF設置(模擬故障)。

多重寫入區域

您可以設定 Azure Cosmos DB 來接受多個區域中的寫入。 此配置能提供非常高的區域中斷韌性。 它也有助於在地理分散的應用中降低寫入延遲。

圖示,顯示一個Azure Cosmos DB帳戶。區域 A 和區域 B 都是寫入和讀取區域。區域 A 的應用程式會對區域 A 的 Azure Cosmos DB 帳號進行讀寫。區域 B 的應用程式會對區域 B 的 Azure Cosmos DB 帳號進行讀寫。內部則Azure Cosmos DB非同步地複製區域間的變更。

當 Azure Cosmos DB 帳戶已設定多重寫入區域時,不支援強式一致性且可能會發生寫入衝突。 樞紐區域在寫入衝突中扮演仲裁者的角色。 如需有關如何解決這些衝突的詳細資訊,請參閱使用多個寫入區域時的衝突類型和解決原則

考慮你應用程式的設計以及它如何處理多個寫入區域非常重要。 回顧多區域寫作的最佳實務

Requirements

Region support: 你可以將任何Azure區域設定為你的 Azure Cosmos DB 帳號的讀寫區域。

Cost

在 Azure Cosmos DB 帳號新增一個寫入區域,會增加每個區域的現有成本。 更多資訊請參閱 Azure Cosmos DB 價格

設定多個寫入區域

你可以在建立帳戶時或帳號建立後的任何時候設定多個寫入區域。 欲了解更多資訊,請參閱 「配置多個寫入區域」。

要有效使用多個寫入區域,應用程式也需要適當配置。 請參見在使用 Azure Cosmos DB 的應用程式中配置多區域寫入。

容量規劃和管理

如果你的應用程式將請求分散在不同區域,而其中一個區域離線,剩下的區域會面臨更高的請求量。 利用自動擴展吞吐量,根據需求動態調整容量。 如果你使用預配置吞吐量,請規劃足夠的容量以應對區域流失而不會造成服務降級,並考慮過度配置。 如需詳細資訊,請參閱 使用過度布建來管理容量

當所有區域都正常時的行為

本節說明當你配置一個擁有多個寫入區域且所有區域皆可運作的 Azure Cosmos DB 帳號時,會遇到什麼情況。

  • 跨區域作業: 當帳號設定多個寫入區域時,應用程式會設定應該用於讀寫操作的區域。 你可以設定應用程式的優先區域清單,或排除部分區域。 欲了解更多區域選擇的運作方式,請參閱 多區域環境中診斷與排查 Azure Cosmos DB SDK 可用性。 欲了解如何配置您的應用程式,請參閱 在使用 Azure Cosmos DB 的應用程式中配置多區域寫入。

  • 跨區域資料複寫: 資料在區域間以非同步方式複製。 複製延遲取決於帳號的一致性等級。 你無法在多地區寫入操作時使用強一致性。 欲了解更多資訊,請參閱 區域中斷期間潛在資料遺失

    當帳號設定多個寫入區域時,不同區域的應用程式可能會做出相互衝突的變更。 Azure Cosmos DB 提供衝突解決功能。 欲了解更多資訊,請參閱 使用多重寫入區域時的衝突類型與解決政策。 欲了解如何設定您自己的衝突解決政策,請參閱Azure Cosmos DB<>中的管理衝突解決政策。

    Note

    頻繁更新相同文件 ID,或在 TTL 到期或刪除後頻繁重建,會因系統衝突增加而負面影響複製效能。

區域失敗期間的行為

本節說明當您設定一個擁有多個寫入區域的 Azure Cosmos DB 帳號,且帳號的讀寫區域出現故障時,會發生什麼情況。

  • 偵測與回應: 你的應用程式偵測到該區域的遺失。 Azure Cosmos DB SDK 提供自動區域選擇功能,將讀寫操作路由到健康的區域。
  • 目前的請求: 任何正在進行的請求可能會被終止,客戶端在故障轉移程序完成後需要重新嘗試。 如果您的用戶端能透過在短暫延遲後重試而適當處理好暫時性錯誤,通常就能避免產生重大影響。

  • 預期資料遺失: 最近更新的資料可能在其他地區無法取得。 關於區域中斷期間預期最大資料遺失的資訊,請參見 區域中斷期間潛在資料遺失。 在不太可能的情況下,如果受影響的區域發生永久性資料遺失,你可能會遺失未複製的資料。

  • 預期的停機時間: 在多重寫入配置中,只要 SDK 正確配置為ApplicationRegionsPreferredRegions,就不會有預期的停機時間。

    提示

    為了達到最佳效果,全球分散式應用程式應由全球負載平衡服務作為前端,例如 Azure Front Door 或 Azure 流量管理員。 這些服務能偵測區域劣化,並自動將流量路由至健康區域內的應用程式實例。

  • Redistribution: Azure Cosmos DB SDK 會自動偵測該區域狀況不佳,並將讀寫操作重新導向到偏好區域列表中下一個可用區域。 申請碼不需要更改。

    提示

    如果你的應用程式是由 Azure Front Door 或 Traffic Manager 作為前端,這些服務也會偵測區域性降級並將流量導向健康的區域。

區域復原

當受影響的區域重新上線時,該區域會在 Azure 入口網站中顯示為「在線」,並重新開放。

任何在區域失敗時未被複製的寫入資料,都會透過 衝突摘要提供。 應用程式可以讀取衝突摘要,根據應用程式的特定邏輯解決衝突,再視情況將更新後的資料寫回 Azure Cosmos DB 容器。

區域故障測試

要測試多區域寫入故障轉移情境,你可以使用 強制故障轉移讓寫入區域離線。 這個過程模擬區域故障,你可以觀察應用程式的反應。

備份與還原

針對大部分的解決方案,您不應該只依賴備份。 請改用本指南中所述的其他功能來支持復原需求。 不過,備份可防範其他方法未發生的一些風險。 欲了解更多資訊,請參閱冗餘、複寫與備份是什麼?

在您的應用程式中,資料遺失可能因意外刪除或其他導致資料損毀的問題而發生。 使用單一區域帳號時,也可能因 Azure Cosmos DB 區域無法恢復的災難而導致資料遺失。 為了協助你防範資料遺失,Azure Cosmos DB 提供了一套備份與還原功能。 你可以根據可恢復性需求和成本需求來設定備份和保留。 如需詳細資訊,請參閱 Azure Cosmos DB 中的線上備份與隨選資料還原 (部分機器翻譯)。

服務維護的韌性

Azure Cosmos DB 透明管理各個運算節點的所有細節,並自動執行修補及其他類型的計畫性維護。 Azure Cosmos DB 的可用性與延遲 SLA 適用於系統執行的所有自動維護操作。

服務等級協定

Azure 服務的服務層級協議(SLA)描述了每項服務的預期可用性,以及您的解決方案必須符合的條件,以達成該可用性預期。 欲了解更多資訊,請參閱線上服務的服務等級協議

Azure Cosmos DB 提供多種配置與服務特性的 SLA,包括可用性、延遲、吞吐量及一致性。

可用性SLA會根據你是否使用以下任何產品功能而有所不同:

  • 預設吞吐量
  • 支援可用性區域的單一區域帳戶(區域冗餘)
  • 使用多個讀取區域的帳號
  • 使用多個寫入區域的帳號(業務關鍵層)