什么是幂等?如何保证接口幂等性?

1、什么是幂等?

        幂等其实是在数学中提出的一个概念,对应到程序中,幂等就是说方法被多次重复执行时,所产生的影响和第一次执行时所产生的影响是相同的(程序中指的幂等性,其实一般是指业务上幂等)。

2、为什么要考虑幂等性?

        在网络通信中,存在两种行为,可能会导致接口被重复调用:

  • 用户的重复提交或者用户的恶意攻击,导致这个请求会被多次重复执行
  • 在分布式架构中,为了避免网络通信导致的数据丢失,在服务之间进行通信的时候都会设计超时重试的机制,而这种机制有可能会导致服务端接口被重复调用

注:上述两个场景,场景一中需不需要考虑幂等,是需要根据产品提出的需求来考虑的(例如,一个用户,连续下两个一样的订单,在一些业务中是完全合理的)

3、如何保证接口幂等性?

方案:

  • 使用数据库的唯一约束实现幂等,比如对于数据插入类的场景,比如创建订单,因为订单号肯定是唯一的,所以如果是多次调用就会触发数据库的唯一约束异常,从而避免一个请求创建多个订单的问题
  • 使用redis里面提供的setNX指令,比如对于MQ消费的场景,为了避免MQ重复消费导致数据多次被修改的问题,可以在接收到MQ的消息时,把这个消息通过setNX写入到redis里面,一旦这个消息被消费过,就不会再次消费
  • 使用状态机来实现幂等,所谓的状态机是指一条数据的完整运行状态的转换流程,比如订单装填,因为他的状态只会向前变更,所以多次修改同一条数据的时候,一旦状态发生变更,那么对这条数据修改造成的影响只会发生一次
  • 其他方案举例:去重表、token等

基于上述方案,我们可以总结一下,其实主要就是分类两种情况:

  • 接口只允许被调用一次,例如:唯一约束、基于redis的锁机制
  • 对数据的影响只会触发一次,例如:状态机、乐观锁

4、高并发下的接口幂等性实现方案

  • 使用消息队列:将请求放入消息队列中,然后由消息队列保证请求的顺序执行。这样可以防止并发请求同时执行同一个接口,导致数据不一致。
  • 使用限流机制:对接口的并发请求进行限流,防止过多的请求同时涌入接口,导致接口崩溃。限流机制可以根据接口的容量和性能进行配置。
  • 使用重试机制:在请求失败时,对请求进行重试。重试机制可以防止由于网络抖动或其他原因导致的请求失败,从而保证接口的可用性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙洋静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值