[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. 调用方只管重试,服务方保证一次和多次的请求结果是一样的。 对于第二种方案,就需要服务方的接口支持幂等性。