基於ZooKeeper大規模集群配置系統概述


 

基於ZooKeeper大規模集群配置系統概述

       通常大型互聯網公司都擁有較大規模、結構復雜的服務器集群。隨着互聯網迅速發展,用戶訪問量以及服務器規模的越來越大,Web應用項目需要部署在數目眾多的服務集群上協同工作,才為用戶提供更可靠、穩定、優質的互聯網服務。

       一般在互聯網公司發展初期,服務器以及Web應用程序較少,項目的配置信息都會存放在文件中,比如把一些基本的數據庫信息、緩存信息配置在文件中,如***.property文件中,每個項目都有自身單獨的一份配置文件。這樣的結構如下圖所示:


       隨着互聯網的快速發展和用戶的訪問量越來越大,一個Web應用程序必須部署在幾十台應用服務器上才能滿足當前需求。此時再將項目的配置信息放入文件中,就會帶來眾多不便,比如:

1、項目在開發環境、測試環境、正式環境中很多配置信息都不一樣,比如數據庫配置等。一個項目要維護多個配置信息,以便在項目不同階段使用。當項目配置越來越多,文件類型的配置則會變得混亂,它缺乏統一管理。

2、一個Web應用項目會部署在多台機器上,每次更新項目任何一個配置,都需要在不同服務器文件上更新很多次,這樣容易出錯而且麻煩。

3、  當更新項目的配置時,我們必須要將項目服務關閉,然后修改配置文件中的配置信息,並將項目重新發布,這必然造成一段時間內項目不能對外提供服務,一旦出現任何故障,這個一段時間可能更長。將配置信息放入文件中這樣的配置方式不能做到配置信息的動態部署以及自動更新。

       在這樣的情況下,建立集中式的配置系統就變得非常有必要。它的整體的配置架構圖如下:

      

       下面講述如何快速有效搭建大型互聯網集群配置系統,它有如下四個重要的點:

1、 配置信息存儲:項目配置信息怎么存放,放在那邊,怎么保證其安全可靠?因為項目配置關系到項目能否啟動以及正常運行。一旦配置系統出問題時,它關系到是整個公司的網站。

2、 請求配置信息:當一個Web應用程序啟動時,它如何獲取到項目的配置?這里可能會涉及到一些程序之間的通信,比如應用和配置服務器的通信等。簡單來說,Web項目啟動時需要向集群配置系統發送遠程請求,獲取項目啟動的配置信息。

3、 監聽配置信息:當項目某些配置信息修改時,配置系統如何通知到應用這些配置的項目,項目接收到配置修改的通知后,項目會做一些動態修改。如何進行監聽配置的動態修改,以及根據配置修改項目能做出配置的動態更新?

4、 統一控制終端:集群配置系統最終要給出一個集中的Web控制終端來管理這些配置,包含配置信息增加、刪除、修改、查詢、部署等等。    

       解決了上面的四個問題,您就可以自己搭建了一套集群配置系統。如果有足夠的人力資源、技術資源,您可以寫一套分布式的存儲來解決配置信息的集中式存儲。您也可以寫一套通信協議、或者在現有的通信協議上做一些封裝來解決獲取項目配置、以及監聽修改配置的問題。最后您可以用PHP或者.Net來寫一套配置終端。但當您沒有那么多資源和時間時,也許如下的解決方案是個不錯的選擇,它能幫助你在很短的時間內搭建一套可靠的分布式配置系統。

       集群配置系統會應用到一個成熟的分布式服務開源框架—ZooKeeper。它是Apache Hadoop的一個子項目,它主要用來解決分布式集群中應用系統的一致性問題,它能提供基於類似於文件系統的目錄節點樹方式的數據存儲。除了數據存儲,它還可以用來維護和監控你存儲的數據的狀態變化。從設計模式角度來看,Zookeeper是一個基於觀察者模式設計的分布式服務管理框架,它負責存儲和管理大家都關心的數據,然后接受觀察者的注冊,一旦這些數據的狀態發生變化,Zookeeper 就將負責通知那些已經注冊的觀察者做出相應的反應。ZooKeeper典型集群配置應用如下圖:


       正如上圖所示ZooKeeper幫我們解決上面四個問題中的三個。具體如下:ZooKeeper Server可以集中式存放數據,存放於上圖的Configuration目錄下,它有效解決了配置信息的集中式存儲,同時ZooKeeper的工作模式是集群模式,一定程度上解決了配置系統的可靠性、安全性。ZooKeeper在java、ruby、C++都有自己線程的客戶端Client。這些客戶端負責和ZooKeeper Server進行通信,Client在應用程序啟動時候向Server發送請求獲取項目的配置信息,同時它還能監聽這些配置信息的變化。當配置信息變化時候,項目會根據配置變化有一些自定義的操作,比如數據庫重新連接,項目重新啟動等等。所以ZooKeeper幫我們解決了第1、2、3個問題。最終我們只需要開發出一套配合集群配置系統運行的統一控制終端就可以了。統一控制終端可以是個B/S的管理類Web應用程序。

       下面以Java項目為例,應用ZooKeeper的整個集群配置系統結構圖如下:

       如上圖所示,ZooKeeper集群配置可以參考ZooKeeper開源文檔來搭建,ZooKeeper集群由幾台Server組成,Server中存放配置數據,集群的工作模式確保了數據的安全可靠。具體Java 應用程序可以通過ZooKeeperClient和ZooKeeper集群進行通信,獲取項目的配置信息,同時監控配置變化。控制終端可能是簡單的管理界面,在這個終端上管理着所有的項目配置。項目可能包括幾個開發環境,因為在不同階段搭建的配置是不同的。同時控制終端還將這些配置記錄在本地數據庫,以作備份。用戶在控制終端上操作項目具體配置,包括增加、修改、刪除等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM