vlambda博客
学习文章列表

Disconf - 分布式系统配置管理平台

配置管理,对于任何一个系统而言,都是至关重要的组成部分,而对于分布式系统而言,如何提供稳健可靠、使用便捷的配置管理,则变得尤为重要且复杂。

在一个分布式系统中,往往拥有成千上百的服务实例,他们可能是可以批量统一管理的同构节点,也可能是完全不同的异构服务。Disconf,这个开源的分布式系统配置管理平台,就提供了一个较好的解决方案。

Disconf - 分布式系统配置管理平台

Disconf

简介

Disconf,是 knightliao 在 Github 上开源的分布式配置管理平台,目前版本为 2.6.36。

Disconf 专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」。

Disconf 部署极其简单,同一个上线包,无需改动配置,即可在多个环境中上线;支持部署动态化,更改配置,无需重新打包或重启,即可实时生效;提供统一管理,提供web平台,统一管理多个环境。

Disconf - 分布式系统配置管理平台

Disconf

使用

Disconf 支持

  • 配置(配置项+配置文件)的分布式化管理

  • 配置发布的统一化

  • 极简的使用方式,通过注解式编程 或 XML 无代码侵入模式实现

Disconf - 分布式系统配置管理平台

Disconf

此外,Disconf 还具有低侵入性、强兼容性、支持配置项多个项目共享,支持批量处理项目配置,支持配置监控,和配置自校验功能。

Disconf 项目包含了:客户端 disconf-Client 和管理端 disconf-Web 两个模块,均为 Java 实现。

要使用 disconf-client 客户端,在项目的 Maven POM 中加入:

<dependency>
<groupId>com.baidu.disconf</groupId>
<artifactId>disconf-client</artifactId>
<version>2.6.36</version>
</dependency>

要使用 disconf-Web 管理端,首先安装 MySQL、Tomcat、Nginx、zookeeper 和 Redis,然后进行构建

ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war
export ONLINE_CONFIG_PATH
export WAR_ROOT_PATH
cd disconf-web
sh deploy/deploy.sh

部署 War,修改 server.xml,在 Host 设定 Context:

<Context path="" docBase="/home/work/dsp/disconf-rd/war"></Context>

并设定端口为 8015,然后启动 Tomcat。最后使用 Nginx 部署前端。在浏览器访问,并进行登录,就能进入 Web 管理后台:

Disconf - 分布式系统配置管理平台

Disconf

左上角可以选择APP和环境,选择之后,就会在中间出现若干个版本,选择版本后,就会显示 APP、环境、版本 三个条件下的配置列表:

Disconf - 分布式系统配置管理平台

Disconf

Disconf 提供了简单的注解类方式 托管配置。托管后,本地不需要此配置文件,统一从配置中心服务获取。当配置被更新后,注解类的数据自动同步。

@Service
@DisconfFile(filename = "redis.properties")
public class JedisConfig {

// 代表连接地址
private String host;

// 代表连接port
private int port;

/**
* 地址, 分布式文件配置
*
* @return
*/

@DisconfFileItem(name = "redis.host", associateField = "host")
public String getHost() {
return host;
}

public void setHost(String host) {
this.host = host;
}

/**
* 端口, 分布式文件配置
*
* @return
*/

@DisconfFileItem(name = "redis.port", associateField = "port")
public int getPort() {
return port;
}

public void setPort(int port) {
this.port = port;
}
}

如果配置更新时,如果需要的是不仅注解类自动同步,并且其它类也需要做些变化,那么就需要一个回调。

@Service
@Scope("singleton")
@DisconfUpdateService(classes = { JedisConfig.class }) // 这里或者写成 @DisconfUpdateService(confFileKeys = { "redis.properties" })
public class SimpleRedisServiceUpdateCallback implements IDisconfUpdate

除了支持基于注解式的配置文件,Disconf 还支持基于XML无代码侵入式的配置:

<bean id="configproperties_disconf"
class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean">

<property name="locations">
<list>
<value>classpath:/autoconfig.properties</value>
<value>classpath:/autoconfig2.properties</value>
<value>classpath:/myserver_slave.properties</value>
<value>classpath:/testJson.json</value>
<value>classpath:/testXml2.xml</value>
<value>myserver.properties</value>
</list>
</property>
</bean>

<bean id="propertyConfigurer"
class="com.baidu.disconf.client.addons.properties.ReloadingPropertyPlaceholderConfigurer">

<property name="propertiesArray">
<list>
<ref bean="configproperties_disconf"/>
</list>
</property>
</bean>

<bean id="autoService" class="com.example.disconf.demo.service.AutoService">
<property name="auto" value="${auto=100}"/>
</bean>

Disconf 提供了强大的 Web 配置平台控制,可以:

  • 上传、更新的配置文件、配置项(有邮件通知),并且实现动态推送

  • 批量下载配置文件,查看ZK上部署情况

  • 查看配置的影响范围:哪些机器在使用,各机器上的配置内容各是什么,并且自动校验一致性

  • 支持自动化校验配置一致性

  • 简单权限控制


总结

Disconf 专注于各种分布式系统配置管理的通用组件和通用平台, 提供统一的配置管理服务。

与其他分布式配置解决方案相比,提供了同构系统的配置发布统一化,提供了配置更改的实时推送,提供了稳定有效的容灾方案,统一的Web管理后台,和异构系统的配置包管理。

目前,Disconf 已应用在多条产品线上,实践证明了解决方案的有效性和稳定性。

Disconf


来源:

https://www.toutiao.com/i6946948029836542472/


“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:[email protected]



来都来了,走啥走,留个言呗~



 IT大咖说  |  关于版权 

感谢您对IT大咖说的热心支持!



相关推荐


推荐文章