將想法與焦點(diǎn)和您一起共享

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

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


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



選擇我們,優(yōu)質(zhì)服務(wù),不容錯過(guò)
1. 優(yōu)秀的網(wǎng)絡(luò )資源,強大的網(wǎng)站優(yōu)化技術(shù),穩定的網(wǎng)站和速度保證
2. 15年上海網(wǎng)站建設經(jīng)驗,優(yōu)秀的技術(shù)和設計水平,更放心
3. 全程省心服務(wù),不必擔心自己不懂網(wǎng)絡(luò ),更省心。
------------------------------------------------------------
24小時(shí)聯(lián)系電話(huà):021-58370032
最新国产精品第二页_色资源av中文无码先锋_中国xx爽69护士_日韩欧美亚洲每日更新在线观看