应用动态配置系统

2022-07-02 14:14李小红
电脑知识与技术 2022年15期
关键词:配置

李小红

摘要:配置(Configuration) 概念对每个技术人员都不陌生,基本上每个系统都有配置参数。造成这种现象的本质是技术人员无法掌控和预知一切,回到软件领域上,就需要他们对系统的某些功能特性预留出控制的余地,以便在未来需要时,可以人为控制系统的行为特征。配置即程序运行时动态调整行为的能力。随着用户规模的增大和计算功能的微服务化,成百上千个微服务组件的运行都需要依赖于各种配置文件。因此,技术人员需要通过配置中心统一管理配置。文章介紹如何基于CMDB[1]和Archaius[2]技术打造可靠的应用动态配置系统。

关键词:配置;CMDB;Archaius

中图分类号:TP311      文献标识码:A

文章编号:1009-3044(2022)15-0058-03

1 动态配置系统背景

快速迭代的系统要求需求的变更能快速实现并上线。经统计,公司20%的需求是修改配置类的,如果每次修改都需要完整的上线流程,效率低下。而且传统的配置文件方式和数据库的方式已无法满足开发人员对配置管理的要求:

1)安全性:配置跟随源代码保存在代码库中,容易造成配置泄漏;

2)时效性:修改配置,需要重启服务才能生效;

3)局限性:无法支持灰度动态调整:例如日志开关、功能开关。

1.1 安全性

程序配置中包含有数据库账号或密码,加密的密钥等信息都明文存储在项目代码库中,且对所有人员开放,隐藏着巨大的风险。

1.2 时效性

配置改动后,需要和修改代码一样,走完整的上线流程。配置修改上线涉及4方人员,8个步骤。

1.3 局限性

配置变更本身也蕴藏着风险,因为配置的变更也就代表着业务逻辑的变化。软件技术开发人员也希望变更能实现灰度上线。

2 应用配置系统的设计

当前,各大公司都有自己的应用配置中心产品,调研市面上当前比较常用的技术,详细对比情况见表1。

虽然都基本满足需求,但为了与当前芒果TV运维体系的CMDB无缝结合,调研发现,CMDBuild[5]开源项目非常契合需求,且与Netflix的动态配置读取SDK完美配合。

2.1 CMDBuild

芒果TV基于开源和自研构建了很多运维平台,如多云持续交付、统一监控、自动化测试等。但是这些平台各自独立地维护配置信息,形成配置信息的孤岛,导致配置管理困难。

存在的问题举例:

1)配置数据手动维护,且无标准工作流保障,容易导致配置数据与资源实际情况不匹配;

2)各平台之间的配置数据管理没有联动,容易导致配置的不一致;

3)配置数据模型不统一,每个平台采用自己的方式,互操作性差,沟通成本高;

4)配置数据没有通过存取接口对外暴露,甚至保存在文件中,使用不方便;

5)代码配置随代码一起存放在Git[6],敏感信息存在安全风险;

6)CMDB是运维标准化、自动化的基石,提供全局唯一的、权威的配置数据来源。

CMDBuild是意大利Tecnotecasrl公司开源的配置管理数据库解决方案,遵循AGPL开源许可协议。最早发布于2006年,每年更新数次,最新版本3.0进行了大规模的重构,于2019年4月12日发布。

CMDBuild是灵活可配置的,原生支持以下功能。

1)数据模型可配置;

2)工作流可配置;

3)报表可配置;

4)仪表盘可配置;

5)通过API对接外部系统;

6)自定义页面(提供GUI框架);

7)构建连接器对接外部数据源(提供连接器框架)。

CMDBuild其实是一个配置管理引擎,软件技术开发人员可以基于它定制出不同的CMDB解决方案。它有两个预配置的CMDB解决方案(均为开源,但是部分功能和服务只有付费的订阅用户可使用) :

1)Ready2Use:面向IT资产和服务管理,符合ITIL[7]最佳实践(不仅是CMDB,更是CMS);

2)OpenMAINT:面向物业资产管理及维护。

CMDBuild有两种工作模式:

1)系统管理模式下:系统管理员依据事先设计的 CMDB模型,定义数据模型、工作流、报表和仪表盘等要素,这些要素共同组成CMDB应用;

2)数据管理模式下:数据管理员可以通过GUI界面对CMDB中的配置数据进行管理,也可以通过 API实现CMDB与外部系统的交互和数据同步。

芒果TV的CMDB借鉴Ready2Use的模型和思路,基于Ready2Use来扩展。

CMDBuild支持:

1)配置模型可以灵活定义、扩展;

2)以关系图的形式显示配置项之间的关系;

3)访问权限管理可以细化到类(Class)、卡片(Card)、字段(Field)级别;

4)可保留并查询数据的历史修改记录。

CMDBuild的工作流可以根据场景需要灵活定制,可以配置审批人和权限控制,详细记录管理活动的细节,支持配置邮件通知,支持自动任务调度。

CMDBuild提供两种不同风格的API接口:REST和SOAP。

基于CMDBBuild设计的应用配置模型如下:

2.2 Archaius

Archaius是Netflix公司开源项目之一,基Java的配置管理类库,主要用于多配置存储的动态获取。主要功能是对Apache Common Configuration类库的扩展。在开发中,可以将其用作分布式配置管理依赖构件。同时,它有如下一些特性:8308A0F7-E324-4974-BC57-1A42DF3979B2

1)配置可动态调整;

2)配置支持类型(Int, Long, Boolean等);

3)高性能和线程安全;

4)提供一个拉(pulling)配置的框架,可以从配置源动态拉取变更的配置;

5)支持回调(callback)机制,在配置变更时自动调用;

6)组合配置(核心内容)。

图3是Archaius的总体设计:

3 应用动态配置

结合CMDBuild和Archaius的应用动态配置系统架构如图4所示:

基于此架构的结构图如图5所示。

在CMDBuild后台修改配置后,通过工作流审核,可以按数据中心、区域、集群和服务器进行灰度。

集群下某台机器的配置文件名规则,以base.properties为例:

base-${CMDB_DC}-${CMDB_REGION}-${CMDB_ENV}-${CMDB_SERVER}.properties

机器开启时,会设置有环境变量:CMDB_DC、CMDB_REGION、CMDB_ENV、CMDB_SERVER。

代码启动时,Archaius会根据环境变量优先读取:base-${CMDB_DC}-${CMDB_REGION}-${CMDB_ENV}-${CMDB_SERVER}.properties,以此来实现灰度配置生效,当未找到此文件时,再读取默认配置文件。

4 应用动态配置收益

使用新的动态配置系统后,配置修改生效流程非常简单。

5结束语

对于配置文件,软件技术人员并不陌生,它提供了可以动态修改程序运行能力。引用别人的一句话就是:系统运行时(runtime)飞行姿态的动态调整。把这种工作称之为在快速飞行的飞机上修理零件,技术人员总是无法掌控和预知一切。对于系统来说需要预留一些控制线条,以便在需要的时候做出调整,控制系统方向(如灰度控制、限流调整),这对于拥抱变化的互联网行业尤为重要,应用动态配置系统恰好达到了此目的。

参考文献:

[1] 姜才康.配置管理系统建设实践与探索[J].金融电子化,2018(2):68-70.

[2] 杨平. 媒体融合服务网格技术及应用[C]//国家广播电视总局科学技术委员会秘书处、中国电子学会有线电视综合信息技术分会.全国互联网与音视频广播发展研讨会(NWC)暨中国数字广播电视与网络发展年会(CCNS)论文集(2020年特辑).国家新闻出版广电总局科学技术委员会秘书处,2020:10.

[3] 李迪.基于Raft协议及RocksDB的分布式统一配置中心设计与实现[D].北京:北京邮电大学,2019.

[4] 李帥.微服务架构的研究及其在线教育系统的实现[D].北京:北京邮电大学,2018.

[5] 苏星星. 服务器集群资源生命周期资源管理平台的设计与实现[D].长沙:湖南大学,2019.

[6] 宋冬生.Git——版本管理之利器[J].程序员,2007(11):118-119,10.

[7] 周盈,胡顺全.基于ITIL的自动化运维方法分析[J].中国管理信息化,2021,24(6):130-131.

【通联编辑:唐一东】8308A0F7-E324-4974-BC57-1A42DF3979B2

猜你喜欢
配置
关于生态园林设计中植物的配置研究
电网无功补偿科学配置与优化控制的一体化研究
草坪在园林设计中的应用
简析电力系统继电保护技术及配置应用
一种智能家居系统自学习免配置方法
论高校网络防火墙的配置与管理
世界主要国家军民融合式发展财力资源配置的启示
世界主要国家军民融合式发展财力资源配置的启示