分布式系统中 REST API 的幂等性和竞争条件

问题描述 投票:0回答:1

有什么可能的替代解决方案来实现幂等性并处理竞争条件。

对于前。考虑将客户添加到记录系统的请求。客户详细信息将以电子邮件 ID 作为关键属性。假设有 API 来创建客户。

考虑一种情况,由于来自客户端的重复请求,在时间 T1,两个请求可能会到达服务器,为前“[电子邮件受保护]”的相同电子邮件 ID 创建客户。

请求 1,时间 T1,电子邮件 ID“[电子邮件受保护]” 请求 2,时间 T1,电子邮件 ID“[电子邮件受保护]

我一直在寻找分布式系统如何处理 REST API 调用上的幂等性和竞争条件的方法?我知道有不同的方法,例如,

  • 数据库约束
  • 分布式锁

数据库对列电子邮件 ID 的约束,可以轻松解决这个问题。还可以选择分布式锁或使用 no-sql 方法在将记录存储之前检查缓存中的电子邮件 ID。

考虑到分布式特性,还有哪些其他可扩展方法?

为什么要避免约束,因为它会对索引、性能和规模产生影响。

rest distributed-computing race-condition distributed-system idempotent
1个回答
0
投票

幂等性是为了处理意外的重复性,即客户端在不知道前一个请求的状态的情况下重试相同的请求,最好将幂等性逻辑排除在您的业务逻辑之外,如果您使用的是nodejs,请检查这些包

https://www.npmjs.com/package/@node-idempotency/nestjs

https://www.npmjs.com/package/@node-idempotency/express

https://www.npmjs.com/package/@node-idempotency/fastify

无论哪种方式,数据库约束都是处理并发非重复(即 2 个用户试图声明用户名或电子邮件)请求所必需的。

© www.soinside.com 2019 - 2024. All rights reserved.