分佈式鎖的基本原理



基本概念:

分佈式鎖,是控制分佈式系統之間同步訪問共享資源的一種方式。在分佈式系統中,常常需要協調他們的動作。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源,那麼訪問這些資源的時候,往往需要互斥來防止彼此干擾來保證一致性,在這種情況下,便需要使用到分佈式鎖。


舉個例子:

1.假設有一個進程A,每小時準點給用戶發送一條短信"Hello world",爲了高可用,就必須在多臺機器上面部署多個進程,避免宕機的情況

2.假設部署在兩臺機器,那麼問題來了,用戶每個小時就會收到兩條"Hello world",信息就重複了

3.我們希望只發送一條"Hello world",那麼就可以引入分佈式鎖的概念了,

4.進程A和進程B發送短信前先去註冊一個鎖,假設進程A搶到了鎖,進程B就等待結果,如果發送成功了,那麼就B就放棄此次任務,等待下一個小時。

5.問題的核心就在於怎麼註冊鎖,檢查鎖的存在和註冊鎖是一個原子性操作,類似MySQL的主鍵,存在則不能insert,就說是你不能把我的鎖覆蓋了,你得等着

6.我們有多種方式可以實現分佈式鎖,最簡單的就是以每小時準點這個時間作爲主鍵,到mysql寫入一條數據,利用數據庫來維持一致性

7.當然分佈式鎖也會存在很多暗坑,不在這裏展開。


分佈式鎖的幾種實現:

1.zookeeper分佈式鎖,基於自增節點

2.Redis分佈式鎖,基於setnx命令,

基於redis實現分佈式鎖:http://blog.csdn.net/daiyudong2020/article/details/51760648

官網:http://redis.io/topics/distlock

譯文:http://www.oschina.net/translate/redis-distlock

3.memcache分佈式鎖,基於add函數

這幾種方案在網上有很多技術文章,不重複敘述,需要的Google一下



推薦一篇分佈式鎖的文章:聊聊分佈式鎖的設計


原文出自:http://blog.csdn.net/daiyudong2020/article/details/51660994


End;

基本概念:

分佈式鎖,是控制分佈式系統之間同步訪問共享資源的一種方式。在分佈式系統中,常常需要協調他們的動作。如果不同的系統或是同一個系統的不同主機之間共享了一個或一組資源,那麼訪問這些資源的時候,往往需要互斥來防止彼此干擾來保證一致性,在這種情況下,便需要使用到分佈式鎖。


舉個例子:

1.假設有一個進程A,每小時準點給用戶發送一條短信"Hello world",爲了高可用,就必須在多臺機器上面部署多個進程,避免宕機的情況

2.假設部署在兩臺機器,那麼問題來了,用戶每個小時就會收到兩條"Hello world",信息就重複了

3.我們希望只發送一條"Hello world",那麼就可以引入分佈式鎖的概念了,

4.進程A和進程B發送短信前先去註冊一個鎖,假設進程A搶到了鎖,進程B就等待結果,如果發送成功了,那麼就B就放棄此次任務,等待下一個小時。

5.問題的核心就在於怎麼註冊鎖,檢查鎖的存在和註冊鎖是一個原子性操作,類似MySQL的主鍵,存在則不能insert,就說是你不能把我的鎖覆蓋了,你得等着

6.我們有多種方式可以實現分佈式鎖,最簡單的就是以每小時準點這個時間作爲主鍵,到mysql寫入一條數據,利用數據庫來維持一致性

7.當然分佈式鎖也會存在很多暗坑,不在這裏展開。


分佈式鎖的幾種實現:

1.zookeeper分佈式鎖,基於自增節點

2.Redis分佈式鎖,基於setnx命令,

基於redis實現分佈式鎖:http://blog.csdn.net/daiyudong2020/article/details/51760648

官網:http://redis.io/topics/distlock

譯文:http://www.oschina.net/translate/redis-distlock

3.memcache分佈式鎖,基於add函數

這幾種方案在網上有很多技術文章,不重複敘述,需要的Google一下



推薦一篇分佈式鎖的文章:聊聊分佈式鎖的設計


原文出自:http://blog.csdn.net/daiyudong2020/article/details/51660994


End;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章