摘要:今天來跟大家分享的是奇虎開源的配置中心。容錯當進程死掉,網絡終端,機器重啟等異常情況發生時,我們希望能盡可能的提供可靠的配置獲取服務。配置更新及時可以秒級同步到所有客戶端機器。本身是沒有的恭喜你,你已經構建完自己的配置中心了。
今天來跟大家分享的是奇虎360開源的 QConf 配置中心。
為什么我們需要做這么一件事情?
因為遇到了,當業務分布較廣,配置分布較廣的時候,就會很容易地出現一些問題,比如做了負載均衡,需要調整一下應用配置。剛好改漏了一臺機,就偶爾出現一些問題,排查起來也是很吃力的。
QConf 的架構: QConf架構
除了 QConf 本身提供的工具之外,我們用到了一個有掌閱科技開發的 zkdash zookeeper 管理工具。
個人理解:
QConf 可以說是一個 zookeeper 的客戶端,通過 agent 去 watch zookeeper 的變化,數據存在本機,當 zookeeper 發生變化是,自動改變本地數據,來達到同步更新的效果。
這也就是為什么 QConf 需要搭配 zookeeper 去使用的原因之一吧。
QConf 服務端QConf使用ZooKeeper集群作為服務端提供服務。眾所周知,ZooKeeper是一套分布式應用程序協調服務,根據上面提到的對配置內容的定位,我們認為可以將單條配置內容直接存儲在ZooKeeper的一個ZNode上,并利用ZooKeeper的Watch監聽功能實現配置變化時對客戶端的及時通知。 按照ZooKeeper的設計目標,其只提供最基礎的功能,包括順序一致,原子性,單一系統鏡像,可靠性和及時性。
我們選擇Zookeeper還因為它有如下特點:
1、類文件系統的節點組織
2、穩定,無單點問題
3、訂閱通知機制
關于Zookeeper,更多見:https://zookeeper.apache.org/
QConf 客戶端因為ZooKeeper在接口方面只提供了非常基本的操作,并且其客戶端接口原始,所以我們需要在QConf的客戶端部分解決如下問題:
1、降低與ZooKeeper的鏈接數 原生的ZooKeeper客戶端中,所有需要獲取配置的進程都需要與ZooKeeper保持長連接,在生產環境中每個客戶端機器可能都會有上百個進程需要訪問數據,這對ZooKeeper的壓力非常大而且也是不必要的。
2、本地緩存 當然我們不希望客戶端進程每次需要數據都走網絡獲取,所以需要維護一份客戶端緩存,僅在配置變化時更新。
3、容錯 當進程死掉,網絡終端,機器重啟等異常情況發生時,我們希望能盡可能的提供可靠的配置獲取服務。
4、多語言版本接口 目前提供的語言版本包括:c,php,java,python,go,lua,shell。
5、配置更新及時 可以秒級同步到所有客戶端機器。
6、高效的配置讀取 內存級的訪問速度。
安裝了解完基礎的知識和原理,就開始動手實踐想法和操作吧,理論要和實踐結合,不然就瞎扯淡了。
環境Linux: Ubuntu 16.04
安裝 zookeeper安裝包地址: zookeeper
$ sudo wget http://apache.stu.edu.tw/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz $ sudo tar -zxvf zookeeper-3.4.9.tar.gz
解壓完成后,是可以直接運行 zkServer 的,但是需要配置自己的基礎信息。
$ cd zookeeper-3.4.9 $ sudo cp conf/zoo_sample.cfg conf/zoo.cfg
啟動 zkServer
$ cd ../ $ ./bin/zkServer.sh start
默認監聽: 0.0.0.0:2181
測試服務是否啟動: telnet 127.0.0.1 2181 輸入 stat
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT Clients: xxx Latency min/avg/max: 0/0/51 Received: 252717 Sent: 252716 Connections: 5 Outstanding: 0 Zxid: 0x13 Mode: standalone Node count: 10
會輸出上述信息,服務器啟動成功.
然后創建一下 zookeeper 測試數據:
sh zkCli.sh create /demo demo create /demo/confs confs create /demo/confs/conf1 111111111111111111111 create /demo/confs/conf2 222222222222222222222 create /demo/confs/conf3 333333333333333333333QConf
安裝方式可以查看官方 wiki
安裝 FAQ
安裝完 qconf 后,進入 qconf 安裝目錄,調整 idc.conf
$ cd conf/ $ sudo vim idc.conf
輸入自己的 zookeeper 服務器地址,多個用 , 隔開:
#[zookeeper] ############################################################################ # QCONF config # ############################################################################ # all the zookeeper host configuration. #[zookeeper] zookeeper.test=zookeeper host
保存即可。
啟動 QConf agent。
在 ubuntu 下使用 bash 去啟動
$ sudo bash ./bin/agent-cmd.sh start
啟動成功,查看 QConf 命令。
qconf get_conf /demo/confs/conf1 qconf get_batch_keys /demo/confs
如果返回對應的信息,那幾說明可以正常獲取數據了。如果失敗,就去 logs/ 目錄查詢錯誤信息,對應修改。
/usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-libqconf-dir=/usr/local/qconf/include --enable-static LDFLAGS=/usr/local/qconf/lib/libqconf.a make make install
qconf 配置在 qconf 安裝的目錄中,根據路徑找到對應的依賴包即可。
安裝完后,添加到 php.ini,使用 php --ini 查看配置文件位置。
查看擴展安裝:
php -m | grep qconf
QConf 操作 API
安裝完 QConf 和 zookeeper,安裝我們的管理后臺。
zkdash需要 Python >= 2.7,如果是 centos65 的用戶,需要升級自己的 Python 版本,升級方法請看: Python升級
地址: zkdash
安裝完 zkdash,配置對應節點,進行管理即可。
zkdash Web管理服務默認是全網公開訪問的,需要修改監聽host和端口,修改方式
$ sudo vim init.py
修改監聽的 host 地址:
74 def main(): 75 """主程序入口 76 """ 77 logger.init_logger(LOG_ITEMS, suffix=OPTIONS.port) 78 application = Application() 79 http_server = tornado.httpserver.HTTPServer(application, 80 xheaders=True) 81 http_server.listen(OPTIONS.port, address="輸入你需要監聽的地址") 82 tornado.ioloop.IOLoop.instance().start() 83
address 是新增的 host 參數。本身是沒有的
恭喜你,你已經構建完自己的配置中心了。接下來需要做的是,提高性能,和穩定性,擴展 zookeeper。我只能幫你到這里了,接下來的路,自己走吧。
更多開源項目歡迎關注: https://github.com/janhuang
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22664.html
摘要:過去專門做了一篇文檔來構建配置中心,基于的配置中心。環境要求及構建步驟可參考搭建配置中心隨著業務增長,部署的機器可能會隨著增長,增加配置難度和維護難度。最終架構圖如下無論擴展多少個業務應用,僅需要一個配置中心即可完成多處配置修改。 過去專門做了一篇文檔來構建配置中心,基于 zookeeper 的配置中心。 環境要求及構建步驟可參考: QConf搭建配置中心 隨著業務增長,部署的機器可能...
摘要:總體介紹在互聯網金融行業一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構升級都是隨著業務重大推進而伴隨的,在前一代系統架構上遇到的問題,業務開發過程中積累一些優秀的開發案例,在下一代系統開發中就會大力推進架構升級。 回想起從公司成立敲出的第一行代碼算起到現在也快三年了,平臺的技術架構,技術體系也算是經歷了四次比較重大的升級轉化(目前第四代架構體系正在進行中),臨近年底也想抽...
摘要:總體介紹在互聯網金融行業一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構升級都是隨著業務重大推進而伴隨的,在前一代系統架構上遇到的問題,業務開發過程中積累一些優秀的開發案例,在下一代系統開發中就會大力推進架構升級。 回想起從公司成立敲出的第一行代碼算起到現在也快三年了,平臺的技術架構,技術體系也算是經歷了四次比較重大的升級轉化(目前第四代架構體系正在進行中),臨近年底也想抽...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經常會問到的題目。客戶端得到狀態碼是并且會根據立即去服務端拉取最新的配置。引言 記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配置基本都是寫在項目里面的properties文件中,比如數據庫配置啥的,各種邏輯開關,一旦這些配置修改了,還需要重啟項目這修改才會生效。隨著各種微服務的誕生,服務的...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經常會問到的題目。雖然是攜程開源的,但是攜程內部也不用它。客戶端得到狀態碼是并且會根據立即去服務端拉取最新的配置。通過定時任務的補充,可以讓配置達到最終的一致性。 引言記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配...
閱讀 795·2021-11-24 09:38
閱讀 998·2021-11-11 11:01
閱讀 3236·2021-10-19 13:22
閱讀 1523·2021-09-22 15:23
閱讀 2827·2021-09-08 09:35
閱讀 2765·2019-08-29 11:31
閱讀 2119·2019-08-26 11:47
閱讀 1563·2019-08-26 11:44