【Java高級工程師蛻變之路】066 分佈式服務治理之服務協調

分佈式服務治理

服務協調

分佈式協調主要用來解決分佈式環境中多個進程之間的同步,讓他們有序的去訪問臨界資源,防止造成髒數據的後果。

image-20220411233413739

分佈式鎖是分佈式協調技術的核心內容。

分佈式鎖的實現方式

  1. 基於緩存(redis)實現分佈式鎖

    • 獲取鎖的時候,使用 setnx 加鎖,並使用 expire 命令爲鎖添加一個超時時間,超過該時間自動釋放鎖,鎖的 value 值爲一個隨機生成的UUID,釋放鎖的時候進行判斷。

    • 獲取鎖的時候,還設置一個獲取的超時時間,若超過這個時間放棄獲取鎖。

    • 釋放鎖的時候,通過UUID判斷是不是改鎖,若是改鎖,則執行 delete 進行鎖釋放。

      setnx:set一個key爲value的字符串,返回1。若key存在,則什麼都不做,返回0。

      expire:爲key設置一個超時時間,單位爲second,超過這個時間鎖自動釋放,避免死鎖。

      delete:刪除key

  2. Zookeeper是一個爲分佈式應用提供一致性服務的開源組件,它的內部是一個分層的文件系統目錄樹結構,規定同一個目錄下只能有一個唯一的文件名,基於Zookeeper實現分佈式鎖的步驟如下:

    • 創建一個目錄mylock
    • 線程A想獲取鎖就在目錄mylock下創建臨時順序節點
    • 獲取mylock目錄下的所有子節點,然後獲取比自己小的兄弟節點,如果不存在說明當前順序號最小,獲得鎖
    • 線程B獲取多有節點,然後判斷自己是不是最小節點,設置監聽比自己小的節點
    • 線程A處理完,刪除自己的節點,線程B監聽到變更事件,判斷自己是不是最小節點,如果是獲得鎖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章