摘要:有些接口可以天然的實現(xiàn)冪等性,比如查詢接口,對于查詢來說,你查詢一次和兩次,對于系統(tǒng)來說,沒有任何影響但對于有寫庫操作的增刪改接口,多次調用就會對系統(tǒng)有多次影響。
寫在前面:之前在設計接口時因經(jīng)驗尚淺,并未過多考慮冪等性,但這兩天出現(xiàn)的一個線上問題讓我認識到了某些情況下接口冪等性的重要性;
非冪等場景:
服務A將單據(jù)A信息通過RPC遠程過程調用傳給下游服務B接口(非冪等接口)用于生成關聯(lián)單據(jù)B,服務B接口會校驗是否已經(jīng)接收過單據(jù)A,如果已接收過,會報錯『重復的單據(jù)』,如果未接收過,則生產(chǎn)關聯(lián)單據(jù)B并寫庫,將結果返回服務A,服務A收到結果后修改此單據(jù)狀態(tài),將結果返回客戶端。簡化流程圖如下所示:
非冪等出現(xiàn)的問題:
服務A調用服務B后,服務B生成關聯(lián)單據(jù)B寫庫成功,返回成功給服務A;但由于網(wǎng)絡抖動,服務A未接收到服務B返回的響應,默認認定失敗,返回客戶端失?。粯I(yè)務人員重試,但由于服務B已接受過此單據(jù)A,會拋出異?!褐貜蛦螕?jù)A』,對于此單據(jù)A就永遠無法接受到單據(jù)B的成功響應,永遠為『處理失敗』狀態(tài),與實際狀態(tài)不一致;(出現(xiàn)此問題后,首先確認單據(jù)A的關聯(lián)單據(jù)B已生成,然后手動修復服務A里單據(jù)A的狀態(tài)為『處理成功』)
冪等性解決:
為了解決以上問題,就需要保證下游服務B接口對單據(jù)A維度做冪等性;判斷再次接受到單據(jù)A之后,不做任何操作,直接返回成功即可,服務A接受到成功后即可修改單據(jù)A狀態(tài)為『處理成功』;
接口的冪等性實際上就是接口可重復調用,在調用方多次調用的情況下,接口最終得到的結果是一致的。有些接口可以天然的實現(xiàn)冪等性,比如查詢接口,對于查詢來說,你查詢一次和兩次,對于系統(tǒng)來說,沒有任何影響;但對于有寫庫操作的增刪改接口,多次調用就會對系統(tǒng)有多次影響。
實現(xiàn)冪等性的關鍵在于識別重復的請求,對重復的請求返回成功即可,無需再對系統(tǒng)造成影響;
實現(xiàn)冪等性后的簡化流程圖:
寫在最后:冪等性應用的場景還有很多,實現(xiàn)也有很多方式,更有很多需要考慮的問題,隨著工作學習的深入,理解也一定會越來越深入的,加油!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/28491.html
摘要:解決冪等問題的三部曲,也是作者的思考框架。這是解決冪等問題的第二部曲列出并減少副作用的分析維度。所以在并發(fā)執(zhí)行的維度,將并發(fā)重復執(zhí)行變成串行重復執(zhí)行是最好的冪等解決方案。 綱要 文章目的:本文旨在提煉一套分布式冪等問題的思考框架,而非解決某個具體的分布式冪等問題。在這個框架體系內,會有一些方案舉例說明。文章目標:希望讀者能通過這套思考框架設計出符合自己業(yè)務的完備的冪等解決方案。文章內容...
摘要:而純函數(shù),主要強調相同的輸入,多次調用,輸出也相同且無副作用。對于組合可能不返回值的函數(shù)很有用在其它的一些地方,也稱為,也稱為,也稱為 參考文檔1 參考文檔2 函數(shù)式編程術語 高階函數(shù) Higher-Order Functions 以函數(shù)為參數(shù)的函數(shù) 返回一個函數(shù)的函數(shù) 函數(shù)的元 Arity 比如,一個帶有兩個參數(shù)的函數(shù)被稱為二元函數(shù) 惰性求值 Lazy evaluation 是...
閱讀 2473·2021-11-23 09:51
閱讀 533·2019-08-30 13:59
閱讀 1833·2019-08-29 11:20
閱讀 2541·2019-08-26 13:41
閱讀 3249·2019-08-26 12:16
閱讀 740·2019-08-26 10:59
閱讀 3335·2019-08-26 10:14
閱讀 607·2019-08-23 17:21