分布式系統面試 冪等性設計

2021-09-11 17:49:02 字數 1002 閱讀 8316

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

從這個問題開始,面試官就已經進入了實際的生產問題的面試了。

乙個分布式系統中的某個介面,該如何保證冪等性?這個事兒其實是你做分布式系統的時候必須要考慮的乙個生產環境的技術問題。啥意思呢?

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

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

所以你肯定得知道這事兒,否則你做出來的分布式系統恐怕容易埋坑。

這個不是技術問題,這個沒有通用的乙個方法,這個應該結合業務來保證冪等性。

所謂冪等性,就是說乙個介面,多次發起同乙個請求,你這個介面得保證結果是準確的,比如不能多扣款、不能多插入一條資料、不能將統計值多加了 1。這就是冪等性。

其實保證冪等性主要是三點:

實際運作過程中,你要結合自己的業務來,比如說利用 redis,用 orderid 作為唯一鍵。只有成功插入這個支付流水,才可以執行實際的支付扣款。

要求是支付乙個訂單,必須插入一條支付流水,order_id 建乙個唯一鍵unique key。你在支付乙個訂單之前,先插入一條支付流水,order_id 就已經進去了。你就可以寫乙個標識到 redis 裡面去,set order_id payed,下一次重複請求過來了,先查 redis 的 order_id 對應的 value,如果是payed就說明已經支付過了,你就別重複支付了。

分布式系統 冪等性設計

web資源或api方法的冪等性是指一次和多次請求某乙個資源應該具有同樣的 冪等性是系統的介面對外一種承諾 而不是實現 承諾只要呼叫介面成功,外部多次呼叫對系統的影響是一致的。冪等性是分布式系統設計中的乙個重要概念,對超時處理 系統恢復等具有重要意義。宣告為冪等的介面會認為外部呼叫失敗是常態,並且失敗...

分布式 冪等性

現在你的服務提供一些外部介面呼叫,然後你這個服務又是部署在多台機器上的,然後前端在操作的時候正好呼叫了請求,假如我們的業務功能是扣款,然後在負載均衡的時候你的請求被傳送到不同的機器上,所以你需要保證的就是同樣的一次請求只能成功一次,另外的需要丟棄調。那麼如何保證分布式環境下的冪等性呢?保證冪等性主要...

分布式系統冪等性詳解

冪等 idempotent idempotence 是乙個數學與計算機學概念,常見於抽象代數中。在程式設計中.乙個冪等操作的特點是其任意多次執行所產生的影響均與一次執行的影響相同。冪等函式,或冪等方法,是指可以使用相同引數重複執行,並能獲得相同結果的函式。這些函式不會影響系統狀態,也不用擔心重複執行...