分布式的几件小事(七)分布式系统接口的幂等性如何保证

1.幂等性

所谓幂等性,就是说一个接口,多次发起同一个请求,你这个接口得保证结果是准确的,比如不能多扣款,不能多插入一条数据,不能将统计值多加了1。这就是幂等性。

2.如何保证幂等性

①对于每个请求必须有一个唯一的标志,比如订单支付请求,必须要包含订单的id,一个id只能支付一次。

②每次处理完请求之后,必须要有一个记录标识这个请求已经处理过了,比如最常见的是在mysql中记录一个状态,比如支付前先插入一条这个订单的支付流水,而且支付流水采用唯一约束,只有插入成功才进行支付。

③每次接受到请求之后需要先判断之前是否已经处理过,比如一条订单已经支付了,那么就一定会有支付流水,如果存在就表示已经支付过了。

在实际操作中,可以结合自己的业务,比如说用redis用orderId作为唯一键。只有成功插入这个支付流水,才可以执行实际的支付扣款。你就可以写一个标识到redis里面去,set order_id payed,下一次重复请求过来了,先查redis的order_id对应的value,如果是payed就说明已经支付过了,你就别重复支付了。

转载于:https://www.cnblogs.com/jack1995/p/10922031.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在设计分布式系统接口幂等性时,可以采取以下策略: 1. 使用唯一标识符:为每个请求生成唯一的标识符(例如UUID),将该标识符作为请求的一部分,在服务端进行幂等性校验时使用。服务端可以通过记录已处理请求的标识符,避免对同一请求的重复处理。 2. 幂等性检测:在服务端对接口请求进行处理之前,检测该请求是否已经被处理过。可以通过查询数据库、缓存或日志等方式来判断该请求是否已经被处理。如果已经被处理过,则直接返回之前的结果,避免重复处理。 3. 乐观锁机制:在处理接口请求时,使用乐观锁来保证操作的原子性和幂等性。通过在数据记录中添加版本号或时间戳等字段,当多个请求并发操作同一数据时,只有一个请求能够成功执行,其他请求会失败并返回适当的结果。 4. 幂等性响应标识:在接口响应中返回一个唯一的标识符,该标识符可以用于客户端判断该请求是否已经被成功处理过。客户端可以保存该标识符,并在后续的请求中将该标识符传递给服务端,以确保幂等性。 5. 事务处理:在进行涉及状态更新的操作时,使用事务来保证操作的原子性和幂等性。如果操作失败,事务会回滚到之前的状态,避免对同一请求的重复处理。 以上是一些常见的设计策略,可以根据具体系统的需求和特点选择适合的幂等性设计方式。同时,还需要注意在接口文档中明确指定接口幂等性要求,以便开发人员正确使用和处理接口

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值