ZK的數(shù)據(jù)存儲(chǔ)庐氮、集群間通信及數(shù)據(jù)同步
zk中所有數(shù)據(jù)都是放在內(nèi)存中的谒获,當(dāng)然也有snapshot众弓、事務(wù)日志容为。
snapshot:
用于記錄zk服務(wù)器上某一時(shí)刻的全量?jī)?nèi)存數(shù)據(jù)內(nèi)容乓序。snapshot.2c021384ce,后綴也是一個(gè)zxid坎背,表示本次數(shù)據(jù)快照開(kāi)始時(shí)刻的服務(wù)器最新zxid替劈。沒(méi)有預(yù)分配機(jī)制,所有內(nèi)容都是有效的得滤。
事務(wù)日志:
每次事務(wù)操作都會(huì)有一條記錄保存在事務(wù)日志文件中陨献,文件大小都是64M(包含填充,也就是預(yù)分配懂更,主要為了提高事務(wù)日志的寫(xiě)入效率眨业,不需要重新分配磁盤(pán)空間),日志后綴是一條zxid沮协,也就是寫(xiě)入該事務(wù)文件的第一條事務(wù)記錄的zxid
數(shù)據(jù)同步
數(shù)據(jù)的同步都是由leader發(fā)起坛猪,簡(jiǎn)單來(lái)說(shuō),learner啟動(dòng)時(shí)都會(huì)向leader建立連接皂股,由leader分別對(duì)followe和observer進(jìn)行數(shù)據(jù)同步,有全量同步命黔、僅回滾同步呜呐、先回滾再差異化同步就斤、直接差異化同步四種同步指令。
leader發(fā)送給learner的差異化數(shù)據(jù)同步指令(proposal)蘑辑,如果learner同意就會(huì)返回ack洋机,如果leader收到ack,就會(huì)同時(shí)進(jìn)入過(guò)半策略的等待階段—leader會(huì)和其他learner服務(wù)器進(jìn)行上述同樣的數(shù)據(jù)同步流程洋魂,知道集群中有過(guò)半的learner機(jī)器響應(yīng)了leader的這個(gè)ack消息绷旗。
一旦滿(mǎn)足過(guò)半策略后,leader服務(wù)器就會(huì)向所有已經(jīng)完成數(shù)據(jù)同步的learner機(jī)器發(fā)送一個(gè)uptodate指令副砍,用來(lái)通知learner已經(jīng)完成了數(shù)據(jù)同步衔肢,同時(shí)集群中已經(jīng)有過(guò)半機(jī)器完成了數(shù)據(jù)同步,集群已經(jīng)具備了對(duì)外服務(wù)的能力了豁翎。
learner在接收到這個(gè)uptodate指令后角骤,會(huì)終止數(shù)據(jù)同步流程,然后向leader再反饋一個(gè)ack消息心剥。
請(qǐng)求
如果集群中的follewer接收到來(lái)自客戶(hù)端的寫(xiě)請(qǐng)求邦尊,follower會(huì)將消息通過(guò)REQUEST請(qǐng)求給到leader,統(tǒng)一交給leader來(lái)處理优烧,leader處理結(jié)束之后蝉揍,會(huì)再次廣播數(shù)據(jù)。