瞭解 Azure Cosmos DB 中的多區域寫入

適用於:NoSQL MongoDB Cassandra Gremlin

若要在部分或完全中斷案例中達成接近零的停機時間,其中一致性不需要保證讀取,最好的方法是設定您的帳戶以進行多區域寫入。 本文涵蓋設定多區域寫入帳戶時要注意的重要概念。

中樞區域

在具有兩個或多個區域的多區域寫入資料庫帳戶中,建立帳戶的第一個區域稱為「中樞」區域。 然後新增至帳戶的其他所有區域稱為「附屬」區域。 如果中樞區域已從帳戶中移除,則會自動選擇下一個區域,依新增的順序選擇為中樞區域。

抵達衛星區域的任何寫入會在本機區域中認可仲裁,然後稍後以異步方式傳送至中樞區域以進行 衝突解決。 一旦寫入至中樞區域並解決衝突,它就會變成「已確認」的寫入。 在此之前,它稱為「暫定」寫入或「未確認」的寫入。 從中樞區域提供的任何寫入會立即變成已確認的寫入。

了解時間戳

多重區域寫入帳戶中的主要差異之一,就是每個實體之間有兩個相關聯的伺服器時間戳值。 第一個是在該區域中寫入實體的伺服器 Epoch 時間。 此時間戳可在單一區域寫入和多區域寫入帳戶中使用。 第二個伺服器時間戳值與確認不存在衝突的 Epoch 時間相關聯,或衝突已在中樞區域中解決。 已確認或衝突解決的寫入已指派衝突解決時間戳(crts),而未確認或暫定寫入則沒有 crts。 伺服器所設定的 Cosmos DB 中有兩個時間戳。 主要差異在於帳戶的區域組態是單一寫入或多寫入。

時間戳記 意義 公開時
_ts 寫入實體的伺服器 Epoch 時間。 一律由所有讀取和查詢 API 公開。
crts 解決多寫入衝突或未確認衝突的 Epoch 時間。 針對多寫入區域組態,此時間戳會定義連續備份和變更摘要的變更順序:

  • 用來尋找變更摘要要求的開始時間
  • 用於變更摘要回應中的排序順序。
  • 用來排序連續備份的寫入
  • 記錄備份只會擷取已確認或衝突解決的寫入,因此連續備份的還原結果只會傳回已確認的寫入。
只有在要求啟用「新線模型」時,才會公開以響應變更摘要要求。 這是 [所有版本] 的 預設值,並刪除 [變更摘要] 模式。

下一步

接下來,您可以閱讀下列文章: