幂等性设计

Posted EchoSelf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了幂等性设计相关的知识,希望对你有一定的参考价值。

      平时接口设计中,总提到接口幂等性。“幂等”本是一个数学概念,指多次重复运算和一次运算结果一样。在软件设计中,指接口任意次数调用的结果与一次调用的结果一样。在分布式系统中,往往由于网络原因导致系统未正确获取结果而触发重试机制,这时候,被调用系统则需要支持接口幂等性。


举几个例子:

  1. 用户创建订单,一次请求只能创建一个,不能重复创建;

  2. 表单重复提交,只能有一个反应结果;

  3. 同一个订单,用户发起扣款请求时,只能扣款一次;

  4. 扣款通知,只能触发一次;


几种场景与技术方案:

  1. 查询操作:

    查询操作是天然幂等性,无论多少次结果都是一样。

  2. 删除操作

    删除操作也可认为是幂等性,删除多次结果一样,但要注意,第一次返回1,后面都会返回0了。

  3. 唯一索引

    通过唯一索引可以预防新增重复数据,也可在新增前先判断数据是否存在,若存在则直接返回已处理。

  4. token机制

    每次提交数据前,先从后端获取token,后端将token存储在redis中,后端处理数据后删除token,若重复提交,会因为token失效而无法重复提交。

  5. 状态机幂等

    业务维持一个有限状态机,只能在几种状态中间流转。例如0->1->2,只有在1的时候,才能流转到状态2。如果状态已经是2了,则直接返回已执行成功。

接口幂等设计:

      实际项目中,为了保证接口幂等性,往往在每次接口请求中带上全局唯一ID,后台在业务处理时,先判断此ID业务是不是被成功处理,若已经成功处理,则不再处理此请求。

以上是关于幂等性设计的主要内容,如果未能解决你的问题,请参考以下文章

聊聊接口幂等性设计

分布式服务的幂等性设计

聊聊接口幂等性设计

幂等性设计

理解http的幂等性

分布式系统的接口幂等性设计