QConf

分布式配置管理工具
授权协议 BSD
开发语言 C/C++ Python SHELL
所属分类 管理和监控、 DevOps/运维工具
软件类型 开源软件
地区 国产
投 递 者 段干开宇
操作系统 跨平台
开源组织 360
适用人群 未知
 软件概览

QConf 是奇虎 360 内部分布式配置管理工具。用来替代传统的配置文件,使得配置信息和程序代码分离,同时配置变化能够实时同步到客户端,而且保证用户高效读取配置,这使的工程师从琐碎的配置修改、代码提交、配置上线流程中解放出来,极大地简化了配置管理工作。

特点

  • 一处修改,所有机器实时同步更新

  • 高效读取配置

  • 安装部署方便,使用简单

  • 服务器宕机、网络中断、集群迁移等异常情况对用户透明

  • 支持c/c++、shell、php、python、lua 等语言

编译安装

QConf采用CMake进行构建(CMake 版本 2.6及以上)

可以使用以下命令完成QConf的编译安装:

mkdir build && cd build
cmake ..
make
make install

你也可以在CMake图形界面工具中导入CMakeList.txt 文件

使用如下配置可以指定QConf的安装目录:

cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix

使用

  • 搭建Zookeeper集群,并通过Zookeeper Client 新建修改配置

    关于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机房zookeeper配置
  • 在QConf配置文件中指定本地机房

echo test > QCONF_INSTALL_PREFIX/conf/localidc #指定本地机房为test
  • 启动QConf

cd QCONF_INSTALL_PREFIX/bin && sh agent-cmd.sh start
  • 编写代码访问QConf

性能

  1. 测试策略

    • 测试次数 : 循环测试1000次,每次循环获取分别获取10000个不同key对应的值,总共取一千万次key

    • 测试数据 : 每个key对应的value的大小是1k

    • 测试方式 : 多进程测试时候,多个进程同时运行,然后截取其中一段时间,来记录各个进程运行取一千万次的总耗时

    • 测试机器 : Intel(R) Xeon(R) CPU E5-2630 0 @ 2.30GHz,  24核;64G memory

    • 测试语言 : c++

  2. 测试结果

    • enter image description here

  3. 结论

    • 单进程的延迟是16微秒左右

    • 在多进程的情况下,QPS 能够达到百万

使用样例

      // 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();
  •         最近在项目中,因为 Qconf 出现了一些问题。于是瞎搞一通,创建了一些配置文件,改乱了一些系统权限。还好,自己都改回来了。对了,我这边是  OSX 系统的,并且是通过 NodeJs 进行的部署。 1、什么是 Qconf:      Qconf 是奇虎360广泛使用的配置管理服务。致力于将配置内容从代码中完全分离出来,及时可靠高效的提供配置访问和更新服务。 2、为什么要用它:  

  • 一、QConf简介 在分布式环境中,出于负载、容错等种种原因,几乎所有的服务都需要在不同的机器节点上部署多个实例。同时,业务项目中总少不了各种类型的配置文件。这种情况下,有时仅仅是一个配置内容的修改,便需要重新进行代码提交svn/git,打包,分发上线的流程。当部署的机器有很多时,分发上线本身也是一个很繁杂的工作。而配置文件的修改频率又远远大于代码本身。 追本溯源,我们认为所有的这些麻烦是由于我们

  • 一、下载Qconf的zip包         1.进入github地址:https://github.com/Qihoo360/QConf,下载zip包文件,并上传至服务器 二、安装QConf unzip QConf-master.zip && cd QConf-master //解压QConf-master mkdir build && cd

  • 背景 近期,项目中引入一个配置中心服务,主要目的是界面化管理项目中的配置文件,做了一番调研决定用qconf。qconf有以下特点能很好地满足需求: - 一处修改,所有机器实时同步更新 - 高效读取配置 - 安装部署方便,使用简单 - 服务器宕机、网络中断、集群迁移等异常情况对用户透明 - 支持c/c++、shell、php、python、lua、java、go、node 等语言 但是在安装的过程中

  • 1:提示找不到gdbm.h头文件 /alidata/QConf/agent/qconf_dump.cc:1:18: fatal error: gdbm.h: No such file or directory compilation terminated. agent/CMakeFiles/qconf_agent.dir/build.make:206: recipe for target 'age

  •     QConf 是一个分布式配置管理工具。 用来替代传统的配置文件,使得配置和业务代码分离,同时配置能够实时同步到客户端保证配置及时生效。 使用场景 单条数据量小 更新频繁(较代码而言) 配置总数可能巨大,但单台机器关心配置数有限 读多写少 特点 一处修改,所有机器实时同步更新 高效读取配置 安装部署方便,使用简单 服务器宕机、网络中断、集群迁移等异常情况对用户透明 支持c/c++、shell

  • 参照搭建之前请仔细阅读相关安装配置信息及注意事项: 启动顺序,先启动数据库-->再启动zookeeper-->再启动zkdash 在做qconfig管理的时候需要启动各个节点的qconfig客户端根据实际情况确定!   qconf安装与配置 一、安装QConf : 1. 使用源码安装     1)git clonehttps://github.com/Qihoo360/QConf.git     

 相关资料
  • 在分布式系统中,常困扰我们的还有上线问题。虽然目前有一些优雅重启方案,但实际应用中可能受限于我们系统内部的运行情况而没有办法做到真正的“优雅”。比如我们为了对去下游的流量进行限制,在内存中堆积一些数据,并对堆积设定时间或总量的阈值。在任意阈值达到之后将数据统一发送给下游,以避免频繁的请求超出下游的承载能力而将下游打垮。这种情况下重启要做到优雅就比较难了。 所以我们的目标还是尽量避免采用或者绕过上线

  • Zookeeper提供了一个分层命名空间,允许客户端存储任意数据,如配置数据。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config命名空间中。根据应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件,创建多个Prop

  • Consul提供了一个用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。基于应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件创建多个PropertySource实例。例

  • 我希望产品化并部署我的Kafka Connect应用程序。然而,我对任务有两个问题。最大值设置,这是必需的,非常重要,但具体设置该值的具体内容很模糊。 如果我有一个包含n个分区的主题,我希望从中使用数据并将其写入某个接收器(在我的情况下,我正在写入S3),那么我应该设置什么任务。最大值到?我应该把它设置为n吗?我应该把它设置为2n吗?直觉上,我似乎想将值设置为n,这就是我一直在做的。 如果我更改我

  • 我想在不同的 VM 上配置 Ehcache 实例,并在主机上运行 servlet,将这些缓存用作数据存储。缓存服务器必须形成一个集群,用于分布式缓存。 我搜索了任何地方(谷歌、stackoverflow、Ehachep留档)。但是,我找不到任何足够的“如何”文章。此外,我不可能使用企业产品(Terracotta BigMemory等)。 可以随意假设元素包含如上所述的客户信息。我只需要知道如何通过

  • 在 Laravel 中,大多数采用 .env 文件管理,深度配置都采用 config/*.php 配置。 在 ThinkSNS+ 这一现象并没有发生改变,我们也推崇使用 Laravel 方式进行管理配置,但是有时候我们往往需要后期配置, 但是后期配置不可能期望用户去修改配置文件。这很危险,用户大多都没有技术能力。 所以,在 ThinkSNS+ 在 Laravel 配置的基础上增加了一份更加灵活的配