一致性策略與 DB replicate
接著我們看一下 Cosmos DB 的其他功能:
1. 調整一致性策略:
在分散式系統中常會發生資料不一致的問題,因為 Cosmos DB 預設是多個地區分佈的,所以也會遇到此問題。一般常見的一致性的演算法如:PBFT、Paxos、Raft 等等。
在我們使用 Apache 動物園系列服務時會使用 Zookeeper 來解決相關一致性問題,而 Cosmos DB 內建了幾種一致性策略可以讓我們直接選擇使用。
可以在設定的 Default consistency 調整。 
可以參考下圖,查看每個層級的關係: 
或是在程式內設定一致性策略,覆蓋預設:
// Override consistency at the client level
const client = new CosmosClient({
/* other config... */
consistencyLevel: ConsistencyLevel.Strong
});
// Override consistency at the request level via request options
const { body } = await item.read({ consistencyLevel: ConsistencyLevel.Eventual });或是使用 session consistency 的方式,每次讀取或寫入請求時都會重新給予SessionToken,讓你重新設定一致性策略。
主要為使用
x-ms-session-tokenHeader``` // Get session token from response const { headers, item } = await container.items.create({ id: "meaningful-id" }); const sessionToken = headers["x-ms-session-token"];
// Immediately or later, you can use that sessionToken from the header to resume that session. const { body } = await item.read({ sessionToken });
const database = client.database(this.databaseName); const { container: udpContainer } = await database.containers.createIfNotExists( { id: this.udpContainerName, conflictResolutionPolicy: { mode: "Custom", conflictResolutionProcedure: dbs/${this.databaseName}/colls/${ this.udpContainerName }/sprocs/resolver } } );
```
發送一個 GET 請求給如上的 Endpoint,可再回傳的 Header 中看到
x-ms-resource-quota和x-ms-resource-usage,有關 filter 可參考:https://docs.microsoft.com/en-us/rest/api/monitor/filter-syntax
Last updated
Was this helpful?