一、問題
分布式系統中,分布式服務接口的幂等性如何設計(比如,不能重複扣款)。
從這個問題開始,面試官就已經進入了實際的生産問題的面試啦。分布式系統中的某個接口,要保證幂等性,如何保證?
假如你有個服務提供1個接口,結果這個服務部署在5台機器上。接着有個接口,就是付款接口,然後使用者在前端操作的時候,不知道為啥,總之就是1個訂單不小心發起了兩次支付請求。然後這兩個請求分散在了不同伺服器上。結果一個訂單,扣款兩次。
或者是訂單系統調用支付系統進行支付,因為網絡逾時了,然後訂單系統走了重試機制,咔嚓給你重試一把, 好,支付系統收到一個支付請求兩次。而且因為負載均衡算法落在了不同的機器上。
一、單機JVM
如果不保證幂等性,一個訂單被支付兩次,使用者被扣款兩次。

二、分布式系統
這不是技術問題,沒有通用的一個方法,需要結合業務來看,如何保證幂等性。所謂幂等性就是說一個接口多次發起同一個請求,你這個接口得保證結果是準确的。比如說不能多扣款。不能多插入一條資料。
如何保證幂等性主要是三點:
1、對于每一個請求必須有一個唯一的标志。舉個例子:訂單支付請求,肯定得包含訂單id,一個訂單id最多支付一次。
2、每次處理完請求之後,必須有1個記錄标志這個請求處理過了。比如說常見的方式是mysql中記錄個狀态。比如支付之前記錄一下,這個訂單的支付流水,而且支付流水采用orderId作為唯一鍵。隻有成功插入這個支付流水,才可以執行實際的支付扣款。
3、
4、