Observers:让 ZooKeeper更具可伸缩性 | 时光机
戳藍字“CSDN云計算”關注我們哦!
時光機:搭載這部時光機,帶您回顧《程序員》大量優秀文章,重溫經典技術干貨,我們發現硬核技術永不過時,對于get要點、solve難題、提高自我,仍有非凡意義。
作者:Henry Robinson,Henry Robinson在紐約大學獲得計算機科學學士學位,在劍橋大學獲得語言。
譯者:王旭
導讀
時光機第02期,帶您了解 ZooKeeper更具可伸縮性的優勢。云計算時代,軟件開發人員面臨著越來越多分布式協作方面的問題。ZooKeeper是由Apache出品的一個分布式協作服務,新加入的Observer特性,進一步增強了ZooKeeper的可伸縮性。
ZooKeeper 是 由 Apache 出 品的一個分布式協作服務,用于實現鎖和并發事務排隊等協作原語。ZooKeeper 的一個優勢是可伸縮性(Scalability)。五臺或七臺機器集群可以滿足很多大型應用的需求。
最近我們給ZooKeeper增加了一個新的特性,進一步增強了它的可伸縮性—一種稱為Observers的服務器。在這篇文章中,我想介紹一下添加這個特性的緣由,并解釋這個服務器如何幫助我們的系統更具有可伸縮性。可伸縮性對不同的人意味著不同的事情,而在這里是說,如果我們的工作負載可以通過給系統分配更多的資源來分擔,那么這個系統就是可伸縮的。一個不可伸縮的系統是無法通過增加資源來提升性能的,甚至會在工作負載增加時,性能急劇下降。
要了解Observers為何能影響ZooKeeper的可伸縮性,我們需要首先了解一下這個服務是如何工作的。寬泛地說,ZooKeeper 集群上的任何操作不是讀操作就是寫操作。ZooKeeper 確保了所有讀和寫操作在所有客戶端看來具有完全相同的順序,這樣他們就不用再為操作的順序而困惑了。
在提供強一致性保障的同時,ZooKeeper同時給出高可用性承諾,這可以被簡單地解釋為它可以在多臺服務器失效的情況下仍然為客戶端提供服務。ZooKeeper使用一個傳統的手段來達到可用性——通過將數據讀寫分布到幾臺機器上來實現。這樣一來如果其中一臺機器失效了,其他的可以接管它的服務,而這一切對客戶而言是不可見的。然而,一致性和可用性這兩個屬性是很難同時達到的。
目前,ZooKeeper必須確保集群中的每個副本都對讀寫操作是順序性的。它通過一個一致性協議來達到這一目標。簡單地說,這個協議由一個選定的領導者將新操作告訴其他服務器, 所有節點投票支持的方式反饋給領導節點。一旦領導節點收集到過半數的投票,它就認為投票已經獲得了通過,并將進一步消息傳送給服務器,以使它們可以繼續工作,將操作提交到內存中。
從始至終的數據流如圖1所示。客戶進程將一個值提交給它連接的服務器,服務器將消息轉送給領導節點,并郵領導節點發起這個一致性協議,一旦最初的服務器從領導節點得到結果,它就可以返回給用戶了。Observers的需求源于ZooKeeper服務器在上述協議中實際扮演了兩個角色。它們從客戶端接受連接與操作請求,之后對操作結果進行投票。這兩個職能在 ZooKeeper集群擴展的時候彼此制約。如果我們希望增加ZooKeeper集群服務的客戶數量(我們經常考慮到有上萬個客戶端的情況),那么我們必須增加服務器的數量,來支持這么多的客戶端。
然而,從一致性協議的描述可以看到,增加服務器的數量增加了對協議的投票部分的壓力。領導節點必須等待集群中過半數的服務器響應投票。于是,節點的增加使得部分計算機運行較慢,從而拖慢整個投票過程的可能性也隨之提高,投票操作會隨之下降。這正是我們在實際操作中看到的問題——隨著ZooKeeper集群變大,投票操作的吞吐量會下降。所以,這讓我們不得不在增加客戶節點數量的期望和保持較好吞吐性能的期望間進行權衡。
為了打破這一耦合關系,我們引入了不參與投票的服務器,稱為Observers。Observers可以接受客戶端的連接,將寫請求轉發給領導節點。但是,領導節點不會要求Observers參加投票,所以,Observers不參與投票過程,而是和其他服務節點一起得到投票結果。
這個簡單的擴展給ZooKeeper的可伸縮性帶來了全新的景像。我們現在可以加入很多Observers節點,而無須擔心嚴重影響寫吞吐量。然而,規模伸縮并非無懈可擊——協議中的一步(通知階段)仍然與服務器的數量呈線性關系。
不過這里的串行開銷非常低,我們可以認為在通知服務器階段的開銷無法成為主要瓶頸。圖2顯示了一個簡單評測的結果,縱軸表示我能夠從一個單一的客戶端發出的每秒鐘同步寫操作的數量(一個調優的ZooKeeper可以得到更好的每秒鐘操作數——這里我們更感興趣的是相對值),橫軸是ZooKeeper集群的尺寸。
藍色部分表示每個服務器都是Voting服務器的情況,而綠色部分則只有三個是Voting服務器,其它都是Observers。測評結果顯示我們擴充Observers,寫性能幾乎可以保持不變,但如果同時擴展Voting節點的數量的話,性能就會明顯下降。Observers的有效性顯而易見的,它們給集群帶來了很多好處。
Observers同樣提升讀性能的可伸縮性
增加客戶端的數量只是Observers的一個重要用例。作為一個優化,ZooKeeper 服務器可以直接讀取它們的本地數據存儲,而無須經過投票過程,這面臨一定的“時光旅行”風險。可能在讀到新值之后又讀到老值,但這只在服務器故障時才會發生。事實上,在這種情況下客戶端可以請求一個“sync”操作來保證下一個值是最新的。
因此,在大量讀操作的工作負載下,Observers是個巨大的性能提升。寫操作直接進入標準的投票路徑,這樣,與客戶端可擴展性類似,提高投票服務器數量來承擔讀操作會影響寫
性能。Observers允許我們將讀性能和寫性能分開。這適用于ZooKeeper的很多應用場景,大部分客戶端很少寫,但經常讀。
Observers提供了廣域網能力
Observers對于跨廣域網連接的客戶端來說是很好的候選方案。這有三個原因:首先,為了獲得很好的讀性能,有必要讓客戶端離服務器盡量近,這樣往返時延不會太高。然而,
將ZooKeeper集群分散到兩個集群是非常不可取的設計,因為良好配置的ZooKeeper 應該讓投票服務器間用低時延連接互聯——否則我們將會遇到上面提到的低反應速度的問題。
其次,Observers可以被部署在需要訪問ZooKeeper的任意數據中心中。這樣,投票協議不會受到數據中心間鏈路的高時延的影響,性能得到提升。投票過程中Observers和領導節點間的消息遠少于投票服務器和領導節點間的消息。這有助于在遠程數據中心高寫負載的情況下降低帶寬需求。
最后,由于Observers即使失效也不會影響到投票集群,這樣如果數據中心間鏈路發生故障,也不會影響到服務本身的可用性。這種故障的發生概率要遠高于一個數據中心機架間的連接的故障概率,所以不依賴于這種鏈路是個優點。
如何開始使用Observers
O b s e r v e r s 還 沒 有 成 為 某 個ZooKeeper release 的一部分,所以要使用它,你需要從 Subversion trunk 獲取源代碼。
下面的內容提取自Observers用戶手冊,可以在源代碼的d o c s /zooKeeperObservers.html 文件中看到。
如何使用Observers
注意,在ZOOKEEPER-578 解決之前,你必須在每個服務器的配置文件中設置electionAlg=0 。否則當你啟動服務的時候會拋出一個異常。
原因:Observers并不參與領導節點的選舉,它們依賴于投票 Followers 來獲知領導的變動。目前,只有基本 選 舉 算 法 啟 動 一 個 線 程 來 響 應Observers確定當前領導的請求。其他JIRA 上的工作將會讓其他所有的領導選舉協議都支持這一功能。
設置ZooKeeper使用Observers非常簡單,只需要在配置文件中有兩處改動。首先是每個 Observer 的配置文件中都要有這么一行:
peerType=observer
這行讓服務器作為一個 Observer 來工作。之后,在每個服務器配置文件中,你必須在服務器定義行,給每個 Observer加入observer。比如:
server.1:localhost:2181:3181:observer
這讓每個其他服務器知道 server.1是一個 Observer,就不會期望它進行投票了。這就是要加入一個 Observer 的時候,所有你需要做的配置。現在可以將它作為一個正常的 Follower 來看待了。可以這樣試試:
bin/zkCli.sh -server
localhost:2181
這里 localhost:2181 是 Observer 在每個配置文件中指定的主機名和端口號。你應該看到命令行提示了,這時就可以查詢ZooKeeper服務了。
下一步工作
Observers特性還有很多工作要做。短期內,我們將致力于讓Observers與ZooKeeper中的所有領導選舉算法完全兼容 —— 我們希望這個可以在未來幾天內完成。長期看,我們希望能研究一下進行性能優化,比如基于Observers的集群的批量和離線讀取,來更好地利用Observers不像一般ZooKeeper服務器一樣嚴格要求時延的好處。
我們希望Observers能進入明年年初的ZooKeeper3.3.0。此外我們會很高興能聽到你的反饋,不管 是 在 郵 件 列 表 里 還 是 直 接 發 送E-mail。ZooKeeper 長期招募貢獻
者,我們有足夠多的有趣的問題來解決。
福利
掃描添加小編微信,備注“姓名+公司職位”,加入【云計算學習交流群】,和志同道合的朋友們共同打卡學習!
推薦閱讀:
VMware竟然出了一款防火墻
技術頭條
你的 AI 老師已上崗
技術頭條
助力 Android 抗衡 iOS,華為發布方舟編譯器!
程序員的黑磚窯,東南亞博彩騙局詳解
售價910元!周志華等人英文新書《演化學習》出爐!
真香,朕在看了!
總結
以上是生活随笔為你收集整理的Observers:让 ZooKeeper更具可伸缩性 | 时光机的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大兴安岭驾车到昌吉回族自治州车师古道会经
- 下一篇: 景德镇自驾到昌吉回族自治州车师古道多少公