分散式鎖不是控制併發冪等的方式

樑桂釗發表於2019-03-01

原文地址:樑桂釗的部落格

部落格地址:blog.720ui.com/

歡迎轉載,轉載請註明作者及出處,謝謝!

之前,我們探討過冪等機制的實現方案,今天我們再來探討下分散式鎖是不是控制併發冪等的方式? 可能由於客戶端的重複提交產生多份相同的資料,也可能因為服務端的重試機制產生多次提交。此時,單單通過防重機制是不夠的,還需要服務端的冪等機制保證唯一性。冪等機制的核心是保證資源唯一性,例如客戶端重複提交或服務端的多次重試只會產生一份結果。支付場景、退款場景,涉及金錢的交易不能出現多次扣款等問題。事實上,查詢介面用於獲取資源,因為它只是查詢資料而不會影響到資源的變化,因此不管呼叫多少次介面,資源都不會改變,所以是它是冪等的。而新增介面是非冪等的,因為呼叫介面多次,它都將會產生資源的變化。因此,我們需要在出現重複提交時進行冪等處理。

注意的是,為了避免併發場景,我們可以通過鎖機制,例如悲觀鎖與樂觀鎖保證資料的唯一性。這裡,分散式鎖是一種經常使用的方案,它通常情況下是一種悲觀鎖的實現。但是,很多人經常把悲觀鎖、樂觀鎖、分散式鎖當作冪等機制的解決方案,這個是不正確的。併發控制只是保證臨界區資源的安全,不出現髒資料,如果併發控制,多次提交是合法的,只是業務方面不合法,所以做冪等控制 。

分散式鎖不是控制併發冪等的方式

因此,通過分散式鎖不是控制併發冪等的方式,需要在提交記錄的時候通過冪等機制保證資料的唯一性,確保不論如何設定超時時間,都不會出現冪等控制的問題。

(完)

更多精彩文章,盡在「服務端思維」微信公眾號!

分散式鎖不是控制併發冪等的方式

相關文章