在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。 用通俗的话讲:就是针对一个操作,不管做多少次,产生效果或返回的结果都是一样的。
在我们的业务开发过程中如果对幂等问题处理的不当,会造成脏数据,甚至造成极大损失。结合我自己这几年所接触的业务总结了常见的幂等场景分享给大家。
表单提交业务类型包括客户端界面的表单实体提交,修改按钮等设计增加修改数据的功能。对此业务类型前后端开发人员都需要进行幂等处理。
支付相关业务幂等的处理十分重要,比如重复的下单,三方接口的回调这些都会造成幂等问题。
MQ作为异步解耦的中间件,我们业务开发经常使用,比如用它来处理异步逻辑。但是MQ的生产者和消费者同样存在幂等问题,即重复消息,重复消费等问题。
并发场景的幂等的问题极易发生,而这类场景的幂等处理也不尽相同,因为都要考虑到效率问题和一致性问题,如果数据一致性要求不算太高的业务场景可以使用验重处理。如果数据一致性要求非常严格,可以采用锁机制,比如乐观锁和悲观锁的处理方案并且结合常规验重手段处理。如果是分布式集群环境则需要使用分布式锁进行处理。