一、背景
場景:1、 服務位址如何維護;
-- 服務啟動的時候,註冊到乙個服務中;key,服務名 value 若干個http位址 ;
2、如何對目標服務負載均衡
-- 從註冊服務中拿到目標服務位址列表,通過輪詢或者隨機演算法得到乙個位址;
3、服務 的動態感知(目標服務可能宕機)
-- 心跳機制;註冊中心定期和客戶端心跳,如果沒有返回,就認為掛掉,註冊中心再push或者客戶端pull位址列表;
二、實現框架 zookeeper(其他的有eureka/consul)
zookeeper的背景:
1、zk真正用意是 分布式協調元件; (基於google chubby 不是開源的, 解決分布式一致性問題, 分布式鎖 ;幾個客戶端去 chubby申請乙個key,第乙個客戶端成功得到就是master,原理類似分布式鎖);後來 雅虎實現類似chubby的功能zookeeper,後來捐獻給apache;zookeeper集群,帶中心節點的集群(kafka,es),不帶中心節點的集群(redis)
定義一種協議(paxos)
2、資料結構 ,樹形結構,每個節點進行編號;
zookeeper的設計
1、解決單點問題,集群 master/salve leader/follower/observer
2、資料同步 (過半的節點成功,才進行資料提交 observer不參與投票)
3、leader選舉演算法(一致性演算法)zab協議 observer不參與投票
4、2pc協議
zookeeper基本特性
節點就是乙個資料node(key-value)
1、建立節點 順序節點 持久化 臨時節點 同一級別不能重複 臨時節點不能存在子節點 2、刪除節點 3、修改節點
4、watcher 通過對get -w 進行監聽,處理一次,就不再監聽了,配合臨時節點,可以做動態感知;
5、master節點 >>zookeeper節點,create lock後,使用完後,會釋放該鏈結(臨時節點的特性),這樣剩下的節點來搶鎖,會帶來 驚群效應; 可以通過對客戶端節點進行順序儲存,每個節點監控前乙個節點;
6、acl
操作許可權,read=1 write=2...
schema 許可權模式 ip/digest/world/super
7、watcher 機制
針對資料節點進行監聽,然後通知客戶端;zookeeper new的時候就可以增加watch機制;
原理:客戶端通過getdata,或者 exists,或者getchildren註冊通知事件到 outgoingqueue佇列中,然後sendthread 將佇列中的資料傳送到 zk server (nioservercnxnfactory),註冊watch事件,
zookeeper的應用
1、提供服務註冊和發現; 利用節點特性 持久和臨時節點特性 ;
2、給別的應用程式提供master選舉;
會建立一組臨時有序節點 ,最小的節點就是master,後面的監聽前一節點;
場景:多節點的定時排程;
zookeeper本身也是分leader-follower的,基於zab協議;事務請求只能是leader節點;
zab協議:崩潰恢復,已經被丟棄的資訊需要放棄,那就選舉zxid是最大的; 原子廣播; 重新選舉後,epoch會增加;
3、提供實現分布式鎖;
會建立一組臨時有序節點 ,最小的節點獲得鎖,後面的監聽前一節點;interprocessmutx;和master選舉乙個原理,都是利用臨時有序的最小節點;
zookeeper的一致性
順序一致性:在zk伺服器上時間上值一致的,通過【佇列、zxid】實現順序一致 性;
lead選舉
myid(sid)/epoch(時鐘週期)/選舉狀態(looking|following|leading|observing)
選舉流程:單個節點先選自己,然後把訊息廣播其他節點,各自進行比較,按照規則(先去比較epoch;zxid最大為leader;myid最大為leader)進行比較;進行下一輪(epoch會+1)的投票,再按少數服從多數的原則,選出leader;
quorumpeermain啟動類,暴露2181埠後;開始leade選舉;.fastleaderelection負責leader邏輯的判斷;quorumcnxmanager 負責通訊;
** 的執行流程:
缺點:選舉的時候,服務不可用;寫多讀少的場景 leader有效能瓶頸;
註冊中心Zookeeper
註冊中心負責服務位址的註冊與查詢,相當於目錄服務,服務提供者和消費者只在啟動時與註冊中心互動,註冊中心不 請求,壓力較小。zookeeper註冊中心的作用主要是註冊和發現服務的作用,埠2181 對cline端提供服務 3888 選舉leader使用 2888 集群內機器通訊使用 leader監聽此埠...
基於zookeeper的服務註冊中心
基於zookeeper的服務註冊中心 本文介紹基於zookeeper的dubbo服務註冊中心的原理。1.zookeeper中的節點 zookeeper是乙個樹形結構的目錄服務,支援變更推送,因此非常適合作為dubbo服務的註冊中心。注 在zookeeper中,節點分為兩類,第一類是指構成集群的機器,...
Zookeeper註冊中心的搭建
zookeeper是乙個分布式的,開放原始碼的分布式應用程式協調服務,是google的chubby乙個開源的實現,是hadoop和hbase的重要元件。它是乙個為分布式應用提供一致性服務的軟體,提供的功能包括 配置維護 名字服務 分布式同步 組服務等。之所以把本文歸類為dubbo是因為,博主關於du...