dubbo 分布式系統中介面的冪等性該如何設計

2021-10-24 03:43:47 字數 1048 閱讀 7255

一、問題

分布式系統中,分布式服務介面的冪等性如何設計(比如,不能重複扣款)。

從這個問題開始,面試官就已經進入了實際的生產問題的面試啦。分布式系統中的某個介面,要保證冪等性,如何保證?

假如你有個服務提供1個介面,結果這個服務部署在5臺機器上。接著有個介面,就是付款介面,然後使用者在前端操作的時候,不知道為啥,總之就是1個訂單不小心發起了兩次支付請求。然後這兩個請求分散在了不同伺服器上。結果乙個訂單,扣款兩次。

或者是訂單系統呼叫支付系統進行支付,因為網路超時了,然後訂單系統走了重試機制,咔嚓給你重試一把, 好,支付系統收到乙個支付請求兩次。而且因為負載均衡演算法落在了不同的機器上。

一、單機jvm

如果不保證冪等性,乙個訂單被支付兩次,使用者被扣款兩次。 

二、分布式系統

這不是技術問題,沒有通用的乙個方法,需要結合業務來看,如何保證冪等性。所謂冪等性就是說乙個介面多次發起同乙個請求,你這個介面得保證結果是準確的。比如說不能多扣款。不能多插入一條資料。

如何保證冪等性主要是三點:

1、對於每乙個請求必須有乙個唯一的標誌。舉個例子:訂單支付請求,肯定得包含訂單id,乙個訂單id最多支付一次。

2、每次處理完請求之後,必須有1個記錄標誌這個請求處理過了。比如說常見的方式是mysql中記錄個狀態。比如支付之前記錄一下,這個訂單的支付流水,而且支付流水採用orderid作為唯一鍵。只有成功插入這個支付流水,才可以執行實際的支付扣款。

分布式介面的冪等設計

什麼是介面的冪等性,介面的冪等性實際上就是介面可重複呼叫,在呼叫方多次呼叫的情況下,介面最終得到的結果是一致的。有些介面可以天然的實現冪等性,比如查詢介面,對於查詢來說,你查詢一次和兩次,對於系統來說,沒有任何影響,查出的結果也是一樣。除了查詢功能具有天然的冪等性之外,增加 更新 刪除都要保證冪等性...

分布式系統介面冪等實現

1.背景 最近的系統中使用了springcloud微服務框架,這種分布式框架的確提供了非常多便利的地方,不過隨之也出現了很多的問題,特別是在實際開發中,介面的冪等性。而所謂的冪等,通俗點說就是乙個操作不管請求多少次返回的結果都是一樣的,比如支付 扣除庫存 扣除積分等等,如果因為網路問題而出現多扣 多...

Dubbo分布式服務系統

dubbo是alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合 或者最大限度地鬆耦合 從服務模型的角度來看,dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方 provider ...