幂等性设计
Posted EchoSelf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了幂等性设计相关的知识,希望对你有一定的参考价值。
平时接口设计中,总提到接口幂等性。“幂等”本是一个数学概念,指多次重复运算和一次运算结果一样。在软件设计中,指接口任意次数调用的结果与一次调用的结果一样。在分布式系统中,往往由于网络原因导致系统未正确获取结果而触发重试机制,这时候,被调用系统则需要支持接口幂等性。
举几个例子:
用户创建订单,一次请求只能创建一个,不能重复创建;
表单重复提交,只能有一个反应结果;
同一个订单,用户发起扣款请求时,只能扣款一次;
扣款通知,只能触发一次;
几种场景与技术方案:
查询操作:
查询操作是天然幂等性,无论多少次结果都是一样。
删除操作
删除操作也可认为是幂等性,删除多次结果一样,但要注意,第一次返回1,后面都会返回0了。
唯一索引
通过唯一索引可以预防新增重复数据,也可在新增前先判断数据是否存在,若存在则直接返回已处理。
token机制
每次提交数据前,先从后端获取token,后端将token存储在redis中,后端处理数据后删除token,若重复提交,会因为token失效而无法重复提交。
状态机幂等
业务维持一个有限状态机,只能在几种状态中间流转。例如0->1->2,只有在1的时候,才能流转到状态2。如果状态已经是2了,则直接返回已执行成功。
接口幂等设计:
实际项目中,为了保证接口幂等性,往往在每次接口请求中带上全局唯一ID,后台在业务处理时,先判断此ID业务是不是被成功处理,若已经成功处理,则不再处理此请求。
以上是关于幂等性设计的主要内容,如果未能解决你的问题,请参考以下文章