摘要:今天來跟大家分享的是奇虎開源的配置中心。容錯當(dāng)進(jìn)程死掉,網(wǎng)絡(luò)終端,機器重啟等異常情況發(fā)生時,我們希望能盡可能的提供可靠的配置獲取服務(wù)。配置更新及時可以秒級同步到所有客戶端機器。本身是沒有的恭喜你,你已經(jīng)構(gòu)建完自己的配置中心了。
今天來跟大家分享的是奇虎360開源的 QConf 配置中心。
為什么我們需要做這么一件事情?
因為遇到了,當(dāng)業(yè)務(wù)分布較廣,配置分布較廣的時候,就會很容易地出現(xiàn)一些問題,比如做了負(fù)載均衡,需要調(diào)整一下應(yīng)用配置。剛好改漏了一臺機,就偶爾出現(xiàn)一些問題,排查起來也是很吃力的。
QConf 的架構(gòu): QConf架構(gòu)
除了 QConf 本身提供的工具之外,我們用到了一個有掌閱科技開發(fā)的 zkdash zookeeper 管理工具。
個人理解:
QConf 可以說是一個 zookeeper 的客戶端,通過 agent 去 watch zookeeper 的變化,數(shù)據(jù)存在本機,當(dāng) zookeeper 發(fā)生變化是,自動改變本地數(shù)據(jù),來達(dá)到同步更新的效果。
這也就是為什么 QConf 需要搭配 zookeeper 去使用的原因之一吧。
QConf 服務(wù)端QConf使用ZooKeeper集群作為服務(wù)端提供服務(wù)。眾所周知,ZooKeeper是一套分布式應(yīng)用程序協(xié)調(diào)服務(wù),根據(jù)上面提到的對配置內(nèi)容的定位,我們認(rèn)為可以將單條配置內(nèi)容直接存儲在ZooKeeper的一個ZNode上,并利用ZooKeeper的Watch監(jiān)聽功能實現(xiàn)配置變化時對客戶端的及時通知。 按照ZooKeeper的設(shè)計目標(biāo),其只提供最基礎(chǔ)的功能,包括順序一致,原子性,單一系統(tǒng)鏡像,可靠性和及時性。
我們選擇Zookeeper還因為它有如下特點:
1、類文件系統(tǒng)的節(jié)點組織
2、穩(wěn)定,無單點問題
3、訂閱通知機制
關(guān)于Zookeeper,更多見:https://zookeeper.apache.org/
QConf 客戶端因為ZooKeeper在接口方面只提供了非?;镜牟僮?,并且其客戶端接口原始,所以我們需要在QConf的客戶端部分解決如下問題:
1、降低與ZooKeeper的鏈接數(shù) 原生的ZooKeeper客戶端中,所有需要獲取配置的進(jìn)程都需要與ZooKeeper保持長連接,在生產(chǎn)環(huán)境中每個客戶端機器可能都會有上百個進(jìn)程需要訪問數(shù)據(jù),這對ZooKeeper的壓力非常大而且也是不必要的。
2、本地緩存 當(dāng)然我們不希望客戶端進(jìn)程每次需要數(shù)據(jù)都走網(wǎng)絡(luò)獲取,所以需要維護(hù)一份客戶端緩存,僅在配置變化時更新。
3、容錯 當(dāng)進(jìn)程死掉,網(wǎng)絡(luò)終端,機器重啟等異常情況發(fā)生時,我們希望能盡可能的提供可靠的配置獲取服務(wù)。
4、多語言版本接口 目前提供的語言版本包括:c,php,java,python,go,lua,shell。
5、配置更新及時 可以秒級同步到所有客戶端機器。
6、高效的配置讀取 內(nèi)存級的訪問速度。
安裝了解完基礎(chǔ)的知識和原理,就開始動手實踐想法和操作吧,理論要和實踐結(jié)合,不然就瞎扯淡了。
環(huán)境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 的,但是需要配置自己的基礎(chǔ)信息。
$ cd zookeeper-3.4.9 $ sudo cp conf/zoo_sample.cfg conf/zoo.cfg
啟動 zkServer
$ cd ../ $ ./bin/zkServer.sh start
默認(rèn)監(jiān)聽: 0.0.0.0:2181
測試服務(wù)是否啟動: 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
會輸出上述信息,服務(wù)器啟動成功.
然后創(chuàng)建一下 zookeeper 測試數(shù)據(jù):
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 后,進(jìn)入 qconf 安裝目錄,調(diào)整 idc.conf
$ cd conf/ $ sudo vim idc.conf
輸入自己的 zookeeper 服務(wù)器地址,多個用 , 隔開:
#[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
如果返回對應(yīng)的信息,那幾說明可以正常獲取數(shù)據(jù)了。如果失敗,就去 logs/ 目錄查詢錯誤信息,對應(yīng)修改。
/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 安裝的目錄中,根據(jù)路徑找到對應(yīng)的依賴包即可。
安裝完后,添加到 php.ini,使用 php --ini 查看配置文件位置。
查看擴展安裝:
php -m | grep qconf
QConf 操作 API
安裝完 QConf 和 zookeeper,安裝我們的管理后臺。
zkdash需要 Python >= 2.7,如果是 centos65 的用戶,需要升級自己的 Python 版本,升級方法請看: Python升級
地址: zkdash
安裝完 zkdash,配置對應(yīng)節(jié)點,進(jìn)行管理即可。
zkdash Web管理服務(wù)默認(rèn)是全網(wǎng)公開訪問的,需要修改監(jiān)聽host和端口,修改方式
$ sudo vim init.py
修改監(jiān)聽的 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="輸入你需要監(jiān)聽的地址") 82 tornado.ioloop.IOLoop.instance().start() 83
address 是新增的 host 參數(shù)。本身是沒有的
恭喜你,你已經(jīng)構(gòu)建完自己的配置中心了。接下來需要做的是,提高性能,和穩(wěn)定性,擴展 zookeeper。我只能幫你到這里了,接下來的路,自己走吧。
更多開源項目歡迎關(guān)注: https://github.com/janhuang
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22664.html
摘要:過去專門做了一篇文檔來構(gòu)建配置中心,基于的配置中心。環(huán)境要求及構(gòu)建步驟可參考搭建配置中心隨著業(yè)務(wù)增長,部署的機器可能會隨著增長,增加配置難度和維護(hù)難度。最終架構(gòu)圖如下無論擴展多少個業(yè)務(wù)應(yīng)用,僅需要一個配置中心即可完成多處配置修改。 過去專門做了一篇文檔來構(gòu)建配置中心,基于 zookeeper 的配置中心。 環(huán)境要求及構(gòu)建步驟可參考: QConf搭建配置中心 隨著業(yè)務(wù)增長,部署的機器可能...
摘要:總體介紹在互聯(lián)網(wǎng)金融行業(yè)一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構(gòu)升級都是隨著業(yè)務(wù)重大推進(jìn)而伴隨的,在前一代系統(tǒng)架構(gòu)上遇到的問題,業(yè)務(wù)開發(fā)過程中積累一些優(yōu)秀的開發(fā)案例,在下一代系統(tǒng)開發(fā)中就會大力推進(jìn)架構(gòu)升級。 回想起從公司成立敲出的第一行代碼算起到現(xiàn)在也快三年了,平臺的技術(shù)架構(gòu),技術(shù)體系也算是經(jīng)歷了四次比較重大的升級轉(zhuǎn)化(目前第四代架構(gòu)體系正在進(jìn)行中),臨近年底也想抽...
摘要:總體介紹在互聯(lián)網(wǎng)金融行業(yè)一百多億其實也算不上大平臺,也就是二級陣營吧,其實每次的架構(gòu)升級都是隨著業(yè)務(wù)重大推進(jìn)而伴隨的,在前一代系統(tǒng)架構(gòu)上遇到的問題,業(yè)務(wù)開發(fā)過程中積累一些優(yōu)秀的開發(fā)案例,在下一代系統(tǒng)開發(fā)中就會大力推進(jìn)架構(gòu)升級。 回想起從公司成立敲出的第一行代碼算起到現(xiàn)在也快三年了,平臺的技術(shù)架構(gòu),技術(shù)體系也算是經(jīng)歷了四次比較重大的升級轉(zhuǎn)化(目前第四代架構(gòu)體系正在進(jìn)行中),臨近年底也想抽...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經(jīng)常會問到的題目??蛻舳说玫綘顟B(tài)碼是并且會根據(jù)立即去服務(wù)端拉取最新的配置。引言 記得我們那時候剛開始學(xué)習(xí)Java的時候都只是一個單體項目,項目里面的配置基本都是寫在項目里面的properties文件中,比如數(shù)據(jù)庫配置啥的,各種邏輯開關(guān),一旦這些配置修改了,還需要重啟項目這修改才會生效。隨著各種微服務(wù)的誕生,服務(wù)的...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經(jīng)常會問到的題目。雖然是攜程開源的,但是攜程內(nèi)部也不用它??蛻舳说玫綘顟B(tài)碼是并且會根據(jù)立即去服務(wù)端拉取最新的配置。通過定時任務(wù)的補充,可以讓配置達(dá)到最終的一致性。 引言記得我們那時候剛開始學(xué)習(xí)Java的時候都只是一個單體項目,項目里面的配...
閱讀 810·2021-11-24 09:38
閱讀 1014·2021-11-11 11:01
閱讀 3257·2021-10-19 13:22
閱讀 1546·2021-09-22 15:23
閱讀 2849·2021-09-08 09:35
閱讀 2784·2019-08-29 11:31
閱讀 2138·2019-08-26 11:47
閱讀 1582·2019-08-26 11:44