幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
f(x) = f(f(x))
理解
幂等是对操作的一种要求规范,不是所有的操作都要实现该规范,有些操作由于本身的操作特点就已经决定了这个操作是幂等操作。
实现
从设计上避免非幂等性功能的产生是我认为最好的解决方式。如果一个需求的实现可以通过设计一个简单有效的幂等接口进行实现可以避免很多问题产生.但实际业务场景是不太可能把所有业务场景都设计成幂等的。
幂等ID
为了实现业务的幂等,需要有一个唯一标识来对业务操作进行唯一标识,而这个标识也必须要在整个业务交互过程中留存,可以针对某一具体业务生成仅仅针对该业务场景的ID,也可以由中心系统分配全局ID对服务链路进行跟踪。
处理流程
收到请求后第一时间去查看幂等ID是否被记录,这里就要求我们业务的幂等ID的存储介质是可共享的,存储服务需要时高可用的,这样才能保证我们多个服务间数据的一致性。
多版本并发控制
update with condition,使用乐观锁,通过附加的校验数据(version等),作为乐观锁的判定条件。
1 | select * from tablename where ... //业务数据中夹带判定数据,例如版本versoin |
文章链接 https://fangzongzhou.github.io/2018/07/22/计算机/分布式系统/幂等/