DynamoDB条件检查失败监控

时间:2015-06-17 15:44:54

标签: c# asp.net amazon-web-services session-state amazon-dynamodb

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

在DynamoDb中的ASP.NET_SessionState表中 有“条件CheckFailed”监控。

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

1 个答案:

答案 0 :(得分:2)

一般来说,条件检查是DynamoDB提供的乐观并发控制机制。基本思想是每个写入请求都可以指定正在写入的项目的条件必须为true才能使写入成功。 AWS DynamoDB文档的This section详细介绍了条件写入。每当对写入的条件检查失败时,DynamoDB都会为监控目的抽取一个度量标准。

ASP.NET Session-State Store Provider documentation的“锁定会话数据存储”部分讨论了需要实现的并发控制,以防止可能尝试访问会话信息的请求之间的并发问题。从描述中可以看出,当您将某些请求的EnableSessionState属性设置为True(这意味着他们打算更新会话状态)时,会发生争用。在这种情况下,每个请求必须首先通过对DynamoDB执行条件写入来获取会话锁定(如DynamoDBSessionState code中所示)。这些并发请求中只有一个会成功。其他请求将失败(导致条件检查失败度量标准被泵送),然后等待半秒,然后通过写入DynamoDB重试获取锁定。这个等待,失败,抽取度量和重试的过程一直持续到所有请求都已完成为止。请注意,作为读取器的请求(EnableSessionState属性设置为ReadOnly)也必须等待编写器释放锁定才能继续。唯一的区别是读者没有通过写入DynamoDB获得锁定。

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