概念
一般來說,冪等設計有兩個層次上的理解。
- 請求層面
保證請求重復執(zhí)行和執(zhí)行依次的結(jié)果一致。數(shù)學上表示:
f...f(f(x)) = f(x)
x為參數(shù)
f為執(zhí)行函數(shù)/方法
- 業(yè)務層面
- 同一用戶不重復下單
- 商品不超買
- MQ消費端去重
目的
-
請求重試
比如銀行的冪等案例。
-
結(jié)果災難性
- 轉(zhuǎn)賬
- 交易
冪等的范圍
- 讀寫請求層面
請求對數(shù)據(jù)發(fā)生改變,需要做冪等。 寫請求會。讀請求不會 - 架構(gòu)層面
image
只有數(shù)據(jù)訪問層會。
例如:
image
1.插入數(shù)據(jù)或創(chuàng)建時,一般有自增id,不會導致重復插入,但是如果有業(yè)務id時,會有多次插入。
2.讀的時候,基本不會有
3.更新時,如上圖,如果是第一種更新,不會有問題,如果是第二種,會導致出錯。
4.刪除時,同理
- 業(yè)務層面冪等
-
冗余部署多個進程
存在并發(fā)消費的可能性
并發(fā)轉(zhuǎn)變?yōu)榇邢M
本質(zhì)
分布式鎖問題
待續(xù)