保證執行緒安全

ZooKeeper初始化示意圖

InterProcessMutex
1 public static void main(String[] args) { 2 CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() 3 // 客戶端連接任意zk 節點都行,也可以指定集群 4 .connectString(CommonConstants.CONNECT_URL) 5 .sessionTimeoutMs(5000) 6 // 重試策略 7 .retryPolicy(new ExponentialBackoffRetry(1000, 3)) 8 .connectionTimeoutMs(4000).build(); 9 // 表示啟動 10 curatorFramework.start(); 11 /** 12 * locks表示命名空間 13 * 14 * 鎖的獲取邏輯是放在zookeeper上 15 * 當前鎖是跨行程可見 16 */ 17 InterProcessMutex lock = new InterProcessMutex(curatorFramework, "/locks"); 18 for (int i = 0; i < 10; i++) { 19 new Thread(()->{ 20 System.out.println(Thread.currentThread().getName() + "->" + "嘗試搶占鎖"); 21 try { 22 // 搶占鎖,沒有搶占到,則阻塞 23 lock.acquire(); 24 System.out.println(Thread.currentThread().getName() + "->" + "獲取鎖成功"); 25 } catch (Exception e) { 26 e.printStackTrace(); 27 } 28 // 釋放鎖 29 try { 30 Thread.sleep(4000); 31 lock.release(); 32 System.out.println(Thread.currentThread().getName() + "->" + "釋放鎖成功"); 33 } catch (Exception e) { 34 e.printStackTrace(); 35 } 36 },"t-"+i).start(); 37 } 38 39 }
zookeeper leader 選舉
kafka -> master/slave | kafka+zookeeper

Leader latch
利用臨時有序節點
Leader selector
利用 -> curator.recepis 中鎖的實作
-
dubbo + zookeeper 注冊中心,注冊服務
-
dubbo + zookeeper 配置中心,元資料管理
-
實作分布式鎖(Curator)
-
leader 選舉(定時任務的互斥執行)
-
leader latch
-
-
leader selector(釋放leader權限知乎,仍然可以繼續參與選舉)
zookeeper實際應用以及原理分析
Zookeeper的基本原理
資料模型
-
弱一致性模型
-
2 PC協議(原子性)
-
過半提交
ZABZAB(zookeeper atomic Broadcast)
-
leader選舉
-
資料同步
-
崩潰恢復 (looking)
-
原子廣播
-
訊息廣播
-
Zxid(64)
-
observer(不參與投票和ack,只和leader保持資料 同步)
崩潰恢復
-
選舉出新leader(選舉誰作為leader)
-
資料同步
Zxid(*)
-
已經被處理的訊息不能丟失
-
被丟棄的訊息不能再次出現
如何實作?(leader)
-
zxid最大(和leader選舉有關系?)
-
Epoch ->term(raft).zxid()
Zxid(事務id)
-
64位
-
高32位是epoch、低32位代表遞增是不編號

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/166181.html
標籤:其他
上一篇:制作pip離線源
