概念
一般来说,幂等设计有两个层次上的理解。
- 请求层面
保证请求重复执行和执行依次的结果一致。数学上表示:
f...f(f(x)) = f(x)
x为参数
f为执行函数/方法
- 业务层面
- 同一用户不重复下单
- 商品不超买
- MQ消费端去重
目的
-
请求重试
比如银行的幂等案例。
-
结果灾难性
- 转账
- 交易
幂等的范围
- 读写请求层面
请求对数据发生改变,需要做幂等。 写请求会。读请求不会 - 架构层面
只有数据访问层会。
例如:
image1.插入数据或创建时,一般有自增id,不会导致重复插入,但是如果有业务id时,会有多次插入。
2.读的时候,基本不会有
3.更新时,如上图,如果是第一种更新,不会有问题,如果是第二种,会导致出错。
4.删除时,同理
- 业务层面幂等
-
冗余部署多个进程
存在并发消费的可能性
并发转变为串行消费
本质
分布式锁问题
待续
网友评论