幂等操作的实现方案

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数,一般数据库查询select、删除操作都是幂等的。

分布式高并发系统在不少地方都需要幂等性操作,常用到的技术方案如下:

  1. 唯一索引或唯一组合索引来防止新增数据存在脏数据 
  2. token机制(要申请一次有效,可限流),防止页面重复提交 
  3. 使用锁(悲观锁、乐观锁、分布式锁等)乐观锁的更新操作,最好用主键或者唯一索引来更新,这样是行锁,否则更新时会锁表。某个长流程处理过程要求不能并发执行,可以在流程执行之前根据某个标志(用户ID+后缀等)获取分布式锁,其他流程执行时获取锁就会失败,也就是同一时间该流程只能有一个能执行成功,执行完成后,释放分布式锁(分布式锁要第三方系统提供) 
  4. 状态幂等机在设计单据相关的业务,或者是任务相关的业务,肯定会涉及到状态机(状态变更图),就是业务单据上面有个状态,状态在不同的情况下会发生变更,一般情况下存在有限状态机,这时候,如果状态机已经处于下一个状态,这时候来了一个上一个状态的变更,理论上是不能够变更的,这样的话,保证了有限状态机的幂等。 
  5. 对外提供接口为了支持幂等调用,接口有两个字段必须传,一个是来源source,一个是来源方序列号seq,这个两个字段在提供方系统里面做联合唯一索引,这样当第三方调用时,先在本方系统里面查询一下,是否已经处理过,返回相应处理结果;没有处理过,进行相应处理,返回结果。

高并发的核心技术-幂等的实现方案

原文地址:https://www.cnblogs.com/doit8791/p/8587268.html