导读:SpringBoot的时代到来,对于曾经面向一堆XML配置的开发经历,那真是一大福音,一切都变得很是简洁,留下的就是简化的配置文件设置。但在分布式环境下呢?众多的实例集群下,动态的实例迁移等状况时常发生,致使配置管理的工做变得复杂且困难,百度研发团队经过多年的架构建设经验,把过往的配置管理的相关经验沉淀成一套通用的解决方案,现以开源的方式回馈给社区开发者,但愿帮助你们完全解决配置建设的难题。html
全文约4200字,预计阅读时间8分钟。前端
能够说配置化是当今应用开发与部署必备的一个能力要求,咱们一般把一些容易变化以及依赖外部状况而变化的内容,经过配置化的方式来实现,这样咱们就能够在零编码的状况下实现功能调整,实现极低成本的应用扩展能力。而对于配置管理方式,最为常见的方式就是配置文件方式, 经过特定的文件内容格式进行设置, 部署时也会与应用程序放在一块儿。这样使用方式在单机状况下比较容易且简单,可是在大型的分布式应用场景下,特别又要区分不一样环境(开发,测试,线上等)就会致使管理成本与出错风险急速加大。
以上述场景为例,涉及的问题与挑战有:
java
因此针对大型分布式场景,经过创建配置中心来统一管理配置的能力就显得很是必要了,把业务开发者从复杂以及繁琐的配置管理中解脱出来,只需专一于业务代码自己,从而能够显著提高开发以及运维效率。将配置和应用在部署阶段解耦也能够进一步提高发布的效率,下降部署成本。同时配置独立化管理后,针对配置的安全性、回滚能力、追溯能力、应急控制处理等也会有很强的支撑。
mysql
前面讲了在分布式环境中为何须要配置中心,那么一个好的配置中心应该具有哪些优势呢?
在咱们看来,好的配置中心应该有如下优势:
git
业务系统使用配置中心应该是很是简单的:配置中心提供统一的kv管理能力,业务系统从配置中心获取配置,而后在系统中使用配置。因此咱们认为,衡量配置中心是否优秀的最关键因素就是业务系统使用配置的便捷程度,越方便越是好的配置中心。
使用便捷包括了两个方面:
github
配置中心最主要的功能是对配置的管理,除了对配置的crud、批量变动、模糊匹配、快速导航以外,一个好的配置中心还须要有如下的配置能力:
redis
配置安全性很是关键,例如数据库的用户与密码,一旦泄露风险很是大,因此配置中心的安全性须要很全面的考量。
一是配置存储、传输的安全性,如内容能够加密;二是操做的权限管控, 必须对使用者进行权限控制,而权限控制的粒度到什么程度、使用者的操做是否有迹可循、配置变动是否可回滚,都决定着配置中心的好坏。
spring
在不少大型业务场景下,还面临着众多产品线同时使用的状况,产生高并发的请求配置服务的状况。因此在配置服务的架构设计必须须要考虑到这种因素,实现高吞吐、高时效与高稳定的架构要求。因此总体架构要具有分布式的架构设计要求,配合弹性的扩展能力与多级的缓存同步机制,才能很好地解决这些问题,达到秒级的推送与变动能力, 提高至4个9999的稳定性要求。
sql
21年2月咱们开源了一款配置中心BRCC (Better Remote Config Center),其主打的产品特性就是简单、易用、安全。BRCC功能结构图以下:
数据库
BRCC提供多种语言的sdk,拿java sdk来讲,其特色就是彻底兼容springboot的配置规范,能够直接使用spring的@Value注解来加载配置,以下代码:
@Componentpublic class Person { |
对于习惯spring的开发者来讲,能够在application.properties里面设置 person.username=张三 就能在启动时将“张三”赋值给persion类的name变量上。而在使用BRCC时,只要把 person.username=张三 保存在BRCC中,引入BRCC starter的依赖就能够了,在业务代码上无需改造,对业务系统来讲能够算是0侵入了。
2. 功能完备的服务端
BRCC做为一种轻量级的分布式配置管理解决方案,部署简单,基于spring boot 2.0开发,打包后能够直接运行,支持配置的分发、更新推送。除了部署简单外,服务端还有一些特别实用的功能:
总而言之,BRCC是一块很是优秀的分布式配置中心解决方案,它彻底兼容原生Spring配置规范,除了提供基本的配置存储,还提供配置注释、key-value维度查询、变动推送、变动轨迹记录及查询、细粒度的权限控制、sdk实例管理、友好的UI界面,简单部署等特色,详细的功能请参看https://github.com/baidu/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
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
从 Github 上下载源码方式
|
下载编译后压缩包方式
您能够从 release notes下载 brcc-server.zip 包。
|
在brcc管理端创产品线、工程、环境、版本、分组、 配置, 以下图所示。
如上图,建立了产品线test一、工程test-rcc、版本1.0.0 和分组group1,而且配置了a、b、c 配置项。
|
目前最新的版本是1.0.0。
在接入brcc配置中心以前,确保SpringBoot配置是完整的, 在application.properties文件中添加以下内容。
|
配置属性介绍
属性名称 |
默认值 |
必填 |
描述 |
---|---|---|---|
rcc.cc-server-url | null |
是 |
服务地址 |
rcc.project-name | null |
是 |
工程名称 |
rcc.cc-password | null |
是 |
工程的api密码, 建立工程时指定 |
rcc.env-name | null |
是 |
环境名称 |
rcc.cc-version-name | null |
是 |
版本名称 |
rcc.log-properties | false |
否 |
是否打印配置 |
rcc.enable-update-callback | false |
否 |
是否启用自动更新 |
rcc.connection-timeout | 3000 |
否 |
连接超时时间(ms) |
rcc.read-timeout | 10000 |
否 |
读超时时间 (ms) |
rcc.callback-interval | 2000 |
否 |
心跳探测频率(ms) |
rcc.app-name |
null |
否 |
实例上报,采集应用名 |
rcc.container-id-env-name |
hostname |
否 |
容器ID对应的环境变量名称 |
rcc.idc-env-name |
null |
否 |
机房ID对应的环境变量名称 |
rcc.use-only-site-local-interfaces |
false |
否 |
是否上报IP只读局域网卡 |
rcc.preferred-networks |
null |
否 |
上报IP来源网卡(如en0)列表,英文逗号分隔 |
rcc.ignored-interfaces |
null |
否 |
上报IP来源忽略网卡列表,英文逗号分隔 |
brcc彻底兼容原生spring配置规范,你能够像application.yml,application.properties同样是用brcc中的配置,如:
|
启动日志中出现如下日志说明配置加载成功。
配置发送变动后执行推送变动操做后,日志中会出现如下提示。
以上例子,你能够到 https://github.com/baidu/brcc/tree/main/brcc-example 得到。
咱们大部分红员来自于百度智能小程序研发部的基础架构团队,致力于用简单易用的方式解决配置相关的需求,下降配置的研发和运维成本。
BRCC的愿景是为业务系统提供简单、好用的配置服务。目前BRCC已经github上开源,你们能够访问获取所有代码,也能够star咱们项目,以便高效得到咱们持续的更新信息。
https://github.com/baidu/brcc
本期做者介绍 | 来自于百度智能小程序研发部的基础架构团队,致力于用简单易用的方式的解决配置相关的需求,下降配置的研发和运维成本。
招聘信息:近期热招大数据研发工程师、服务端研发工程师(C++/GO/Java),Web前端研发工程师,iOS/Android客户端研发工程师
欢迎关注百度Geek说同名公众号联系咱们~