幂等性设计
最后更新于:2022-04-02 03:09:06
[TOC]
> [参考-微信公众号](https://mp.weixin.qq.com/s/JrnKjj3kgEq8UDBp-VJQgg)
## 概述
幂等性是分布式系统设计中十分重要的概念
* **幂等性**原本是数学上的概念,即使公式:`f(x)=f(f(x))` 能够成立的数学性质。
* 用在编程领域,则意为对同一个系统,使用同样的条件,**一次请求和重复**的多次请求对系统资源的影响是一致的
* 具有这一性质的接口在设计时总是秉持这样的一种理念:**调用接口发生异常并且重复尝试时,总是会造成系统所无法承受的损失,所以必须阻止这种现象的发生**
## 实现原理
1. 调用接口前,先获取一个全局唯一的令牌(Token)
2. 调用接口时,将 Token 放到 Header 头中
3. 解析 Header 头,验证是否为有效 Token,无效直接返回失败
4. 完成业务逻辑后,将业务结果与 Token 进行关联存储,设置失效时间
5. 重试时不要重新获取 Token,用要上次的 Token
## 案例分析
订单创建时,我们需要去减库存,这时接口发生了超时,调用方进行了重试,这时是否会多扣一次库存?
解决这类问题有 2 种方案:
1. 服务方提供相应的查询接口,调用方在请求超时后进行查询,如果查到了,表示请求处理成功了,没查到就走失败流程。
2. 调用方只管重试,服务方保证一次和多次的请求结果是一样的。
对于第二种方案,就需要服务方的接口支持幂等性。
';