2016-04-26 56 views
2

我想了解當通過.NET客戶端SDK使用Azure DocumentDb時,會話一致性實際上意味着什麼,即什麼定義(和界限)會話。每次創建DocumentClient的新實例時是否創建了一個新會話?如果我們使用IReliableReadWriteDocumentClient包裝器,行爲會發生變化嗎?會話一致性和.NET客戶端SDK

感謝

回答

5

是的,一個新的會話創建的每個DocumentClient類的新實例時創建的。每個DocumentClient實例都維護一個集合 - >會話標記映射的映射。客戶端保存從服務器接收到的最新會話令牌,並在讀取請求期間將其作爲頭部(x-ms-sessiontoken)回顯。這使DocumentDB能夠定位集合的最新副本以提供會話(或讀寫)一致性。這與IReliableReadWriteDocumentClient相同,因爲它是對DocumentClient的封裝。

注意:實現會話一致性的最簡單方法是讓一個DocumentClient實例自動爲您管理它。您還可以跨多個DocumentClient實例管理邏輯會話,但複雜性稍高一些。例如,假設您有一個負載平衡的Web API,其中每個服務器都有一個DocumentClient實例,並且您希望跨這些服務器保持會話一致性。

  1. 客戶寫道 - >應用服務器1 - > DocumentDB
  2. 客戶端讀取 - >應用服務器2 - > DocumentDB

可以通過保存在實現這個X-MS-sessiontoken步驟返回1將其作爲cookie保存在客戶端中,然後在讀取請求中回顯x-ms-sessiontoken。通過對會話令牌進行往返,您可以獲得會話一致性。

+0

哇 - 謝謝。這裏缺乏Azure文檔有時令人沮喪。所以當人們喜歡你花時間來解釋事情時,它會有所幫助。 – Andy