如果保證介面的冪等性

2021-10-24 05:59:56 字數 985 閱讀 5222

冪等性原本是數學上的概念,即公式:f(x) = f(f(x)) 能夠成立的數學性質

那麼在程式設計領域,為對乙個系統,使用同樣的條件,一次請求和重複的多次請求對系統資源的影響是一致的

冪等性是分布式系統設計中非常重要的概念,具有這一性質的介面在設計時總是秉持這樣的一種理念:呼叫介面發生異常並且重複嘗試時,總是會造成系統無法承受的損失,所以必須阻止這種現象的發生。

試想一下這樣的一種場景:在電商平台上支付後,因為網路原因導致系統提示你支付失敗,於是你又重新付款了一次,等完成後發現你的網銀上被扣款了兩次,這是一種什麼樣的體驗。

造成上述問題的原因可能很多,例如第一次付款的時候實際支付後,後台已經發生了扣款,但是因為網路的原因,導致系統的誤判。又比如第一次付款確實失敗了,第二次付款重**送了兩次,導致了兩次扣款。

冪等性就是解決這類問題的方案之一。在電商,銀行,金融公司對資料的準確性和一致性要去很高,所以這一特性具有十分重要的地位。

1,樂觀鎖

在資料更新的時候,先去查詢資料的版本號,如果版本號一致才允許更新,否則操作無法成功。這是高併發的時候效率高的一種鎖機制。

2,建立唯一索引

在表中給乙個字段或者時兩個字段組合建立唯一索引,當第一次插入資料成功以後,以後重複的請求,插入資料永遠無法成功。

3,token機制

這種機制就比較重要了,適用的範圍也比較廣,實現的方式也比較多。

核心思路就是,為每一次操作加乙個token驗證,驗證通過則處理,處理完了刪除token。當重複請求過來,就無法通過token的驗證了。

比如,支付訂單之前我先發起一次請求到後台去申請token,然後存放到redis中。然後我真正發起支付請求,我先去驗證該請求的token是否存在,如果存在則繼續操作。如果不存在,就可以判斷是重複請求。

好了,今天的分享就此結束,感謝!

如何保證介面的冪等性

冪等性是系統服務對外一種承諾,承諾只要呼叫介面成功,外部多次呼叫對系統的影響是一致的。宣告為冪等的服務會認為外部呼叫失敗是常態,並且失敗之後必然會有重試。以sql為例 select col1 from tab1 wher col2 2,無論執行多少次都不會改變狀態,是天然的冪等。update tab...

如何保證介面的冪等性

冪等性是系統服務對外一種承諾,承諾只要呼叫介面成功,外部多次呼叫對系統的影響是一致的。宣告為冪等的服務會認為外部呼叫失敗是常態,並且失敗之後必然會有重試。介面呼叫下存在的問題 現如今我們的系統大多拆分為分布式soa,或者微服務,一套系統中包含了多個子系統服務,而乙個子系統服務往往會去呼叫另乙個服務,...

保證介面冪等性

冪等性 其實就是資料一致性和事務完整性 數學上的定義 f f x f x x被函式f作用一次和作用無限次的結果是一樣的。冪等性應用在軟體系統中,可以把它簡單定義為 某個函式或者某個介面使用相同引數呼叫一次或者無限次,其造成的後果是一致的,在實際應用中一般針對於介面進行冪等性設計。例如 冪等需要通過唯...