Mar*_*ark 26 concurrency counter atomic increment amazon-dynamodb
我正考虑在我的应用程序中使用Amazon DynamoDB,我对其原子计数器的可靠性有疑问.
我正在构建一个分布式应用程序,它需要同时并一致地增加/减少存储在Dynamo属性中的计数器.我想知道Dynamo的原子计数器在一个繁重的并发环境中是多么可靠,其中并发级别非常高(例如,平均速率为20k并发命中率 - 获得这个想法,这将是近52亿增量/每月递减).
柜台应该是超级可靠的,永远不会错过任何一个.有人在这样的关键环境中测试了DynamoDB吗?
谢谢
小智 18
DynamoDB通过在多个服务器之间拆分密钥来获得它的扩展属性.这类似于Cassandra和HBase等其他分布式数据库的规模.虽然您可以增加DynamoDB的吞吐量,只需将数据移动到多个服务器,现在每个服务器都可以处理总并发连接数/服务器数.请查看他们的常见问题解答,了解如何实现最大吞吐量(http://aws.amazon.com/dynamodb/faqs/#Will_I_always_be_able_to_achieve_my_level_of_provisioned_throughput)
这意味着拥有一个直接递增的密钥将无法扩展,因为该密钥必须位于一台服务器上.还有其他方法可以解决这个问题,例如在内存聚合中使用DynamoDB的刷新增量(虽然这可能存在可靠性问题)或分片计数器,其中增量分布在多个键上,并通过拉动分片中的所有键来回读counter(http://whynosql.com/scaling-distributed-counters/).
除了gigq关于可伸缩性的答案之外,DynamoDBs的原子增量不是幂等的,因此不可靠:如果在发出UpdateItem ADD请求后连接断开,您无法知道添加是否已提交,因此您不知道是否你应该重试或不重试.
DynamoDB条件更新解决了这个问题,代价是使系统的可伸缩性降低,因为每次同时尝试对属性进行两次更改时,即使没有错误,也必须重试.
| 归档时间: |
|
| 查看次数: |
21678 次 |
| 最近记录: |