【发布时间】:2022-01-30 01:31:15
【问题描述】:
我需要在 aws 中实现一种票务系统,仅使用无服务器技术。该功能需要有点像邮局的数字系统:你拿一张票,上面有一个号码。作为请求者,您知道自己的号码。滚动移动,下一位客户得到一个加一的数字。此票证将由 lambda 函数中的处理程序请求,该函数可以并行调用。我知道这听起来像是全局锁,确实如此,但这是要求 - 请不要告诉我重新设计我的用例,这样就没有必要了。
非功能性需求:
- 应该是全局一致的
- 应该是高性能的,即。每秒可能有数百个或理想情况下数千个请求
- 一致:没有重复的数字
- 失败是可以的,重试是可以的,只要保持一致性。
我尝试过的:
- Dynamodb:我使用 go sdk 和这个
"cirello.io/dynamolock"包实现了一个分布式锁。它可以工作,但锁定/解锁周期需要 700 毫秒 - 太慢了。 - 还有 Dynamodb:我在
an UpdateItem调用中使用了UpdateExpression和ReturnValues,但在数据中心内仍然只有 125/秒。 - 弹力痛。无法让它工作,因为设置 VPC 以连接 lambda 的复杂性,然后失去与 dynamodb 的连接。我听说您可以使用 NAT 网关解决此问题,但到那时,您的无服务器框架应用程序开始看起来非常复杂,对于计数器而言非常复杂。
【问题讨论】:
-
关于 VPC 连接的注意事项:您只需要一个 dynamodb vpc 端点:docs.aws.amazon.com/amazondynamodb/latest/developerguide/…。无需设置 NAT 网关。
标签: amazon-web-services amazon-dynamodb mutex amazon-elasticache