<label id="2a06w"><tt id="2a06w"></tt></label><label id="2a06w"><tt id="2a06w"><em id="2a06w"></em></tt></label><menu id="2a06w"></menu>
  • <dfn id="2a06w"><var id="2a06w"><label id="2a06w"></label></var></dfn>
    <sup id="2a06w"><button id="2a06w"><em id="2a06w"></em></button></sup>
    <dfn id="2a06w"><var id="2a06w"></var></dfn>
    <dfn id="2a06w"></dfn>
  • <dfn id="2a06w"><code id="2a06w"><ins id="2a06w"></ins></code></dfn>
  • <small id="2a06w"><samp id="2a06w"></samp></small>
  • <dfn id="2a06w"><table id="2a06w"><center id="2a06w"></center></table></dfn>
    <label id="2a06w"><tt id="2a06w"><em id="2a06w"></em></tt></label>
    <strike id="2a06w"><form id="2a06w"></form></strike>
    <menu id="2a06w"><tt id="2a06w"></tt></menu>

    將想法與焦點和您一起共享

    分布式化網(wǎng)站遇到的典型問題發(fā)布者:本站     時間:2019-03-27 20:03:19

    在大型分布式互聯(lián)網(wǎng)系統(tǒng)中,Session問題是典型的分布式化過程中會遇到的難題。因為Session數(shù)據(jù)必須在服務(wù)端的機器中共享,并要保證狀態(tài)的一致性。
     
    ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),它是一個為分布式應(yīng)用提供一~致性服務(wù)的軟件,所提供的功能包括:配置維護、域名服務(wù)、分布式同步、組服務(wù)等。下面我們介紹一下典型的分布式環(huán)境下遇到的一些典型問題的解決辦法。


     
    1.集群管理(Group Membership)
     
    ZooKeeper能夠很容易地實現(xiàn)集群管理的功能,如圖1.15所示。如果多臺Server組成一個服務(wù)集群,那么必須有一個“總管”知道當前集群中每臺機器的服務(wù)狀態(tài),一旦有機器不能提供服務(wù),就必須知會集群中的其他集群,并重新分配服務(wù)策略。同樣,當集群的服務(wù)能力增加時,就會增加一臺或多臺Server, 這些也必須讓“總管”知道。
     
    Zo0 Keeper不僅能夠維護當前集群中機器的服務(wù)狀態(tài),而且能夠選出一個“總管”,讓“總管”來管理集群一這就是 Zookeeper I的另一個功能 Leader Election。
     
    它的實現(xiàn)方式是在 Zookeeper上創(chuàng)建一個 EPHEMERAL類型的目錄節(jié)點,然后每個 Server在它們創(chuàng)建目錄節(jié)點的父目錄節(jié)點上調(diào)用 getchildrenf String path, Boolean watch)方法并設(shè)置 watch為true。由于是 EPHEMERAL目錄節(jié)點,當創(chuàng)建它的 Server死去時,這個目錄節(jié)點也隨之被刪除,所以 Children將會變化;這時 get Children上的Watch將會被調(diào)用,通知其他 Server某臺 Server已死了。新增 Server也是同樣的原理。
     
    那么,Z0 Keeper如何實現(xiàn) Leader Election,也就是選出一個 Master Server呢?和前面的一樣,每臺 Server創(chuàng)建一個 EPHIEMERAL目錄節(jié)點,不同的是它還是一個SEQUENTIAL目錄節(jié)點,所以它是個 EPHEMERAL SEQUENTIAL目錄節(jié)點。之所以它是 EPHEMERAL SEQUENTIAL目錄節(jié)點,是因為我們可以給每臺 Server g編號。
     
    我們可以選擇當前最小編號的 Server為 Master,假如這個最小編號的 Server死去,由于它是 EPHEMERAL節(jié)點,死去的 Server對應(yīng)的節(jié)點也被刪除,所以在當前的節(jié)點列表中又出現(xiàn)一個最小編號的節(jié)點,我們就選擇這個節(jié)點為當前 Master。這樣就實現(xiàn)了動態(tài)選擇 Master,避免傳統(tǒng)上單 Master容易出現(xiàn)的單點故障問題。
     
    2.共享鎖( Locks)
     
    在同一個進程中,共享鎖很容易實現(xiàn),但是在跨進程或者不同 Server的情況下就不好實現(xiàn)了。然而 Zookeeper能很容易地實現(xiàn)這個功能,它的實現(xiàn)方式也是通過獲得鎖的 Server創(chuàng)建一個 EPHEMERAL SEQUENTIAL目錄節(jié)點,再通過調(diào)用 getchildren方法,查詢當前的目錄節(jié)點列表中最小的目錄節(jié)點是否是自己創(chuàng)建的目錄節(jié)點,如果是自己創(chuàng)建的,那么它就獲得了這個鎖;如果不是,那么它就調(diào)用 exists(String path,Boolean watch)方法,并監(jiān)控 Zookeeper上目錄節(jié)點列表的變化,直到使自己創(chuàng)建的節(jié)點是列表中最小編號的目錄節(jié)點,從而獲得鎖。釋放鎖很簡單,只要刪除前面它自己所創(chuàng)建的目錄節(jié)點即可。
     
    3.隊列管理
     
    Keener可以外理以下兩種型的隊列
     
    其一,同步隊列。即當一個隊列的成員都聚齊時,這個隊列才可用,否則一直等待所有成員到達。
     
    其二,隊列按照FIFO方式進行入隊和出隊操作,例如實現(xiàn)生產(chǎn)者和消費者模型。用Zo0 Keeper實現(xiàn)同步隊列的實現(xiàn)思路如下。
     
    創(chuàng)建一個父目錄/ synchronizing,每個成員都監(jiān)控標志( Set Watch)位目錄/ synchronizing/start是否存在,然后每個成員都加人這個隊列;
     
    加人隊列的方式就是創(chuàng)建 /synchronizing/member i的臨時目錄節(jié)點,之后每個成員獲取/ synchronizing目錄的所有目錄節(jié)點,也就是 member_i;?判斷i的值是否已經(jīng)是成員的個數(shù),如果小于成員個數(shù)等待/ 'synchronizing/ start的出現(xiàn),如果已經(jīng)相等就創(chuàng)建 /synchronizing/star。
     
    用 Zookeeper實現(xiàn)FIFO隊列的思路如下。
     
    在特定的網(wǎng)站制作目錄下創(chuàng)建 SEQUENTIAL類型的子目錄 queue I,這樣就能保證所有成員加入隊列時都是有編號的;出隊列時通過 get Children()方法返回當前所有隊列中元素,再消費其中最小的一個,這樣就能保證FIFO。



    選擇我們,優(yōu)質(zhì)服務(wù),不容錯過
    1. 優(yōu)秀的網(wǎng)絡(luò)資源,強大的網(wǎng)站優(yōu)化技術(shù),穩(wěn)定的網(wǎng)站和速度保證
    2. 15年上海網(wǎng)站建設(shè)經(jīng)驗,優(yōu)秀的技術(shù)和設(shè)計水平,更放心
    3. 全程省心服務(wù),不必擔心自己不懂網(wǎng)絡(luò),更省心。
    ------------------------------------------------------------
    24小時聯(lián)系電話:021-58370032
    99人妻中文字幕视频在,亚洲无码视频在线免费看,久久国产乱子伦免费精品,日本中文字幕色视频网站
    <label id="2a06w"><tt id="2a06w"></tt></label><label id="2a06w"><tt id="2a06w"><em id="2a06w"></em></tt></label><menu id="2a06w"></menu>
  • <dfn id="2a06w"><var id="2a06w"><label id="2a06w"></label></var></dfn>
    <sup id="2a06w"><button id="2a06w"><em id="2a06w"></em></button></sup>
    <dfn id="2a06w"><var id="2a06w"></var></dfn>
    <dfn id="2a06w"></dfn>
  • <dfn id="2a06w"><code id="2a06w"><ins id="2a06w"></ins></code></dfn>
  • <small id="2a06w"><samp id="2a06w"></samp></small>
  • <dfn id="2a06w"><table id="2a06w"><center id="2a06w"></center></table></dfn>
    <label id="2a06w"><tt id="2a06w"><em id="2a06w"></em></tt></label>
    <strike id="2a06w"><form id="2a06w"></form></strike>
    <menu id="2a06w"><tt id="2a06w"></tt></menu>