初探分布式環境的指揮官ZooKeeper
目錄
- 1. 從單機到集群,分布式環境中的挑戰
- 1.1 集中式的特點
- 1.2 集中式的痛點
- 1.3 從單體到SOA的轉變
- 1.4 分布式服務總體框架
- 1.5 分布式應用概述
- 2. ZK基本概念及核心原理
- 2.1 ZK自我介紹
- 2.2 ZK基本概念
- 3. ZK應用舉例
- 3.1 應用舉例
- 3.2 項目中的應用
- 4 小結
1. 從單機到集群,分布式環境中的挑戰
1.1 集中式的特點
- 部署結構簡單
- 協作相對簡單,不存在分布式協作問題
- 單點故障問題
1.2 集中式的痛點
隨著業務的發展和演進,將所有業務集中實現在一個應用上的做法往往滿足不了公司及業務發展的需要,單一的系統已經不足以承載大量的業務。 (尤其是互聯網企業)
- 業務模塊邊界不清,代碼耦合嚴重,不利於維護;
- 一個大的應用工程不利於版本叠代開發和發布。
1.3 從單體到SOA的轉變
面向服務架構( service-oriented architecture, SOA )
通過系統拆分實現SOA架構的價值,沈澱出一批穩定的後臺服務,通過疊加復用又可以快速響應用戶的前端需求。
而面向服務體系架構能夠落地的基礎技術之一,就是分布式服務框架。
1.4 分布式服務總體框架
- 服務拆分後的基本技術問題: 如何實現服務之間的通信?
- RPC(RMI、HttpClinet等)
- 另一方面,如何實現服務治理?
- 一般而言包括:服務自動發現、自動下線、服務註冊中心、負載均衡等功能。
1.5 分布式應用概述
分布式應用可以再給定時間(同時)在網絡的多個系統上運行,通過協調它們以快速有效的完成特定任務。
分布式應用正在運行的一組系統稱為集群,集群中運行的每臺機器稱為節點。
分布式應用有Server和Client兩部分。Server是分布式的,有通用的接口,以便Client可以連接到集群中的任何服務器並獲得相同的結果。
分布式應用的優點
- 可靠性 單個或幾個系統的故障不會使整個系統出現故障。
- 可擴展性 可以在需要時增加性能,通過添加更多機器,在應用程序配置中進行微小的更改。
- 透明性 隱藏系統的復雜性,並將其顯示為單個實體/應用程序。
分布式應用的挑戰
- 競爭條件 兩個或多個機器嘗試執行特定任務,實際上只需在任意給定時間由單個機器完成。例如,共享資源只能在任意給定時間由單個機器修改。
- 死鎖 兩個或多個操作等待彼此無限期完成。
- 數據一致性 數據的部分失敗。
- 網絡的不穩定性
2. ZK基本概念及核心原理
2.1 ZK自我介紹
2.2 ZK基本概念
2.2.1. 客戶端-服務器架構
2.2.2 數據結構
2.2.3 Session(會話)、工作流
2.2.4 監視
3. ZK應用舉例
3.1 應用舉例
分布式應用程序可以基於它實現:
- 數據發布/訂閱
-負載均衡 - 命名服務
- 分布式協調/通知
- 集群管理
- 分布式鎖和分布式隊列等
例,
Hadoop:依靠ZooKeeper進行配置管理和協調。
Hbase: 通過集中式配置管理和分布式互斥機制來幫助主機和區域服務器跟蹤分布式數據的狀態。
…
3.2 項目中的應用
Zookeeper作為註冊中心
對內網四大服務(sso、web、push和collect)相互通信的RPC接口進行管理。
1. 系統啟動時RPC接口在ZK中註冊(create node)
2. 客戶端從ZK獲取對應的RPC接口。進行調用。
githup上有個類似的demo參考:https://github.com/luxiaoxun/NettyRpc
交互流程示意圖:
4 小結
重點回顧:ZK數據模型、watch機制。
能幫助我們實現:分布式一致性、服務治理功能等。
參考資料:
《從Paxos到Zookeeper分布式一致性原理與實踐》
《分布式服務框架原理與實踐》
w3cschool zookeeper教程
初探分布式環境的指揮官ZooKeeper