冪等概述。
- 冪等性原本是數學上的概念,即是公式:f (x)=f (f (x)) 能夠成立的數學性質。用在編程領域,則意為對同一個系統,使用同樣的條件,一次請求和重復的多次請求對系統資源的影響是一致的。
- 冪等性是分布式系統設計中十分重要的概念,具有這一性質的接口在設計時總是秉持這樣的一種理念:調用接口發生異常并且重復嘗試時,總是會造成系統所無法承受的損失,所以必須阻止這種現象的發生
- 實現冪等的方式很多,目前基于請求令牌機制適用范圍較廣。其核心思想是為每一次操作生成一個唯一性的憑證,也就是 token。一個 token 在操作的每一個階段只有一次執行權,一旦執行成功則保存執行結果。對重復的請求,返回同一個結果(報錯)等。參考《冪等性淺談》
冪等處理設計原理流程設計參考。
- 1. 請求開始前,根據 key 查詢 查到結果:報錯 未查到結果:存入 key-value-expireTime key=ip+url+args
- 2. 請求結束后,直接刪除 key 不管 key 是否存在,直接刪除 是否刪除,可配置
- 3.expireTime 過期時間,防止一個請求卡死,會一直阻塞,超過過期時間,自動刪除 過期時間要大于業務執行時間,需要大概評估下;
- 4. 此方案直接切的是接口請求層面。
- 5. 過期時間需要大于業務執行時間,否則業務請求 1 進來還在執行中,前端未做遮罩,或者用戶跳轉頁面后再回來做重復請求 2,在業務層面上看,結果依舊是不符合預期的。
- 6. 建議 delKey = false。即使業務執行完,也不刪除 key,強制鎖 expireTime 的時間。預防 5 的情況發生。
- 7. 實現思路:同一個請求 ip 和接口,相同參數的請求,在 expireTime 內多次請求,只允許成功一次。
- 8. 頁面做遮罩,數據庫層面的唯一索引,先查詢再添加,等處理方式應該都處理下。
- 9. 此注解只用于冪等,不用于鎖,100 個并發這種壓測,會出現問題,在這種場景下也沒有意義,實際中用戶也不會出現 1s 或者 3s 內手動發送了 50 個或者 100 個重復請求,或者弱網下有 100 個重復請求;
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.