天天看點

接口設計與重試機制引發的問題

接口設計與重試機制引發的問題

什麼是幂等性

接口設計與重試機制引發的問題

解釋:

數學方面:幂等元素運作多次,還等于它原來的運算結果。

程式方面:在系統中,一個接口運作多次,與運作一次的效果是一緻的。

為什麼會産生接口幂等性問題

  1. 網絡波動, 可能會引起重複請求。
  2. 使用者重複操作,使用者在操作時候可能會無意觸發多次下單交易,甚至沒有響應而有意觸發多次交易應用。
  3. 使用了失效或逾時重試機制(Nginx重試、RPC重試或業務層重試等)。
  4. 使用浏覽器後退按鈕重複之前的頁面操作,導緻重複送出表單。

    注意:

不是所有接口都要求幂等性,要根據業務而定。

幂等性接口設計

Select操作:不會對業務資料有影響,天然幂等。

select * from user where user_id = 1;      

Delete操作:第一次已經删除,第二次也不會有影響。

delete from user where user_id = 1;      

Update操作:更新操作傳入資料版本号,通過樂觀鎖實作幂等性。

update user set username = 'zhangsan' where user_id = 1
update user set age = age + 1 where user_id = 1      
insert into order(pkid, order_id, xx) values (1, '20210304020226953568', ...);