我已使用dynamodb-session爲DynamoDB設置Asp.net會話狀態提供程序。DynamoDB條件檢查失敗監控
在我的DynamoDb的ASP.NET_SessionState表中 有「Conditional CheckFailed」監視。
我的問題是: 在什麼情況下會發生這些異常,我該如何減少它們?
我已使用dynamodb-session爲DynamoDB設置Asp.net會話狀態提供程序。DynamoDB條件檢查失敗監控
在我的DynamoDb的ASP.NET_SessionState表中 有「Conditional CheckFailed」監視。
我的問題是: 在什麼情況下會發生這些異常,我該如何減少它們?
一般來說,條件檢查是由DynamoDB提供的樂觀併發控制機制。基本思想是每個寫入請求都可以指定正在寫入的項目的條件,寫入成功時必須爲真。 AWS DynamoDB文檔的This section討論了有關條件寫入的更多信息。只要對寫入進行條件檢查失敗,DynamoDB就會出於度量目的而抽取度量標準。
ASP.NET Session-State Store Provider documentation的'鎖定會話數據存儲'部分討論了需要實施的併發控制,以防止嘗試訪問會話信息的請求之間發生併發問題。從描述中可以看出,如果有一些請求的EnableSessionState屬性設置爲True(意味着它們打算更新會話狀態)併發請求,就會發生爭用。在這種情況下,每個請求必須首先通過對DynamoDB執行有條件寫入才能獲得會話鎖定(如DynamoDBSessionState code所示)。這些併發請求中只有一個會成功。其他請求將失敗(導致一個條件檢查失敗指標被傳輸),然後等待半秒鐘,然後重試以通過寫入DynamoDB來獲取鎖定。這個等待,失敗,泵送度量和重試的過程會一直持續到所有請求都已完成。請注意,讀者請求(EnableSessionState屬性設置爲ReadOnly)也必須等待編寫者釋放他們的鎖之後才能繼續。唯一的區別是讀者不通過寫入DynamoDB而獲得鎖定。
基於此,唯一沒有爭用的方法是將所有具有EnableSessionState的併發請求設置爲False或ReadOnly。
謝謝!這真是很好的解釋。 – Forooz
沒問題。你能將答案標記爲正確答案嗎? –