一種基于Zookeeper實現(xiàn)Leader選舉的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于Zookeeper實現(xiàn)Leader選舉的方法,屬于電子商務(wù)技術(shù)領(lǐng)域。
【背景技術(shù)】
[0002]隨著中國經(jīng)濟的發(fā)展,人們生活水平的提高,人們對于食品的需求大大增加,對于食品安全越來越關(guān)注,同時隨著社會進(jìn)程的加快,人們越來越忙碌,花在購買食品上的時間一再被壓縮,而花在選購健康食品上的時間就更少了,對于如何選購“放心菜”、“健康菜”更是缺乏經(jīng)驗。因此如何讓居民更便捷地買到健康、新鮮、放心的農(nóng)產(chǎn)品就成了廣大居民所關(guān)注的焦點,同時也是國家所關(guān)注的,近幾年,國家在為居民能便捷、安全地購買到食品方面出臺了很多政策,可見政府對于食品行業(yè)是相當(dāng)重視的。在此大環(huán)境下,“農(nóng)牧人”網(wǎng)站的投資人創(chuàng)辦了此網(wǎng)站,而為了適應(yīng)此平臺發(fā)展的需要,為了更好地為決策提供參考,更需要一套完善的信息化系統(tǒng)和商務(wù)平臺作支持。
[0003]“農(nóng)牧人”網(wǎng)站作為中國最早將居民日常必需的食品植入電子商務(wù)平臺理念的網(wǎng)站,其決策層高瞻遠(yuǎn)矚,率先使用信息化工具來對其業(yè)務(wù)流程進(jìn)行管理,已經(jīng)大致建立了日常業(yè)務(wù)工作流程化和自動化的規(guī)范標(biāo)準(zhǔn)。
[0004]但該網(wǎng)站在使用過程中主要有以下幾個方面的問題:1、系統(tǒng)流程設(shè)計不符合現(xiàn)有業(yè)務(wù)流程的要求;2、用戶操作不友好、不方便;3、原來的系統(tǒng)設(shè)計及架構(gòu)設(shè)計存在缺陷。由于原系統(tǒng)設(shè)計的局限性以及缺陷,使得系統(tǒng)不可避免地產(chǎn)生各種不穩(wěn)定的問題,從而需要根據(jù)軟件標(biāo)準(zhǔn)化的規(guī)范,對現(xiàn)有系統(tǒng)進(jìn)行盡可能多的優(yōu)化,以提高系統(tǒng)的性能。
【發(fā)明內(nèi)容】
[0005]針對現(xiàn)有技術(shù)存在的不足,本發(fā)明目的是提供一種基于Zookeeper實現(xiàn)Leader選舉的方法,能夠優(yōu)化系統(tǒng),使系統(tǒng)更加的穩(wěn)定,從而提高了系統(tǒng)的性能。
[0006]為了實現(xiàn)上述目的,本發(fā)明是通過如下的技術(shù)方案來實現(xiàn):
[0007]本發(fā)明的一種基于Zookeeper實現(xiàn)Leader選舉的方法,包括以下幾個步驟:
[0008](I)在每臺服務(wù)器上創(chuàng)建一個EPHEMERAL_SEQUENTIAL目錄節(jié)點,所述EPHEMERAL_SEQUENTIAL目錄節(jié)點給每臺服務(wù)器編號,并選擇當(dāng)前是最小編號的服務(wù)器作為Leader ;
[0009](2)當(dāng)這個最小編號的服務(wù)器死去,由于是EPHEMERAL節(jié)點,死去的服務(wù)器對應(yīng)的節(jié)點也被刪除,所以當(dāng)前的節(jié)點列表中又出現(xiàn)一個最小編號的節(jié)點,就選擇這個節(jié)點為當(dāng)前Leader,用于實現(xiàn)動態(tài)選擇Leader避免單Leader容易出現(xiàn)單點故障問題。
[0010]Zookeeper集群模式的配置項如下:
[0011]initLimit = 4
[0012]syncLimit = 3
[0013]server.1 = 192.168.211.1:2888:3888
[0014]server.2 = 192.168.211.2:2888:3888
[0015]initLimit:這個配置項是用來配置Zookeeper接受客戶端,初始化連接時最長能忍受多少個心跳時間間隔數(shù),當(dāng)已經(jīng)超過10個心跳的時間長度后Zooke^er服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗,總的時間長度就是4*2000 = 8秒;
[0016]syncLimit:這個配置項標(biāo)識Leader與Follower之間發(fā)送消息,請求和應(yīng)答時間長度,最長不能超過多少個tickTime的時間長度,總的時間長度就是3*2000 = 6秒;
[0017]server.A = B:C:D:其中A是一個數(shù)字,表示這個是第幾號服務(wù)器;B是這個服務(wù)器的ip地址;c表示的是這個服務(wù)器與集群中的Leader服務(wù)器交換信息的端口 ;D表示的是萬一集群中的Leader服務(wù)器掛了,需要一個端口來重新進(jìn)行選舉,選出一個新的Leader,而這個端口就是用來執(zhí)行選舉時服務(wù)器相互通信的端口 ;如果是偽集群的配置方式,由于B都是一樣,所以不同的Zooke^er實例通信端口號不能一樣,要給它們分配不同的端口號。
[0018]本發(fā)明針對現(xiàn)有的“農(nóng)牧人”網(wǎng)站目前的運營情況,對現(xiàn)有的業(yè)務(wù)流程進(jìn)行梳理,進(jìn)行業(yè)務(wù)流程重組(BPR),對平臺進(jìn)行流程再造和優(yōu)化;本發(fā)明以“農(nóng)牧人”網(wǎng)站整個信息平臺項目為整體,進(jìn)了充分、系統(tǒng)地優(yōu)化,充分考慮到系統(tǒng)擴展的銜接關(guān)系,采用的技術(shù)和體系結(jié)構(gòu),可保證業(yè)務(wù)信息系統(tǒng)將來的升級或擴展無縫聯(lián)接。
【附圖說明】
[0019]圖1為ZooKe印er配置管理結(jié)構(gòu)圖。
【具體實施方式】
[0020]為使本發(fā)明實現(xiàn)的技術(shù)手段、創(chuàng)作特征、達(dá)成目的與功效易于明白了解,下面結(jié)合【具體實施方式】,進(jìn)一步闡述本發(fā)明。
[0021]ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是google的Chubby 一個開源的實現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護、名字服務(wù)、分布式同步、組服務(wù)等。
[0022]ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯的關(guān)鍵服務(wù),將簡單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。
[0023]Zookeeper原理是以Fast Paxos算法為基礎(chǔ)的,paxos算法存在活鎖的問題,即當(dāng)有多個proposer交錯提交時,有可能互相排斥導(dǎo)致沒有一個proposer能提交成功,而FastPaxos作了一些優(yōu)化,通過選舉產(chǎn)生一個leader,只有l(wèi)eader才能提交propose,具體算法可見 Fast Paxosο
[0024]ZooKeeper的基本運轉(zhuǎn)流程如下:
[0025]1、選舉 Leader;
[0026]2、同步數(shù)據(jù);
[0027]3、選舉Leader過程中算法有很多,但要達(dá)到的選舉標(biāo)準(zhǔn)是一致的;
[0028]4、Leader 要具有最高的 zxid。
[0029]5、集群中大多數(shù)的機器得到響應(yīng)并follow選出的Leader。
[0030]Zookeeper 特點
[0031]在Zookeeper中,znode是一個跟Unix文件系統(tǒng)路徑相似的節(jié)點,可以往這個節(jié)點存儲或獲取數(shù)據(jù)。如果在創(chuàng)建znode時Flag設(shè)置為EPHEMERAL,那么當(dāng)創(chuàng)建這個znode的節(jié)點和Zookeeper失去連接后,這個znode將不再存在在Zookeeper里,Zookeeper使用Watcher察覺事件信息。當(dāng)客戶端接收到事件信息,比如連接超時、節(jié)點數(shù)據(jù)改變、子節(jié)點改變,可以調(diào)用相應(yīng)的行為來處理數(shù)據(jù)。Zookeeper的Wiki頁面展示了如何使用Zookeeper來處理事件通知,隊列,優(yōu)先隊列,鎖,共享鎖,可撤銷的共享鎖,兩階段提交
[0032]那么Zookeeper能作什么事情呢,簡單的例子:假設(shè)我們有20個搜索引擎的服務(wù)器(每個負(fù)責(zé)總索引中的一部分的搜索任務(wù))和一個總服務(wù)器(負(fù)責(zé)向這20個搜索引擎的服務(wù)器發(fā)出搜索請求并合并結(jié)果集),一個備用的總服務(wù)器(負(fù)責(zé)當(dāng)總服務(wù)器宕機時替換總服務(wù)器),一個web的cgi (向總服務(wù)器發(fā)出搜索請求)。搜索引擎的服務(wù)器中的15個服務(wù)器提供搜索服務(wù),5個服務(wù)器正在生成索引。這20個搜索引擎的服務(wù)器經(jīng)常要讓正在提供搜索服務(wù)的服務(wù)器停止提供服務(wù)開始生成索引,或生成索引的服務(wù)器已經(jīng)把索引生成完成可以搜索提供服務(wù)了。使用Zookeeper可以保證總服務(wù)器自動感知有多少提供搜索引擎的服務(wù)器并向這些服務(wù)器發(fā)出搜索請求,當(dāng)總服務(wù)器宕機時自動啟用備用的總服務(wù)器。
[0033]Zookeeper分布式服務(wù)框架是Apache Hadoop的一個子項目,它主要是用來解決分布式應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用配置項的管理等。
[0034]Zookeeper不僅可以單機提供服務(wù),同時也支持多機組成集群來提供服務(wù)。實際上Zooke印er還支持另外一種偽集群的方式,也就是可以在一臺物理機上運行多個Zookeeper實例,下面將介紹集群模式的安裝和配置。
[0035]Zookeeper的集群模式的安裝和配置也不是很復(fù)雜,所要做的就是增加幾個配置項。集群模式除了上面的三個配置項還要增加下面幾個配置項:
[0036]initLimit = 5
[0037]syncLimit = 2
[0038]server.1 = 192.168.211.1:2888:3888
[0039]server.2 = 192.168.211.2:2888:3888
[0040]initLimit:這個配置項是用來配置Zookeeper接受客戶端(這里所說的客戶端不是用戶連接Zookeeper服務(wù)器的客戶端,而是Zookeeper服務(wù)器集群中連接到Leader的Follower服務(wù)器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。當(dāng)已經(jīng)超過10個心跳的時間(也就是tickTime)長度后Zooke印er服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連