Skip to content

Latest commit

 

History

History
102 lines (41 loc) · 2.07 KB

76.亿级架构核心:系统分层之_幂等性设计原则.md

File metadata and controls

102 lines (41 loc) · 2.07 KB

76 亿级架构核心:系统分层之_幂等性设计原则

幂等性的定义

幂等性就是一个请求和多个请求产生相同的副作用。

为什么需要幂等性

在系统高并发的环境下,很可能由于网络阻塞的原因,导致客户端或者调用方并不能及时的收到服务端的处理结果,甚至是调用超时的问题。

总之,是客户端调用了你的服务,但是没有收到任何响应。在客户端会重试请求会造成什么问题呢?

  • 创建订单,第一次调用服务超时,再次调用是否会创建两个订单

  • 订单创建成功去删减库存的时候,第一次剪库存失败,再次请求,库存会剪2次吗?

按照幂等性的要求,上面的两种情况都不能发生。

需要幂等性的场景

可能会发生重试和消费的场景都需要考虑幂等性。在分布式,微服务的架构中,幂等处理随处可见。

  • 网络波动,因为网络波动,可能会引起重复请求

  • 分布式消息消费,任务发布后,使用分布式消息服务进行消费

  • 用户重复操作,用户在使用产品时,可能无意的触发多笔交易,甚至,没有响应,有意的触发多次操作

  • 未关闭重试机制,Nginx重试或者其他RPC框架的重试机制

做到幂等性的几个例子

  • 注册用户礼包领取

  • 抢红包

  • 账单付款

微服务幂等性

增删改查操作的幂等性分析

  • 创建: 不具备幂等性

  • 删除:一般请款下,无论是物理删除还是逻辑删除,都具备幂等性

  • 修改:不一定具备幂等性,看情况

  • 查询: 天然幂等

幂等性的重要性

如果一个微服务不具备幂等性,可能会出现很严重的问题:

  • 电商行业的产品超卖问题

  • 多次扣款

  • 优惠券多次叠加

如何保证幂等性

  • 幂等机制

    • 保证资源唯一性
    • 防止重复消费
  • 确保方案

    • 全局唯一ID
    • 数据库层:唯一索引
    • 服务层: 分布式锁
    • 状态机
    • 先查询在创建 , 先插入在更新
    • 其他