天天看点

几种集中式管理框架比较

最近因为项目管理上的需要,调研集中式管理工具。

百度Disconf、携程Apollo、阿里ACM ,三者都可以满足集中式配置,并提供监听,实时改变配置。

关于3个框架的使用以及搭建请自行参考官方API文档,不再叙述。对比了3个框架的配置,如下。

disconf 依赖比较多,比如zookeeper等都需要提供环境;

apollo依赖较少,只有一个db。阿波罗在多环境配置时,需要搭建多个config-server,这种结构非常干净,但是多环境产生成本,所以暂未使用。

ACM阿里目前是不收费的,我们因为用了很多阿里云的服务,所以集成比较方便。

3者的核心都是提供一个配置中心,提供分布式的服务,并提供监听。ACM文档内有spring-cloud的支持。

集成时,对于运行时变量可以通过监听配置;对于spring启动配置参数,可以参考PropertyPlaceholderConfigurer读取配置文件,自定义一个读取类,集成第三方监听。改进后的结构如下,启动时根据远程配置更新本地读取到的properties配置。

@Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
        super.processProperties(beanFactoryToProcess, props);
        
        //taosj 20180829 读取完properties之后;根据阿里云的配置,更新properties,并启动监听
        try {
        	this.logger.info("Start load ACM configuration.");
        	AcmConfig acmConfig = this.getConfig(props);
        	this.registerAcm(acmConfig, props);
		} catch (Exception e) {
			this.logger.error("{}", e);
		}
        ACM_PROP_MAP = new HashMap<String,String>();
        for (Object key : props.keySet()){
            String keyStr = key.toString();
            String value = String.valueOf(props.get(keyStr));
            ACM_PROP_MAP.put(keyStr,value);
        }
    }