从awslab模拟基于java的dynamodbclient的Python库
python-dynamodb-lock-whatnick的Python项目详细描述
Python DynamoDB锁
这是目前未维护(2年)的Python DynamoDB Lock的一个分支 项目。本着开源的精神,whatnick在一定时间内保持这一点。 任何针对这个项目的增强都可以发送到这里。在
这是一个建立在DynamoDB之上的通用分布式锁库。它是沉重的 “灵感”来自基于java的AmazonDynamoDBLockClient 库,并支持粗粒度和细粒度锁定。在
- 免费软件:Apache软件许可证2.0
- 文档:https://python-dynamodb-lock-whatnick.readthedocs.io
- 源代码:https://github.com/whatnick/python_dynamodb_lock
特点
- 获取命名锁-具有可配置的重试语义
- 定期检测/更新锁以使其保持活动状态
- 如果在可配置的租约期限内没有心跳信号,则自动释放锁
- 如果锁被盗或离租约到期太近,则通知应用回调函数
- 存储任意应用程序数据以及锁
- 使用单调递增时钟,以避免由于时钟偏移和/或DST等引起的问题
- 在可配置的过期期后自动删除数据库条目
一致性注释
请注意,虽然锁本身可以提供相当强的一致性保证,但它没有 参与任何分配的事务。在
例如,您可能希望为某个客户id“xyz”获取一个锁,然后进行一些更改 ,然后释放锁-从而 保证一次只有一个进程更改任何给定的客户id。在
虽然幸福之路看起来还不错,但考虑一下应用程序更改需要很长时间的情况, 一些错误/gc暂停会阻止heartbeat更新锁。然后,另一个客户 可以假设该锁被放弃,并开始并行处理同一个客户。原来的 锁客户端将识别出它的锁已被“偷走”,并将通过回调通知应用程序 事件,但应用程序可能已将其更改提交到数据库。这只能通过 将应用程序更改和锁释放作为单个分布式事务的一部分, 如前所述,不支持。在
也就是说,在大多数情况下,心跳预期不会延迟到锁的租约之后 持续时间,实现应该可以正常工作。在
请参考Martin Kleppmann关于此主题的一篇优秀文章: https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html
学分
- AmazonDynamoDBLockClient:https://github.com/awslabs/dynamodb-lock-client
- 厨师长:https://github.com/audreyr/cookiecutter
- Python:https://github.com/audreyr/cookiecutter-pypackage
历史
0.9.3(2020年7月14日)
- 通过CI从whatnick分叉释放
0.9.2(2020-07-13)
- 从whatnick手册分叉释放
0.9.1(2019-10-29)
- 主存储库第二版
0.9.0(2018-10-28)
- PyPI的第一个版本。在
- 项目
标签: