导读:SpringBoot的时代到来,对于已经面向一堆XML配置的开发经验,那真是一大福音,所有都变得十分简洁,留下的就是简化的配置文件设置。但在分布式环境下呢?泛滥的实例集群下,动静的实例迁徙等状况时常产生,导致配置管理的工作变得复杂且艰难,百度研发团队通过多年的架构建设教训,把过往的配置管理的相干教训积淀成一套通用的解决方案,现以开源的形式回馈给社区开发者,心愿帮忙大家彻底解决配置建设的难题。

全文约4200字,预计浏览工夫8分钟。

1 分布式环境下的配置管理挑战

能够说配置化是当今利用开发与部署必备的一个能力要求,咱们通常把一些容易变动以及依赖内部状况而变动的内容,通过配置化的形式来实现,这样咱们就能够在零编码的状况下实现性能调整,实现极低成本的利用扩大能力。而对于配置管理形式,最为常见的形式就是配置文件形式, 通过特定的文件内容格局进行设置, 部署时也会与应用程序放在一起。这样应用形式在单机状况下比拟容易且简略,然而在大型的分布式应用场景下,特地又要辨别不同环境(开发,测试,线上等)就会导致治理老本与出错危险急速加大。

以上述场景为例,波及的问题与挑战有:

  1. 操作简单,老本高:如果有几十台实例,则须要按个登录机器进行批改, 很容易产生脱漏;
  2. 测验与查错难度大:在几十台实例批改,如有其中几台批改出错,很难发现,同时也很难进行内容回溯与回滚;
  3. PAAS环境下,无奈无效操作:在paas环境下,因为漂移都景象存在,间接登录实例进行批改,曾经是十分危险的行为了,因为一旦漂移,配置就会生效到最后形式;
  4. 动静加载,配置变更推送场景很难反对。

所以针对大型分布式场景,通过建设配置核心来对立治理配置的能力就显得十分必要了,把业务开发者从简单以及繁琐的配置管理中解脱进去,只需专一于业务代码自身,从而能够显著晋升开发以及运维效率。将配置和利用在部署阶段解耦也能够进一步晋升公布的效率,升高部署老本。同时配置独立化治理后,针对配置的安全性、回滚能力、追溯能力、应急管制解决等也会有很强的撑持。

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注解来加载配置,如下代码:

@Componentpublic class Person {    @Value("person.username")    private String name;    // 提供Setter 和 Getter 办法}

对于习惯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...

为了不便大家体验,咱们在百度云上部署了体验环境:

在线体验环境地址:http://180.76.36.149/#/login

测试账号1:test1 123456

测试账号2:test2 123456

第一步,环境筹备。

BRCC 依赖 Java 环境来运行。

https://docs.oracle.com/cd/E1...\_cli\_jdk\_javahome\_t/

如果您是从代码开始构建并运行BRCC,还须要为此配置 Maven环境。

https://maven.apache.org/inde...

请确保是在以下版本环境中装置应用:

  1. 64 bit OS,反对 Linux/Unix/Mac/Windows,举荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;下载 & 配置。
  3. Maven 3.2.x+;下载 & 配置。(仅源码编译须要)
  4. mysql5.6+
  5. redis3.2+

64 bit JDK 1.8+ 下载

https://www.oracle.com/java/t...

64 bit JDK 1.8+ 配置

https://docs.oracle.com/cd/E1...\_cli\_jdk\_javahome\_t/

Maven 3.2.x+ 下载

https://maven.apache.org/down...

Maven 3.2.x+ 配置

https://maven.apache.org/sett...

第二步,下载源码或者安装包。

你能够通过源码和发行包两种形式来获取brcc。

  • 从 Github 上下载源码形式
git clone https://github.com/baidu/brcc...
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中引入以下依赖。

<dependency> <groupId>com.baidu.mapp</groupId><artifactId>brcc-sdk-starter</artifactId><version>${brcc.version}</version></dependency>

目前最新的版本是1.0.0。

第三步, 增加BRCC的SDK配置形容。

在接入brcc配置核心之前,确保SpringBoot配置是残缺的, 在application.properties文件中增加如下内容。

rcc.cc-server-url: http://180.76.36.149
rcc.cc-password: 123456
rcc.logProperties: true
rcc.projectName: test-rcc
env-name: dev
cc-version-name: 1.0.0
enableUpdateCallback: true
appName: example

配置属性介绍

第四步,在我的项目中进行配置开发。

brcc齐全兼容原生spring配置标准,你能够像application.yml,application.properties一样是用brcc中的配置,如:

@Value("${a}")
int a = 0;

@Value("${b}")
long b = 0;

@Value("${c}")
String c;

第五步,配置验证。

启动日志中呈现以下日志阐明配置加载胜利。

配置发送变更后执行推送变更操作后,日志中会呈现以下提醒。

以上例子,你能够到 https://github.com/baidu/brcc... 取得。

4  对于咱们

咱们大部分成员来自于百度智能小程序研发部的基础架构团队,致力于用简略易用的形式解决配置相干的需要,升高配置的研发和运维老本。

BRCC的愿景是为业务零碎提供简略、好用的配置服务。目前BRCC曾经github上开源,大家能够拜访获取全副代码,也能够star咱们我的项目,以便高效取得咱们继续的更新信息。

https://github.com/baidu/brcc

本期作者介绍 | 来自于百度智能小程序研发部的基础架构团队,致力于用简略易用的形式的解决配置相干的需要,升高配置的研发和运维老本。

浏览原文:这个好用的分布式应用配置核心,咱们把它开源了

招聘信息:近期热招大数据研发工程师、服务端研发工程师(C++/GO/Java),Web前端研发工程师,iOS/Android客户端研发工程师

欢送关注百度Geek说同名公众号分割咱们~