1.什么是冪等
- 數學
f(n) = 1^n 就是一個冪等函數
- 編程
任意多次執行所產生的影響與一次執行相同,不用擔心重復執行會對系統造成改變
2.為什么要做冪等
- 故障:
保底系統因為線上swallow消息重復發送,產生了三個線上問題:
a、ts-treasure-pool大面積告警,全部為db主鍵沖突的錯誤。
b、同一筆保底抵扣數據,在歸還保底時當做兩筆進行歸還,影響總數據量1500筆左右。
c、同一筆保底申請審核通過后,被當做兩筆審核通過進行了保底占用和預付款生成,共9筆。
3.什么時候要做冪等
- 場景:
同樣的請求可能需要重試(或可能被重復調用)的情況
按業務場景做針對性判斷,利益相關型業務(支付、結算等)
- 接口類型:
PegionService 接口
Swallow消費機
Http接口
4.如何做到冪等
- 一般情況下:利用唯一交易號(或流水號)實現
eg1:創建統一訂單 case337
-
eg2:更新訂單可用數量 case2178
eg3: 支付成功后消耗抵用券 PCT_CouponConsume
冪等要做到:
1、同一個OutBizID,多次消耗該抵用券的結果都是成功。
2、但對於一個CouponID,只能被消耗一次,如果換一個OutBizID來調用時應該始終返回失敗。
5.如何測試冪等
- 方法
可在iTest上新增待測Pegions接口、Http接口、發送指定topic的swallow消息的冪等測試用例,重復執行來模擬多次調用
- 檢查點
檢查接口返回的Response是否冪等
檢查對數據庫數據的變更影響是否冪等
