zk的服務(wù)器模式
仲裁模式:zk復(fù)制集群中所有服務(wù)器的數(shù)據(jù)亏推;大多數(shù)服務(wù)器保存數(shù)據(jù)成功后才返回客戶端成功
獨立模式:一個單獨的服務(wù)器裹粤,zk的狀態(tài)無法復(fù)制
會話
1.客戶端設(shè)置的監(jiān)視點和會話相關(guān)聯(lián)踢俄,會話到期后等待中的監(jiān)視點會移除
2.在對zk集合進(jìn)行任何操作之前官撼,必須先與服務(wù)器創(chuàng)建會話
3.當(dāng)會話因為某種原因終止時愧哟,這個會話建立的臨時節(jié)點也會消失
4.zk客戶端可以透明的將會話從一個服務(wù)器轉(zhuǎn)移到另一個服務(wù)器
5.會話提供了順序保證,保證一個會話中的請求按FIFO的順序執(zhí)行橡淑,但當(dāng)一個客戶端打開了多個會話不能保證FIFO
zk的架構(gòu)設(shè)計
zk架構(gòu)圖
節(jié)點角色
1.leader:
領(lǐng)導(dǎo)者負(fù)責(zé)投票的發(fā)起和決議,狀態(tài)的維護
2.learner:
follower:接受客戶端的請求咆爽,返回數(shù)據(jù)梁棠;參與投票;
observer:接受客戶端的讀請求斗埂,返回數(shù)據(jù)符糊,如果是寫請求會轉(zhuǎn)發(fā)給leader;不影響提議呛凶,不參與投票男娄;只同步leader的狀態(tài)(數(shù)據(jù))
observer和follower的區(qū)別是observer不參與選舉和投票;數(shù)據(jù)不同不到磁盤漾稀,每次重啟后需要全量同步數(shù)據(jù)模闲;引入observer的目的是在不犧牲寫的性能下,提高讀的性能
集群中唯一的leader節(jié)點崭捍,唯一對外負(fù)責(zé)寫請求尸折,集群中的節(jié)點都可以接受讀請求,learner節(jié)點接收到寫請求后會轉(zhuǎn)發(fā)給leader
數(shù)據(jù)一致性zab協(xié)議
zk通過zab原子廣播協(xié)議來保證每個節(jié)點的數(shù)據(jù)一致性;
zk對數(shù)據(jù)一直性的特點
- 順序一致性:嚴(yán)格按照事物發(fā)起的順序執(zhí)行操作
- 原子性:所有事物的請求結(jié)果在集群中所有節(jié)點上的應(yīng)用情況是一樣的
- 單一視圖:客戶端訪問任何一個節(jié)點獲取到的數(shù)據(jù)模型是一樣的
- 實時性:包含在極小的一段時間內(nèi)殷蛇,客戶端可以讀取到服務(wù)器最新的數(shù)據(jù)狀態(tài)实夹,如果需要實時需要客戶端調(diào)用sync方法
寫的示例圖
寫請求流程.png
1.leader節(jié)點接收到寫請求后會分配一個全局的事物ID(zxid),并發(fā)起提議粒梦,廣播給每個follower亮航;
2.follower接收到事物 請求后,寫入到本地事物日志匀们,根據(jù)事物的執(zhí)行結(jié)果缴淋,和zxid的有效性來返回是否接受這個提議;
3.leader接收到超過半數(shù)的節(jié)點(包括自己)的ack請求昼蛀,則執(zhí)行事物提交請求宴猾,自己執(zhí)行提交并且廣播給follower和同步狀態(tài)給observer;
4.follower接受到事物提交請求后叼旋,進(jìn)行事物的提交
leader選舉
選舉觸發(fā)的條件
當(dāng)集群初始化(崩潰恢復(fù))或者follower沒辦法聯(lián)系上leader時仇哆,每個follower會進(jìn)入選舉模式
選舉的原則
誰的數(shù)據(jù)最新,誰就具有優(yōu)先選舉為leader的資格夫植;
選舉的步驟
1.發(fā)起選票讹剔、每個節(jié)點都投自己 一票并提議別的節(jié)點也投自己一票
2.選票重投階段油讯、根據(jù)第一階段的投票決定投哪一個節(jié)點
3.選票統(tǒng)計、哪個節(jié)點收到了超過半數(shù)的投票延欠,則變更狀態(tài)為leader節(jié)點其余的節(jié)點變更為learner陌兑;
選舉完后,會進(jìn)行數(shù)據(jù)的同步由捎,只有數(shù)據(jù)同步完成后這個節(jié)點才會對外提供服務(wù)
數(shù)據(jù)的持久化
服務(wù)器只有強制沖刷事務(wù)到事務(wù)日志中兔综,才會確認(rèn)對應(yīng)的提議
數(shù)據(jù)的類型
- 內(nèi)存數(shù)據(jù)庫:全部數(shù)據(jù)存儲在內(nèi)存中默認(rèn)為1M
- 事務(wù)日志:每次寫操作完成后保存到內(nèi)存中的同時會寫入到事務(wù)日志
- 快照日志:當(dāng)事務(wù)日志的寫入次數(shù)超過一定數(shù)量后(默認(rèn)10W),會將內(nèi)存數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行一次備份狞玛,存儲到磁盤上软驰,這個文件是快照文件
快照文件是一個若一致性的文件,因為在進(jìn)行快照的時候服務(wù)器不會阻塞
通過快照日志和事務(wù)日志可以把任意zk節(jié)點還原到任意時間點的數(shù)據(jù)
寫操作的流程
- 接受寫操作:集群中的任意節(jié)點都可以接受寫操作心肪,但是當(dāng)非leader節(jié)點接收到寫請求后锭亏,會把當(dāng)前的請求轉(zhuǎn)發(fā)給leader節(jié)點
- 協(xié)調(diào)寫操作:leader接收到寫操作請求后,會為這次的寫分配一個唯一的事務(wù)ID(ZXID)然后把這次事務(wù)廣播出去
- 記錄數(shù)據(jù):當(dāng)大多數(shù)節(jié)點響應(yīng)這次事務(wù)提議后硬鞍,進(jìn)行事務(wù)的提交和內(nèi)存數(shù)據(jù)庫的應(yīng)用
- 記錄快照:當(dāng)事務(wù)日志記錄的次數(shù)達(dá)到一定數(shù)量后(默認(rèn)10W)慧瘤,將內(nèi)存數(shù)據(jù)庫進(jìn)行一次備份,持久化保存到磁盤上