DynamoDB 条件检查失败监控

DynamoDB Conditional Check Fail Monitoring

我已使用 dynamodb-session 为 Asp.net 会话状态提供程序设置 DynamoDB。

在我的 ASP.NET_SessionState table 在 DynamoDb 有"Conditional CheckFailed "监控

我的问题是: 在什么情况下会发生这些异常,我该如何减少它们?

一般来说,条件检查是DynamoDB提供的乐观并发控制机制。基本思想是每个写请求都可以指定要写入的项目的条件,该条件必须为真才能使写入成功。 This section 的 AWS DynamoDB 文档更多地讨论了条件写入。每当对写入的条件检查失败时,DynamoDB 都会抽取一个指标以进行监控。

ASP.NET Session-State Store Provider documentation talks about concurrency control that needs to be implemented to prevent concurrency issues between requests that may be trying to access session information. From the description, it seems like contention occurs when you have concurrent requests with some of those requests having EnableSessionState property set to True (which means they intend to update the session state). In this case, each request will have to first acquire a lock on the session by performing a conditional write to DynamoDB (as seen in the DynamoDBSessionState code 的 'Locking Session Data Store' 部分)。这些并发请求中只有一个会成功。其他请求将失败(导致条件检查失败指标被抽出),然后等待半秒,然后通过写入 DynamoDB 重试获取锁。这个等待、失败、抽取指标和重试的过程一直持续到所有请求都得到满足。请注意,作为读取者的请求(EnableSessionState 属性 设置为 ReadOnly)也必须等待写入者释放他们的锁才能继续。唯一的区别是读者不会通过写入 DynamoDB 来获取锁。

基于此,唯一没有争用的方法是将所有并发请求的 EnableSessionState 设置为 False 或 ReadOnly。