下單訂單繫結訂單號業務場景理解後端介面的冪等性
阿新 • • 發佈:2020-10-21
非冪等場景:
服務A將單據A資訊通過RPC遠端過程呼叫傳給下游服務B介面(非冪等介面)用於生成關聯單據B,服務B介面會校驗是否已經接收過單據A,如果已接收過,會報錯『重複的單據』,如果未接收過,則生產關聯單據B並寫庫,將結果返回服務A,服務A收到結果後修改此單據狀態,將結果返回客戶端。簡化流程圖如下所示:
非冪等出現的問題:
服務A呼叫服務B後,服務B生成關聯單據B寫庫成功,返回成功給服務A;但由於網路抖動,服務A未接收到服務B返回的響應,預設認定失敗,返回客戶端失敗;業務人員重試,但由於服務B已接受過此單據A,會丟擲異常『重複單據A』,對於此單據A就永遠無法接受到單據B的成功響應,永遠為『處理失敗』狀態,與實際狀態不一致
冪等性解決:
為了解決以上問題,就需要保證下游服務B介面對單據A維度做冪等性;判斷再次接受到單據A之後,不做任何操作,直接返回成功即可,服務A接受到成功後即可修改單據A狀態為『處理成功』;
介面的冪等性實際上就是介面可重複呼叫,在呼叫方多次呼叫的情況下,介面最終得到的結果是一致的。有些介面可以天然的實現冪等性,比如查詢介面,對於查詢來說,你查詢一次和兩次,對於系統來說,沒有任何影響。但對於有寫庫操作的增刪改介面,多次呼叫就會對系統有多次影響;
實現冪等性的關鍵在於識別重複的請求,對重複的請求返回成功即可,無需再對系統造成影響;
實現冪等性後的簡化流程圖:
冪等性應用的場景還有很多,實現也有很多方式,更有很多需要考慮的問題,隨著工作學習的深入,理解也一定會越來越深入的
轉載於:https://my.oschina.net/wugong/blog/1788414