1、配置中心简介

1.1、什么是配置

配置是程序员最熟悉的代码之一,每天如影随形的陪伴着我们,也伴随着应用的整个生命周期。我们为什么要在应用程序中使用配置呢?主要用于提升应用程序的灵活性、可扩展性和可维护性。常见的配置形式有:

  • 环境变量

  • 启动参数

  • 配置文件,例如:xxx.xml、xxx.properties、xxx.yml等

  • Shell脚本,例如:xxx.bat、xxx.sh等

  • 基于数据库,就是把配置信息持久化到数据库中

1.2、传统配置形式存在的问题

  1. 缺少权限控制:由于配置能改变程序的行为,不正确的配置甚至能引起灾难,所以对配置的修改必须有比较完善的权限控制。
  2. 缺少版本控制:在整个开发过程中,配置会经常发生修改,版本控制非常必要。
  3. 缺少实时控制:配置发生变化后,需要重启才能生效,费时费力,迫切需要实时生效(热发布)。
  4. 微服务化和分布式带来的挑战。

  • 当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就变得非常分散,造成使用和管理难度变大。不仅如此,各个节点服务的配置中难免会包含很多冗余代码。
  • 同一个应用程序在不同的环境(开发,测试,生产)和不同的集群经常需要有不同的配置,需要能方便得进行动态切换。

1.3、配置中心的作用

配置中心将配置从各个应用中剥离出来,自成一体,对所有的配置进行单独的统一管理,优雅的解决了上述诸多问题。在系统架构中,和安全、日志、监控等非功能需求一样,配置管理也是一种非功能需求。配置中心是整个微服务基础架构体系中的一个组件。

总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件。

2、Apollo简介

2.1、主流配置中心产品

  1. Disconf

    2014年7月百度开源的配置管理中心,专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」。目前已经不再维护更新。

    https://github.com/knightliao/disconf

  2. Spring Cloud Config

    2014年9月开源,Spring Cloud 生态组件,可以和Spring Cloud体系无缝整合。

    https://github.com/spring-cloud/spring-cloud-config

  3. Apollo

    2016年5月,携程开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    https://github.com/ctripcorp/apollo

  4. Nacos

    2018年6月,阿里开源的配置中心,也可以做DNS和RPC的服务发现。

    https://github.com/alibaba/nacos

2.2、Apollo概况

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境。

2.3、Apollo特性

基于配置的特殊性,所以Apollo从设计之初就立志于成为一个有治理能力的配置发布平台,目前提供了以下的特性:

  • 统一管理不同环境、不同集群的配置

    • Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
    • 同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
    • 通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖
  • 配置修改实时生效(热发布)
    • 用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
  • 版本发布管理
    • 所有的配置发布都有版本概念,从而可以方便地支持配置的回滚
  • 灰度发布
    • 支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
  • 权限管理、发布审核、操作审计
    • 应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
    • 所有的操作都有审计日志,可以方便地追踪问题
  • 客户端配置信息监控
    • 可以在界面上方便地看到配置在被哪些实例使用
  • 提供Java和.Net原生客户端
    • 提供了Java和.Net的原生客户端,方便应用集成
    • 支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
    • 同时提供了Http接口,非Java和.Net应用也可以方便地使用
  • 提供开放平台API
    • Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等
    • 对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制

​ 一句话:Apollo集成了数据库+Eureka+版本控制+权限管理+Http Long Polling … …

2.4、产品对比

由于Disconf不再维护,下面主要对比一下Spring Cloud Config、Apollo和Nacos。

功能点 Spring Cloud Config Apollo Nacos
配置实时推送 支持(Spring Cloud Bus) 支持(HTTP长轮询1s内) 支持(HTTP长轮询1s内)
版本管理 支持(Git) 支持 支持
配置回滚 支持(Git) 支持 支持
灰度发布 支持 支持 不支持
权限管理 支持(依赖Git) 支持 不支持
多集群 支持 支持 支持
多环境 支持 支持 支持
监听查询 支持 支持 支持
配置格式校验 不支持 支持 支持

​ 总的来说,Apollo和Nacos相对于Spring Cloud Config的生态支持更广,在配置管理流程上做的更好,其成熟度和企业级特性要强于Spring Cloud Config。

Apollo相对于Nacos在配置管理做的更加全面,Nacos则使用起来相对比较简洁,在对性能要求比较高的大规模场景更适合。

但对于一个开源项目的选型,项目上的人力投入(迭代进度、文档的完整性)、社区的活跃度(issue的数量和解决速度、Contributor数量、社群的交流频次等),这些因素也比较关键。

Apollo目前在国内开发者社区比较热,在Github上有超过1w5颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,所以从目前来看Apollo是最合适的配置中心选型。

3、安装配置 Apollo

3.1、 运行环境

  1. Java
  • Apollo服务端:JDK 1.8+

  • Apollo客户端:JDK 1.7+

    由于需要同时运行服务端和客户端,所以应该安装JDK 1.8+,另外请配置JAVA_HOME环境变量。

  1. MySQL
  • 版本要求:5.6.5+

3.2、下载资源包

下载adminservice,configservice,portal三个包
https://github.com/apolloconfig/apollo/releases

下载 apollo-quick-start数据库环境
https://github.com/apolloconfig/apollo-quick-start

3.3、使用数据库工具运行SQL文件

生成的数据库

3.4、修改配置文件的数据库连接配置

adminService

configservice

portal


3.5、启动服务

先启动config-service,然后启动admin-service, 最后启动portal

3.6、访问eureka

路径:http://localhost:8080/

3.7、访问Apollo

路径:http://localhost:8070/
账号:apollo
密码:admin

4、操作Apollo

4.1、基础设置

  1. 部门管理

apollo 默认有两个样例部门,一般都不用,可以自己修改部门,在系统参数中修改:

输入key查询已存在的部门设置:organizations

  1. 用户管理

账号apollo是默认的超级管理员,我们可以自己添加新用户。在“管理员工具”菜单中点击“用户管理”。

4.2、创建项目

  1. 点击应用

  1. 输入项目信息
  • 部门:选择应用所在的部门
  • 应用AppId:用来标识应用身份的唯一id,格式为string,需要和项目配置文件applications.properties中配置的app.id对应
  • 应用名称:应用名,仅用于界面展示
  • 应用负责人:选择的人默认会成为该项目的管理员,具备项目权限管理、集群创建、Namespace创建等权限
  1. 点击提交

创建成功后,会自动跳转到项目首页

4.3、添加公共Namespace

在项目开发中,有一些配置可能是通用的,我们可以通过把这些通用的配置放到公共的Namespace中,这样其他项目要使用时可以直接添加需要的Namespace

  1. 新建common-test项目

  2. 添加公共Namespace

4.4、添加配置项

  1. 通过表格模式添加配置

    • 点击新增配置

    • 输入配置项

  2. 通过文本模式编辑

Apollo除了支持表格模式,逐个添加、修改配置外,还提供文本模式批量添加、修改。 这个对于从已有的properties文件迁移尤其有用

  • 切换到文本编辑模式

  • 输入配置项,并点击提交修改

server.servlet.context-path = /
spring.http.encoding.enabled = true
spring.http.encoding.charset = UTF-8
spring.http.encoding.force = true

  • 发布配置

4.5、关联公共组件Namespace

  1. 打开应用服务,点击左侧添加Namespace

  1. 添加Namespace
  2. 根据需求可以覆盖引入公共Namespace中的配置,下面以覆盖server.servlet.context-path为例
  3. 修改server.servlet.context-path为:/consumer-service
  4. 发布修改的配置项

4.6、添加私有Namespace

  1. 添加项目私有Namespace

  2. 添加配置项

  3. 发布配置

4.7、集群配置

​ 在有些特殊情况下,应用有需求对不同的集群做不同的配置,比如部署在A机房的应用连接的RocketMQ服务器地址和部署在B机房的应用连接的RocketMQ服务器地址不一样。在这种情况下,可以通过在Apollo创建不同的集群来解决。

  1. 点击页面左侧的“添加集群”按钮

  2. 输入集群名称,选择环境并提交

  3. 切换到对应的集群,修改配置并发布即可

结束!!!!!


                                 不必焦虑,继续完善自己吧!

Apollo 配置中心相关推荐

  1. Spring Boot 集成 Apollo 配置中心,真香、真强大!

    作者:超级小豆丁 来源:http://www.mydlq.club/article/42/ 由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用. 1.背景 随着程序 ...

  2. 02.Apollo配置中心整合spring cloud zuul

    一.前言 携程 Apollo 配置中心 学习笔记, Windows 系统搭建基于携程Apollo配置中心分布式模式, 在此基础上,介绍如何使用阿波罗整合zuul实现动态路由. 二.项目搭建 参考htt ...

  3. 灰度值取值范围_灰度实战(二):Apollo配置中心(2)

    CSDN博客地址(关注,点赞) 人工智能推荐 GitHub(Star,Fork,Watch) [前言] 在上一篇博文<灰度实战(一):Apollo配置中心(1)>中讲解了如何搭建Apoll ...

  4. Sentinel 规则持久化到 apollo 配置中心

    Sentinel 规则默认是存储在内存中的,只要服务重启之后对应的规则也会消失,实际的生产中肯定是不允许这种操作,因此 Sentinel 官方推荐在生产架构中使用第三方数据源作为永久存储中心,比如 n ...

  5. apollo 配置中心_Apollo配置中心搭建笔记

    如我所愿,十一小长假之前成功跳槽了. 由于准备还算充分,offer拿了不少,涨幅也普遍达到了预期. 但是在offer对比过程中我还是纠结了许久.在薪资差别不大的情况下,主要考虑的是平台规模.业务前景. ...

  6. Apollo配置中心原理简介

    配置中心发展背景 随着程序功能的日益复杂,程序的配置日益增多: 各种功能的开关.参数的配置.服务器的地址-- 对程序配置的期望值也越来越高: 配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善 ...

  7. Apollo 配置中心:分布式部署

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景. 服 ...

  8. apollo 配置中心_.NET Core 下使用 Apollo 配置中心

    " Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...

  9. 记录spring、springboot集成apollo配置中心

    一, spring集成apollo,前提是apollo配置中心服务端已经在运行中 上面是我在阿里云服务搭建的apollo配置中心服务端,登录后的样子.没有搭建服务端的小伙伴,请先搭建好apollo的服 ...

  10. apollo 配置中心_配置中心——Apollo小记

    一.什么是配置 配置是程序运行时,动态调整行为的能力. 配置有以下属性: 配置是独立于程序的只读变量 同一份程序在不同的配置下才会有不同的行为,而且配置对于程序来说是只读的,所以程序可以通过读取配置来 ...

最新文章

  1. 转:Ubuntu中安装和配置 Java JDK,并卸载自带OpenJDK(以Ubuntu 14.04为例)
  2. (39)通过 PID 获取 EPROCESS
  3. 有点小激动-Index Condition Pushdown Optimization
  4. SAP Spartacus category navigation按钮之间的间隔问题
  5. cuda编程_CUDA编程入门(四)并行归约算法
  6. svn代码版本管理总结
  7. 2019 秋招提前批蘑菇街一面面经(带答案)
  8. mysql db link_oracle11G数据库db_link连接mysql配置(Windows下无需安装Gateway组件)
  9. Apache Tomcat 再爆严重安全漏洞
  10. 谈谈我们的学习和我们的Blog
  11. mysql用utf-8_为什么在MySQL中不建议使用UTF-8
  12. 魔兽世界私服Trinity,从源码开始
  13. 在线编译器汇总|2020年最新版
  14. 转载:SpringBoot非官方教程 | 第二十四篇: springboot整合docker
  15. 查询表锁争用情况 table_locks_waited table_locks_immedaite
  16. linux检查网络是否通畅_Linux检测网络通畅命令
  17. python安装环境相关,已被坑过
  18. 2019年 第11届 全国大学生数学竞赛 初赛(非数学类)试题详细解答
  19. C语言解决exe程序闪退最简单的方法。
  20. 算法:求两个数的最大公约数与最小公倍数的方法

热门文章

  1. 广州欢聚时代php面试题,欢聚时代实习生面试经验
  2. React解密:React中PureComponent和Component的区别是什么
  3. 品牌溢价,你确定不是在骗人?
  4. 树莓派安装ubuntu mate记录
  5. 怎么查dns服务器记录的请求信息,linux 查询dns服务器日志
  6. 高等教育心理学:学生情感与意志的发展
  7. flowable并行审批_Flowable6.4 – 并行网关和包容网关 | 字痕随行
  8. 数据挖掘一般流程及模型整理
  9. drupal安装chosen模块
  10. Type-C小家电,将传统小家电的接口从USBMicor接口5V充或者AC DC充电换PD,QC,AFC快充,不再为了充电器而烦恼。