QConf分布式配置管理工具
QConf 是奇虎 360 內(nèi)部分布式配置管理工具。用來(lái)替代傳統(tǒng)的配置文件,使得配置信息和程序代碼分離,同時(shí)配置變化能夠?qū)崟r(shí)同步到客戶端,而且保證用戶高效讀取配置,這使的工程師從瑣碎的配置修改、代碼提交、配置上線流程中解放出來(lái),極大地簡(jiǎn)化了配置管理工作。
特點(diǎn)
-
一處修改,所有機(jī)器實(shí)時(shí)同步更新
-
高效讀取配置
-
安裝部署方便,使用簡(jiǎn)單
-
服務(wù)器宕機(jī)、網(wǎng)絡(luò)中斷、集群遷移等異常情況對(duì)用戶透明
-
支持c/c++、shell、php、python、lua 等語(yǔ)言
編譯安裝
QConf采用CMake進(jìn)行構(gòu)建(CMake 版本 2.6及以上)
可以使用以下命令完成QConf的編譯安裝:
mkdir build && cd build cmake .. make make install
你也可以在CMake圖形界面工具中導(dǎo)入CMakeList.txt 文件
使用如下配置可以指定QConf的安裝目錄:
cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
使用
-
搭建Zookeeper集群,并通過Zookeeper Client 新建修改配置
關(guān)于zookeeper使用的更多信息: ZooKeeper Getting Started Guide
-
在QConf 配置文件中配置Zookeeper集群地址
vi QCONF_INSTALL_PREFIX/conf/idc.conf
#all the zookeeper host configuration. #[zookeeper] zookeeper.test=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 #test機(jī)房zookeeper配置
-
在QConf配置文件中指定本地機(jī)房
echo test > QCONF_INSTALL_PREFIX/conf/localidc #指定本地機(jī)房為test
-
啟動(dòng)QConf
cd QCONF_INSTALL_PREFIX/bin && sh agent-cmd.sh start
-
編寫代碼訪問QConf
性能
-
測(cè)試策略
-
測(cè)試次數(shù) : 循環(huán)測(cè)試1000次,每次循環(huán)獲取分別獲取10000個(gè)不同key對(duì)應(yīng)的值,總共取一千萬(wàn)次key
-
測(cè)試數(shù)據(jù) : 每個(gè)key對(duì)應(yīng)的value的大小是1k
-
測(cè)試方式 : 多進(jìn)程測(cè)試時(shí)候,多個(gè)進(jìn)程同時(shí)運(yùn)行,然后截取其中一段時(shí)間,來(lái)記錄各個(gè)進(jìn)程運(yùn)行取一千萬(wàn)次的總耗時(shí)
-
測(cè)試機(jī)器 : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz, 24核;64G memory
-
測(cè)試語(yǔ)言 : c++
-
-
測(cè)試結(jié)果
-
結(jié)論
-
單進(jìn)程的延遲是16微秒左右
-
在多進(jìn)程的情況下,QPS 能夠達(dá)到百萬(wàn)
-
使用樣例
// Init the qconf env
ret = qconf_init(); assert(QCONF_OK == ret); // Get Conf value
char value[QCONF_CONF_BUF_MAX_LEN];
ret = qconf_get_conf("/demo/node1", value, sizeof(value), NULL); assert(QCONF_OK == ret); // Destroy qconf env
qconf_destroy();