講義早期我們使用單體架構(gòu)即所有署在一臺服務(wù)器一個進程中隨著互聯(lián)網(wǎng)_第1頁
講義早期我們使用單體架構(gòu)即所有署在一臺服務(wù)器一個進程中隨著互聯(lián)網(wǎng)_第2頁
講義早期我們使用單體架構(gòu)即所有署在一臺服務(wù)器一個進程中隨著互聯(lián)網(wǎng)_第3頁
講義早期我們使用單體架構(gòu)即所有署在一臺服務(wù)器一個進程中隨著互聯(lián)網(wǎng)_第4頁
講義早期我們使用單體架構(gòu)即所有署在一臺服務(wù)器一個進程中隨著互聯(lián)網(wǎng)_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

分布式架構(gòu),多個服務(wù)分別部署在不同機器的不同進程中。2、zookeeperzoeepr數(shù)據(jù)發(fā)布訂閱、負載均衡、命名服務(wù)、集群管理分布式鎖、分布式隊列等功能。zoeepr性?如圖在上圖中有用戶s在DB中修改blace=90,如果sr下一次a請求到DB2數(shù)據(jù),此時DB1的數(shù)據(jù)還沒及時更新到DB2中,就會造成整個數(shù)據(jù)庫集群數(shù)據(jù)不一致。數(shù)據(jù)一致性分為強一致性和最終一致性,強一致性指的如果數(shù)據(jù)不一致,就不對外提供數(shù)據(jù)服務(wù),保證用戶的數(shù)據(jù)始終是一致的。數(shù)據(jù)強一致性只需要通過鎖機制即可解決,在案例中通過在DB沒有從DB1同步數(shù)據(jù)之前上鎖,不對外提供讀操作。只有當同步完成以后才對外提供服務(wù)。而最終一致性要求數(shù)據(jù)最終同步即可,沒有實時性要求。3、CAP(Partition為系統(tǒng)不可用個網(wǎng)絡(luò)都發(fā)生故障。應(yīng)用而言,必須保證P,所以要么滿足AP模型、要么滿足CP模型事務(wù)需要跨多個分布式節(jié)點時,為了保證事務(wù)的CI特性,需要出一個協(xié)調(diào)者來協(xié)調(diào)分布式各個點的調(diào)度,基于這個思想衍生了多種一致性協(xié)議:反饋根據(jù)一階段各個參與者節(jié)點反饋的ck如果所有參與者節(jié)點反饋ack事務(wù)提交:4、協(xié)調(diào)者接受各個參與者節(jié)點的ack后,完成事務(wù)如果分布式節(jié)點出現(xiàn)網(wǎng)絡(luò)分區(qū),某些參與者未收到cmmt提交命令。則出現(xiàn)部分參與者完成數(shù)據(jù)提交。未收到mmit令的參與者則無法進行事務(wù)提交,整個分布式系統(tǒng)便出現(xiàn)了數(shù)據(jù)不一致性現(xiàn)象。 階段一 階段二 協(xié)調(diào)者向所有參與者節(jié)點發(fā) 各參與者節(jié)點接受 任意一個參與者節(jié)點反饋給協(xié)調(diào)者響應(yīng)N時,或者在等待超時后,協(xié)調(diào)者還未收到參與者的反饋,就中斷事務(wù),中斷事務(wù)分為兩步:階段三 協(xié)調(diào)者向所有參與者節(jié)點發(fā) 各參與者節(jié)點接受 參與者完成事務(wù)回滾以后,向協(xié)調(diào)者發(fā)送PaxosPs算法是LslieLamport199年一種一致性算法,該算法是一種提高分布式系統(tǒng)容錯性的一致性算法,解決了3P中網(wǎng)絡(luò)分區(qū)的問題,pos算法可以在節(jié)點失效、網(wǎng)絡(luò)分區(qū)、網(wǎng)絡(luò)延遲等各種異常情況下保證所有節(jié)點都處于同一狀態(tài),同時pos算法引入了過半理念,即少數(shù)服從多數(shù)原則。BasicPaxosMultiPaxosFastPaxos在aos角色。proposerccetr:提案的表決者,即是否ccept該提案,只有超過半數(shù)以上的ccetr受了案,該提案才被認為被“選定” lrneprepare 2>每個表決者都保存自己的accept的最大提案編號mxN,當表決者收到pepaNN與mxN的值,若N小于xN,則提案已過時,pepaN請求。若N大于等于N,則接受提案,并將該表決者曾經(jīng)接受過的編號最大的提案Posl(yi,xN,vl)反饋給提議者:其中myi表示表決者accetor的標識i,axN表示接受過的最大提案編號mxN,vl表示提案內(nèi)容。若當前表決者未曾accept任何提議,會將poosl(yi,nll,ll)反饋給提議者。<>提議者rpsl發(fā)出rear(N,若收到超過半數(shù)表決者ccetr的反饋,prpsl將真正的提案內(nèi)容pops(N,vu)發(fā)送給所有表決者。2>表決者ccetr接受提議者發(fā)送的poposal(N,vlue)提案后,會將自己曾經(jīng)accept提案編號N和反饋過的pepe的最大編號,若N大于這兩個編號,則當前表決者ccept該提案,并反饋給提議者。否則該提議。 MultiPaxos:唯一的proposor,即ZAB協(xié)議(FastZAB(zookeeperatomicbroadcast):是一種支持恢復(fù)的原子廣播協(xié)議,基于Fastpaxos實ZooKeeper使用單一主進程Ldr用于處理客戶端所有事務(wù)請求,,即寫請求。當服務(wù)器數(shù)據(jù)發(fā)生變更好,集群采用ZAB原子廣播協(xié)議,以事務(wù)提交popsl的形式廣播到所有的副本進程,每一個事務(wù)分配一個全局的遞增的事務(wù)編號xi。若客戶端提交的請求為讀請求時,則接受請求的節(jié)點直接根據(jù)自己保存的數(shù)據(jù)響應(yīng)。若是寫請求,且當前節(jié)點不是leadr,那么該節(jié)點就會將請求轉(zhuǎn)發(fā)給leader,leader會以提案的方式廣播此寫請求,如果超過半數(shù)的節(jié)點同意寫請求,則該寫請求就會提交。leadr會通知所有的訂閱者同步數(shù)據(jù)。bsevr可以理解為沒有投票權(quán)的flowr,主要職責(zé)是協(xié)助lwr處理讀請求。那么當整個zk集群讀請求負載很高時,為什么不增加lwr節(jié)點呢?原因是增加lwr節(jié)點會讓eaer在提出寫請求提案時,需要半數(shù)以上的lwr投票節(jié)點同意,這樣會增加ledr和flowr的通信通信壓力,降低寫操作效率。當服務(wù)啟動或后,zk進入恢復(fù)狀態(tài),leader,leadr選出后,將完成leadr他機器的數(shù)據(jù)同步,當大多數(shù)srvr完成和leadr的同步后,恢復(fù)模式結(jié)束一旦er已經(jīng)和多數(shù)的Folwer進行了狀態(tài)同步后,進入廣播模式。進入廣播模式后,如果有新加入的服務(wù)器,會自動從leader中同步數(shù)據(jù)。leadr在接收客戶端請求后,會生成事務(wù)提案廣播給其他機器,有超過半數(shù)以上的flwer同意該提議后,再提交事務(wù)。leader無需等待所有的follower的ack收到各個服務(wù)器的投票后,判斷該投票有效性,比如是否是本輪投票,是否是looking狀態(tài)處理投票,pk別人的投票和自己的投票比較規(guī)則xid>myid“取大原則”leader掛掉后,集群中其他follower會將狀態(tài)從FOLLOWING變?yōu)長OOKING,重新進入一旦進入廣播模式,集群中非lead節(jié)點接受到事務(wù)請求,首先會將事務(wù)請求轉(zhuǎn)發(fā)給服務(wù)器,leadr服務(wù)器為其生成對應(yīng)的事務(wù)提案ppsl,并發(fā)送給集群中其他節(jié)點,如果過半則事務(wù)提交;lead發(fā)送給flwer的提案是有序的,lader會創(chuàng)建一個IFO隊列,將提案順序?qū)懭腙犃兄邪l(fā)送給flwerleader接收到過半ack后 向所有 發(fā) mit,通知每個follower執(zhí)行本地事5、zookeeperzookeeper安裝以linux環(huán)境為例,windows1)安裝Alt+P進入SFTP,輸入putd:\zookeeper-3.4.6.tar.gz上傳,d:\zookeeper-3.4.6.tar.gzzookeepertartar-zxvfzookeeper- cdcdmvzoo_sample.cfg進入 ./zkServer.sh./zkServer.sh./zkServer.sh./zkServer.sh./zkServer.sh./zkServer.sh我們通常會搭建偽集群,也就是把所有的服務(wù)都搭建在一臺虛擬機上,用端口進行區(qū)分。將Zookeeper解壓到/usr/local/zkcluster,創(chuàng)建data ,將conf下zoo_sample.cfg三份文件并改名為zoo1.cfg、zoo2.cfg、zoo3.cfg在解壓后的 下創(chuàng)建 [root@localhost~]#cddata[root@localhost~]#mkdirdata1[root@localhost~]#mkdirdata2[root@localhost~]#mkdir配置每一個Zookeeper的 Port分別為21812182修改/usr/local/zookeeper-cluster/zookeeper-修改/usr/local/zookeeper-cluster/zookeeper-修改/usr/local/zookeeper-cluster/zookeeper-在每個zookeeper的data 下創(chuàng)建一個myid文件,內(nèi)容分別是1、2、3。這個文件就是記錄在每一個zookeeper的zoo.cfg配置客戶端端口 6、zookeeper持久 持久化順序編 客戶端與zep斷開連接后,該節(jié)點依舊存在,Zep會給該節(jié)點按照順序編號臨時 節(jié)點(EPHEMERAL) 使用ls命令來查看當前znodelslspathls2ls2path-s-egetgetpathmavenZooKeeperzk=newconnectString,intWatcherwatcher)創(chuàng)建zokeper連接,concSing表示連接的zokepr服務(wù)器的地址,sessinimeOt指定會話的的超時時間,Wachr配置Stringcreate(Stringpath,byte[]data,List 節(jié)點path,并給它設(shè)置數(shù)據(jù),CreateMode標識有 節(jié)點,分別是PERSISTENT:持久化 節(jié)點會根據(jù)當前已近存在的節(jié)點數(shù)自動加1, 錄節(jié)點,一旦創(chuàng)建這個節(jié)點的客戶端與服務(wù)器端口也就是session超Statexists(Stringpath,booleanwatch)判斷某個path是否存在,并設(shè)置是否這個 watcher是在創(chuàng)建ZooKeeper實例時指定的watcher,exists方法還Statexists(String 節(jié)點設(shè)置特定的watcher,Watcher在ZooKeeper是一個功能,Watcher可以節(jié)點的數(shù)據(jù)變化 在這 節(jié)點上的Watcher,從而每個客戶端都很快知道它所關(guān)注voiddelete(Stringpath,int刪除path對應(yīng)的 節(jié)點,version為-1可以匹配任何版本,也就刪 path,booleanwatch)獲取指定path下的所有子 節(jié)點,同樣getChild

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論