背景
在程序中,尤其是分布式系统中,一个事务需要多个系统进行处理,确保每一个系统的一次或多次处理不影响最终的结果,就要求每一个系统的处理都是幂等性的。例如一个下单支付流程,用户发起流程,在订单系统进行下单操作,下单成功后在支付系统进行支付,此时支付由于超时或者网络原因等,没有操作成功,再次发起支付时,要保证不能够重复的扣款,必须保证支付功能的幂等性。
订单支付处理的幂等性
定义
幂在汉语中的意思通常指遮盖东西的巾,作为动词时是覆盖的意思。
幂在数学中是指数运算的结果。例如n?,叫做n的m次幂,也叫n的m次方。
幂等性在软件设计中的定义为:某个函数或者某个接口使用相同参数调用一次或者无限次,其造成的后果是一样的。
解决方案
通过业务唯一流水号(Serial Number)来区别每一次的请求,如上例所示订单、支付调用都需要生成唯一的业务流水号,调用异常再次发起时使用同样的流水号再次发起请求或者查询操作。
唯一业务流水号的生成可以采用多种方案,可以采用分布式ID的方式实现,下面例举出11种方案,仅供参考。
分布式ID实现方案
来源:飞狗科技
声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!