1. 程式人生 > >JAVA中的各種鎖以及最優的zookeeper分散式鎖解決方案

JAVA中的各種鎖以及最優的zookeeper分散式鎖解決方案

一、鎖出現的原因-執行緒或者程序競爭資源

當有一個或者多個執行緒或者程序進行操作時,其他執行緒或者程序都不可以對這個資源進行操作,直到該執行緒或者程序完成操作,其他執行緒或者程序才能對該資源進行操作,而其他執行緒或程序都處於等待狀態。

二、執行緒同步的方式和機制

1、解決資源競爭問題

(1)臨界區:通過對多執行緒的序列化來來訪問公共資源或者而一段程式碼

  • Synchronized修飾的java方法

(2)互斥量:採用互斥物件機制,只有擁有互斥對性的執行緒才能訪問

  • Synchronized修飾的程式碼塊
  • 分散式鎖的只要實現機制
2、解決執行順序

訊號量:他允許對個任務在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目。

CountDownLatch,CyclicBarrier和semaphore

三、分散式鎖實現的技術

1、基於資料庫實現分時鎖

(1)效能較差,容易出現單點故障

(2)鎖沒有失效時間,容易死鎖

(3)非阻塞式

樂觀鎖

2、基於快取實現分散式鎖

(1)所沒有失效時間

(2)非阻塞式

3、基於Zookeeper實現分散式鎖

(1)實現比較簡單

(2)可靠性高

(3)效能較好

四、ZooKeeper簡介

ZooKeeper是一個分散式,開放原始碼的分散式應用程式協調服務,是Hadoop和HBASE的重要元件,在zookeeper中,znode是一個跟Unix或者Windows檔案系統路徑相似的節點,可以往這個節點儲存或者獲取資料

特點:

1、在zookeeper中,znode是一個跟unix或windows檔案系統相似的節點,可以往這個節點儲存或者獲取資料

2、通過客戶端可以對znode進行增刪改查操作,還可以註冊watcher監控znode的變化

3、znode跟檔案系統一樣,名稱不可以重複(同一個znode下,節點名稱唯一)

zookeeper節點型別:

持久節點(persistent)

持久順序節點(persistent_sequential)

臨時節點(ephemeral)

臨時順序節點(ephemeral_sequential)

zookeeper典型應用場景:

1、資料釋出訂閱

2、負載均衡

3、命名服務

4、分散式協調

5、叢集管理

6、配置管理

7、分散式佇列

8、分散式鎖

場景描述:再線上程高併發下,生產一定業務含義的唯一訂單編號,如:2018-04-16-16-31-50-01,年月日時分秒序號,目的就是保證高併發狀態下每一個使用者建立的訂單唯一