谈谈服务的幂等设计

概念

一般来说,幂等设计有两个层次上的理解。

  1. 请求层面

保证请求重复执行和执行依次的结果一致。数学上表示:

f...f(f(x)) = f(x)
x为参数
f为执行函数/方法

  1. 业务层面
  • 同一用户不重复下单
  • 商品不超买
  • MQ消费端去重

目的

  1. 请求重试

    比如银行的幂等案例。

  2. 结果灾难性

    • 转账
    • 交易

幂等的范围

  • 读写请求层面
    请求对数据发生改变,需要做幂等。 写请求会。读请求不会
  • 架构层面
image

只有数据访问层会。

例如:

image

1.插入数据或创建时,一般有自增id,不会导致重复插入,但是如果有业务id时,会有多次插入。

2.读的时候,基本不会有

3.更新时,如上图,如果是第一种更新,不会有问题,如果是第二种,会导致出错。

4.删除时,同理

  • 业务层面幂等
  1. 冗余部署多个进程

    存在并发消费的可能性

    并发转变为串行消费

本质

分布式锁问题

待续

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容