这个好用的分布式应用配置中心,我们把它开源了
导读:SpringBoot 的时代到来,对于曾经面向一堆 XML 配置的开发经历,那真是一大福音,一切都变得非常简洁,留下的就是简化的配置文件设置。但在分布式环境下呢?众多的实例集群下,动态的实例迁移等情况时常发生,导致配置管理的工作变得复杂且困难,百度研发团队通过多年的架构建设经验,把过往的配置管理的相关经验沉淀成一套通用的解决方案,现以开源的方式回馈给社区开发者,希望帮助大家彻底解决配置建设的难题。
全文约 4200 字,预计阅读时间 8 分钟。
1 分布式环境下的配置管理挑战
可以说配置化是当今应用开发与部署必备的一个能力要求,我们通常把一些容易变化以及依赖外部情况而变化的内容,通过配置化的方式来实现,这样我们就可以在零编码的情况下实现功能调整,实现极低成本的应用扩展能力。而对于配置管理方式,最为常见的方式就是配置文件方式, 通过特定的文件内容格式进行设置, 部署时也会与应用程序放在一起。这样使用方式在单机情况下比较容易且简单,但是在大型的分布式应用场景下,特别又要区分不同环境(开发,测试,线上等)就会导致管理成本与出错风险急速加大。
以上述场景为例,涉及的问题与挑战有:
操作复杂,成本高:如果有几十台实例,则需要按个登录机器进行修改, 很容易发生遗漏;
检验与查错难度大:在几十台实例修改,如有其中几台修改出错,很难发现,同时也很难进行内容回溯与回滚;
PAAS 环境下,无法有效操作:在 paas 环境下,因为漂移都现象存在,直接登录实例进行修改,已经是非常危险的行为了,因为一旦漂移,配置就会失效到最初方式;
动态加载,配置变更推送场景很难支持。
所以针对大型分布式场景,通过建立配置中心来统一管理配置的能力就显得非常必要了,把业务开发者从复杂以及繁琐的配置管理中解脱出来,只需专注于业务代码本身,从而可以显著提升开发以及运维效率。将配置和应用在部署阶段解耦也可以进一步提升发布的效率,降低部署成本。同时配置独立化管理后,针对配置的安全性、回滚能力、追溯能力、应急控制处理等也会有很强的支撑。
2 BRCC 为什么是一个好的配置中心
2.1 好的配置中心应该具有的优点
前面讲了在分布式环境中为什么需要配置中心,那么一个好的配置中心应该具备哪些优点呢?
在我们看来,好的配置中心应该有以下优点:
1. 使用便捷
业务系统使用配置中心应该是非常简单的:配置中心提供统一的 kv 管理能力,业务系统从配置中心获取配置,然后在系统中使用配置。所以我们认为,衡量配置中心是否优秀的最关键因素就是业务系统使用配置的便捷程度,越方便越是好的配置中心。
使用便捷包括了两个方面:
接入便捷 SDK 与 API 是最常见的接入方式。应尽可能的使用标准化的设计要求。SDK 如在 Java 语言使用,应兼容 Spring 与 SpringBoot 的配置规范,直接使用而无需修改原有代码, API 则采用 RESTful 的定义标准,采用资源定位方式,提升可读性与易用性;
管理便捷 好的配置中心会提供界面友好的控制台,方便使用者登录进行配置管理。配置的管理层面更加清晰化,包括产品,工程, 环境, 版本, 分组等丰富的管理机制。
2. 功能完善
配置中心最主要的功能是对配置的管理,除了对配置的 crud、批量变更、模糊匹配、快速导航之外,一个好的配置中心还需要有以下的配置能力:
推送 使用者在配置中心变更了配置,能够重新推送配置给业务系统,并且能反馈业务系统接收配置的状态。
追溯 配置变更的历史都有保存,并且变更之间能进行 diff。在分布式环境下, 可以追踪各个实例的生效状态,
多环境多版本 好的配置中心能满足业务系统在不同环境和版本下的配置需求,并提供版本之间 diff 的能力。
审计/回滚 配置中心能记录使用者做的每一次变更操作,供审计使用。
3. 运维简单
部署简单 能快速部署在各种环境,支持更丰富的环境,如虚拟机、paas、容器化等,支持集群化和高可用部署。
监控告警 提供完整,丰富监控和告警的能力,以帮助快速定位问题,快速处理风险。
4. 安全可靠
配置安全性非常关键,例如数据库的用户与密码,一旦泄露风险非常大,所以配置中心的安全性需要很全面的考量。
一是配置存储、传输的安全性,如内容可以加密;二是操作的权限管控, 必须对使用者进行权限控制,而权限控制的粒度到什么程度、使用者的操作是否有迹可循、配置变更是否可回滚,都决定着配置中心的好坏。
5. 高性能与稳定性
在很多大型业务场景下,还面临着众多产品线同时使用的情况,产生高并发的请求配置服务的情况。所以在配置服务的架构设计必须需要考虑到这种因素,实现高吞吐、高时效与高稳定的架构要求。所以整体架构要具备分布式的架构设计要求,配合弹性的扩展能力与多级的缓存同步机制,才能很好地解决这些问题,达到秒级的推送与变更能力, 提升至 4 个 9999 的稳定性要求。
2.2 BRCC 的优点
21 年 2 月我们开源了一款配置中心 BRCC (Better Remote Config Center),其主打的产品特性就是简单、易用、安全。BRCC 功能结构图如下:
特点
1. 简单好用的 SDK 端
BRCC 提供多种语言的 sdk,拿 java sdk 来说,其特点就是完全兼容 springboot 的配置规范,可以直接使用 spring 的 @Value 注解来加载配置,如下代码:
对于习惯 spring 的开发者来说,可以在 application.properties 里面设置 person.username=张三 就能在启动时将“张三”赋值给 persion 类的 name 变量上。而在使用 BRCC 时,只要把 person.username=张三 保存在 BRCC 中,引入 BRCC starter 的依赖就可以了,在业务代码上无需改造,对业务系统来说可以算是 0 侵入了。
2. 功能完备的服务端
BRCC 作为一种轻量级的分布式配置管理解决方案,部署简单,基于 spring boot 2.0 开发,打包后可以直接运行,支持配置的分发、更新推送。除了部署简单外,服务端还有一些特别实用的功能:
安全的控制台 提供了一套完整的控制台操作界面,支持多级权限控制,能够从产品线、工程、环境等维度上进行读写的控制。
配置热发布 BRCC 提供了配置推送的功能,当配置变更后,可以主动触发推送,将配置重新推送给业务系统,而业务系统收到配置后,可以根据自己的需要进行热更新,从而不需要重启既可以生效配置。在 BRCC 的服务端也可以查看推送后配置在业务系统上的生效情况。
配置操作可追溯 在业务系统的迭代升级中,常常会有配置的变动,在 BRCC 中,使用者对配置的所有变更操作都有迹可循,对历史配置也可以查询、回滚和对比。
总而言之,BRCC 是一块非常优秀的分布式配置中心解决方案,它完全兼容原生 Spring 配置规范,除了提供基本的配置存储,还提供配置注释、key-value 维度查询、变更推送、变更轨迹记录及查询、细粒度的权限控制、sdk 实例管理、友好的 UI 界面,简单部署等特点,
详细的功能请参看:https://github.com/baidu/brcc。
下面我们来看看如何快速搭建和使用吧!
3. BRCC 快速入门
3.1 快速搭建 BRCC 服务端
选择一个合适的版本, 您可以在 brcc 的 release notes 中找到每个版本支持的功能的介绍,当前推荐的稳定版本为 1.0.4。
https://github.com/baidu/brcc/releases
为了方便大家体验,我们在百度云上部署了体验环境:
在线体验环境地址:http://180.76.36.149/#/login
测试账号 1:test1 123456
测试账号 2:test2 123456
第一步,环境准备。
BRCC 依赖 Java 环境来运行。
https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/
如果您是从代码开始构建并运行 BRCC,还需要为此配置 Maven 环境。
https://maven.apache.org/index.html
请确保是在以下版本环境中安装使用:
64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
64 bit JDK 1.8+;下载 & 配置。
Maven 3.2.x+;下载 & 配置。(仅源码编译需要)
mysql5.6+
redis3.2+
64 bit JDK 1.8+ 下载
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
64 bit JDK 1.8+ 配置
https://docs.oracle.com/cd/E19182-01/820-7851/inst_cli_jdk_javahome_t/
Maven 3.2.x+ 下载
https://maven.apache.org/download.cgi
Maven 3.2.x+ 配置
https://maven.apache.org/settings.html
第二步,下载源码或者安装包。
你可以通过源码和发行包两种方式来获取 brcc。
从 Github 上下载源码方式
git clone https:
//github
.com
/baidu/brcc
.git
cd
brcc/
sh compile.sh
下载编译后压缩包方式
您可以从 release notes 下载 brcc-server.zip 包。
unzip brcc-server.zip 或者
tar
-zxvf brcc-server.
tar
.gz
cd
brcc-server
第三步,启动 BRCC 配置中心服务。
在 start.sh 中按要求配置好 mysql 和 redis 后,你就可以通过执行此脚本启动 brcc 了。
3.2 配置管理与 SDK 接入
第一步,BRCC 管理端添加配置。
在 brcc 管理端创产品线、工程、环境、版本、分组、 配置, 如下图所示。
如上图,创建了产品线 test1、工程 test-rcc、版本 1.0.0 和分组 group1,并且配置了 a、b、c 配置项。
第二步,引入 brcc-sdk-starter, 确保 pom.xml 中引入以下依赖。
目前最新的版本是 1.0.0。
第三步, 添加 BRCC 的 SDK 配置描述。
在接入 brcc 配置中心之前,确保 SpringBoot 配置是完整的, 在 application.properties 文件中添加如下内容。
配置属性介绍
第四步,在项目中进行配置开发。
brcc 完全兼容原生 spring 配置规范,你可以像 application.yml,application.properties 一样是用 brcc 中的配置,如:
第五步,配置验证。
启动日志中出现以下日志说明配置加载成功。
配置发送变更后执行推送变更操作后,日志中会出现以下提示。
以上例子,你可以到 https://github.com/baidu/brcc/tree/main/brcc-example 获得。
4 关于我们
我们大部分成员来自于百度智能小程序研发部的基础架构团队,致力于用简单易用的方式解决配置相关的需求,降低配置的研发和运维成本。
BRCC 的愿景是为业务系统提供简单、好用的配置服务。目前 BRCC 已经 github 上开源,大家可以访问获取全部代码,也可以 star 我们项目,以便高效获得我们持续的更新信息。
https://github.com/baidu/brcc
本期作者介绍 | 来自于百度智能小程序研发部的基础架构团队,致力于用简单易用的方式的解决配置相关的需求,降低配置的研发和运维成本。
招聘信息:近期热招大数据研发工程师、服务端研发工程师(C++/GO/Java),Web 前端研发工程师,iOS/Android 客户端研发工程师
欢迎关注百度 Geek 说同名公众号联系我们~
评论