冪等操作的實現方案
阿新 • • 發佈:2018-08-24
調用 size round 有一個 返回結果 enc 同一時間 family 分布式鎖
冪等(idempotent、idempotence)是一個數學與計算機學概念,常見於抽象代數中。在編程中.一個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函數,或冪等方法,是指可以使用相同參數重復執行,並能獲得相同結果的函數。這些函數不會影響系統狀態,也不用擔心重復執行會對系統造成改變。例如,“getUsername()和setTrue()”函數就是一個冪等函數,一般數據庫查詢select、刪除操作都是冪等的。
分布式高並發系統在不少地方都需要冪等性操作,常用到的技術方案如下:
- 唯一索引或唯一組合索引來防止新增數據存在臟數據
- token機制(要申請一次有效,可限流),防止頁面重復提交
- 使用鎖(悲觀鎖、樂觀鎖、分布式鎖等)樂觀鎖的更新操作,最好用主鍵或者唯一索引來更新,這樣是行鎖,否則更新時會鎖表。某個長流程處理過程要求不能並發執行,可以在流程執行之前根據某個標誌(用戶ID+後綴等)獲取分布式鎖,其他流程執行時獲取鎖就會失敗,也就是同一時間該流程只能有一個能執行成功,執行完成後,釋放分布式鎖(分布式鎖要第三方系統提供)
- 狀態冪等機在設計單據相關的業務,或者是任務相關的業務,肯定會涉及到狀態機(狀態變更圖),就是業務單據上面有個狀態,狀態在不同的情況下會發生變更,一般情況下存在有限狀態機,這時候,如果狀態機已經處於下一個狀態,這時候來了一個上一個狀態的變更,理論上是不能夠變更的,這樣的話,保證了有限狀態機的冪等。
- 對外提供接口為了支持冪等調用,接口有兩個字段必須傳,一個是來源source,一個是來源方序列號seq,這個兩個字段在提供方系統裏面做聯合唯一索引,這樣當第三方調用時,先在本方系統裏面查詢一下,是否已經處理過,返回相應處理結果;沒有處理過,進行相應處理,返回結果。
高並發的核心技術-冪等的實現方案
冪等操作的實現方案