分布式鎖的實現方式

2021-07-22 07:30:57 字數 1199 閱讀 4215

在進行大型**技術架構設計以及業務實現的過程中,多少都會遇到需要使用分布式鎖的情況。那麼問題也就接踵而至。分布式鎖zk和memcached以及redis三者都能實現,同樣是分布式鎖,三者的區別何在?各自適用什麼場景?

一、zookeeper

實現原理:

基於zookeeper瞬時有序節點實現的分布式鎖,其主要邏輯如下(該圖來自於ibm**)。大致思想即為:每個客戶端對某個功能加鎖時,在zookeeper上的與該功能對應的指定節點的目錄下,生成乙個唯一的瞬時有序節點。判斷是否獲取鎖的方式很簡單,只需要判斷有序節點中序號最小的乙個。當釋放鎖的時候,只需將這個瞬時節點刪除即可。同時,其可以避免服務宕機導致的鎖無法釋放,而產生的死鎖問題。

優點:鎖安全性高,zk可持久化,且能實時監聽獲取鎖的客戶端狀態。一旦客戶端宕機,則瞬時節點隨之消失,zk因而能第一時間釋放鎖。這也省去了用分布式快取實現鎖的過程中需要加入超時時間判斷的這一邏輯;

缺點:效能開銷比較高。因為其需要動態產生、銷毀瞬時節點來實現鎖功能。所以不太適合直接提供給高併發的場景使用

實現:可以直接採用zookeeper第三方庫curator即可方便地實現分布式鎖

適用場景:對可靠性要求非常高,且併發程度不高的場景下使用。如核心資料的定時全量/增量同步等

二、memcached分布式鎖

實現原理:memcached帶有add函式,利用add函式的特性即可實現分布式鎖。add和set的區別在於:如果多執行緒併發set,則每個set都會成功,但最後儲存的值以最後的set的執行緒為準。而add的話則相反,add會新增第乙個到達的值,並返回true,後續的新增則都會返回false。利用該點即可很輕鬆地實現分布式鎖

優點:併發高效

缺點:1、memcached採用列入lru置換策略,所以如果記憶體不夠,可能導致快取中的鎖資訊丟失;

2、memcached無法持久化,一旦重啟,將導致資訊丟失。

使用場景:高併發場景。需要1)加上超時時間避免死鎖;2)提供足夠支撐鎖服務的記憶體空間;3)穩定的集群化管理。

三、redis分布式鎖

redis分布式鎖即可以結合zk分布式鎖鎖高度安全和memcached併發場景下效率很好的優點,其實現方式和memcached類似,採用setnx即可實現。需要注意的是,這裡的redis也需要設定超時時間。以避免死鎖。可以利用jedis客戶端實現

分布式鎖實現方式

1 資料庫的唯一索引實現 獲得鎖時向表中插入一條記錄,釋放鎖時刪除這條記錄。唯一索引可以保證該記錄只被插入一次,那麼就可以用這個記錄是否存在來判斷是否存於鎖定狀態。缺點 2 redis的setnx指令實現 使用 setnx set if not exist 指令插入乙個鍵值對,如果 key 已經存在...

分布式鎖的實現方式

在進行大型 技術架構設計以及業務實現的過程中,多少都會遇到需要使用分布式鎖的情況。那麼問題也就接踵而至。分布式鎖zk和memcached以及redis三者都能實現,同樣是分布式鎖,三者的區別何在?各自適用什麼場景?一 zookeeper 實現原理 基於zookeeper瞬時有序節點實現的分布式鎖,其...

分布式鎖的實現方式

一 分布式鎖應該具備哪些條件 1 在分布式系統環境下,乙個方法在同一時間只能被乙個機器的乙個執行緒執行 2 高可用高效能的獲取鎖和釋放鎖 3 具備可重入特性 4 具備鎖失效機制,防止死鎖 5 具備非阻塞鎖特性,沒有獲取到鎖就直接返回獲取鎖失敗。二 分布式鎖的實現方式 在很多場景中,我們為了保證資料的...