一、zookeeper的定義
打開zookeeper官網,赫然一行大字,寫着:“Apache ZooKeeper致力於開發和維護實現高度可靠的分布式協調的開源服務器”。什么意思呢?就是Apache ZooKeeper的目標是開發和維護開源服務器,這服務器是干什么的呢?是做分布式協調的。這服務器的特點是什么呢?是高度可靠的。關鍵就是高度可靠,不用去驗證,也不用懷疑zookeeper的高度可靠性,搜索應用界的大佬solr和大數據服務界的大佬Hadoop就是使用zookeeper提供集群管理。
二、什么是zookeeper
ZooKeeper誕生於Yahoo,后轉入Apache孵化,最終孵化成Apache的頂級項目,是Hadoop和Hbase的重要組件。ZooKeeper是一種集中式服務,用於維護配置信息、命名、提供分布式同步和提供組服務。所有這些類型的服務都以分布式應用程序的某種形式使用。由於實現上述需求都需要做很多工作來修復不可避免的錯誤和競爭條件。因此,這些服務的實現變得非常困難,即使這些服務順利完成,管理和運維的成本也非常高,所以zookeeper以救世主的身份出現,解決上述技術難題,降低了分布式應用程序的開發難度和工作量,讓程序員專注於分布式架構的設計。
三、zookeeper的三中部署方式
1、獨立部署模式,即部署在單台機器上的一個zookeeper服務,適用於學習、了解zookeeper基礎功能。
2、偽分布模式,即部署在一台機器上的多個(原則上大於3個)zookeeper服務,虛擬分布式的zookeeper集群,適用於學習、開發和測試,不適用生產環境。
3、全分布式模式(復制模式),即在多台機器上部署zookeeper服務,真正的集群模式,適合於學習、開發和測試,可投入到生產環境中使用。
三、在什么場景下使用zookeeper
1、集群管理
①、節點監控:集群環境下,有很多節點,節點可能因為網絡故障連接不上,可能因為機器故障無法工作,要求保證集群中的節點都能正常工作,就需要把異常的節點從集群中屏蔽掉,這時使用zookeeper的短暫節點和watcher機制,可以很好的實現集群的管理。
②、領導者選舉:集群是多個節點(可把節點理解為機器)協同工作,這是需要一個把控全局的領導者節點來接收外部請求、任務派發等,那么,領導者節點如何產生?領導者節點出現故障怎么處理?領導者選舉是zookeeper最優秀的功能之一,如果當前領導者節點出現故障,zookeeper可在很短的時間內選舉出新的領導者來接替故障領導者的工作。
2、配置管理
實際應用中,配置使應用變得靈活,但是在分布式應用下,需要到每一台機上面修改配置,維護配置則復雜很多,基於這種場景,把配置放在zookeeper的znode中,分布式應用的機器到zookeeper的znode中讀取配置應用到系統中即可。此外,利用zookeeper的watcher機制,如果配置(znode)發生改變,zookeeper通知各個機器配置信息已經被修改,各機器通過刷新來獲取到最新的配置。
zookeeper還可以應用到很多場景,比如分布式鎖、數據的發布和訂閱、隊列管理等等,此處就不一一介紹了。
四、zookeeper的性能
zookeeper旨在提供高性能,但是zookeeper的性能如何呢?zookeeper官網提供了一份性能測試結果圖,通過分析測試結果圖,可以大概了解zookeeper的性能,如下圖所示:
從測試結果圖得知測試分為5組,分別為3台服務器一組(暫且稱為A組)、5台服務器一組(暫且稱為B組)、7台服務器一組(暫且稱為C組)、9台服務器一組(暫且稱為D組)、13台服務器一組(暫且稱為E組),觀察到幾個現象:
①、讀取請求的百分比在60%之前,吞吐率為A>B>C>D>E。
②、讀取請求百分比到達80%偏左側一點,大概75%時,吞吐率開始發生變化,A組的吞吐率開始被其他組超越。
③、讀取請求百分比到達約95%時,吞吐率發生逆轉,約為E>D>C>B>A,讀取請求百分比趨近於瓶頸時,zookeeper集群約龐大,滿足的吞吐率約高。
④、zookeeper集群的吞吐率起點大約在10000左右,性能下限很高。
結論:
①、zookeeper小規模集群也能提供較高的吞吐率,如果對吞吐率有較高要求時,可以通過新增zookeepe服務節點來滿足需求。
②、隨着zookeeper服務節點的增加,zookeeper的性能呈指數上升。
這篇博文是zookeeper系列的第一篇,對zookeeper做一個簡單的介紹,關於zookeeper的更多內容和實際操作,會在后續博文中詳述。
由於能力有限,如有不足和錯誤之處,還望不吝指出!