文章目录
- 一、Apollo简介
- 1.1 什么是配置
- 1.2 Apollo是什么
- 1.3 为什么要配置中心
- 1.4 Apollo的核心功能(x6)
- 1.5 Apollo的基础模型(三步走)
- 二、Apollo开发实践
- 2.1 Apollo管理配置的四个维度
- 2.1.1 application
- 2.1.2 environment
- 2.1.3 cluster
- 2.1.4 namespace
- 2.2 Spring Boot集成Apollo
- 2.2.1 原理简介
- 2.2.2 Spring Boot集成Apollo的流程
- 2.2.3 配置Apollo
- 2.3 Apollo:从创建项目到发布配置
- 三、Apollo原理介绍
- 参考博客推荐
一、Apollo简介
1.1 什么是配置
数据库的连接参数、应用的启动参数、一些系统的账号密码等信息,一般都不会在代码中硬编码,而是存储于代码外部的文件中。这些信息被称为配置信息,存储配置信息的文件就是配置文件。程序需要读取配置文件来获取所需的配置信息。
1.2 Apollo是什么
Apollo(阿波罗)是携程开源的一款分布式配置中心(核心功能见后),以键值对的方式来管理配置信息,并提供了Java和.Net原生客户端和开发平台API,部署起来也简单。
1.3 为什么要配置中心
在规范的软件开发中,开发、测试和线上的环境/配置是不同的,一般会使用三套不同的配置。使用配置中心,可以集中管理配置信息,在不同配置之间切换很方便。
对于分布式系统,如果在不同节点上都单独使用一个配置,会使得配置分散不好管理,且这些配置信息冗余。换用分布式的配置中心后,就解决了冗余的问题,且可以集中管理配置。
配置中心相较于一般的配置文件方案,提供了更多的功能。
1.4 Apollo的核心功能(x6)
- 统一管理不同应用的环境、不同集群的配置
- 配置修改实时生效(热发布):用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序
- 版本发布管理:所有的配置发布都有版本概念,从而可以方便的支持配置的回滚
- 灰度发布支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例
- 权限管理、发布审核、操作审计:应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。所有的操作都有审计日志,可以方便地追踪问题
- 客户端配置信息监控:可以在界面上方便地看到配置在被哪些实例使用
1.5 Apollo的基础模型(三步走)
- 使用配置中心修改并发布配置
- 配置中心通知Apollo客户端有配置更新
- Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
二、Apollo开发实践
2.1 Apollo管理配置的四个维度
每条配置信息对应一个键值对数据,其属于某个application,并且需要设置对应的environment、cluster和namespace。
2.1.1 application
application是Apollo管理配置的基本单位,一个application对应一个项目,使用appId作为唯一标识。
2.1.2 environment
一个应用可能有多个环境(如开发/测试/线上),不同环境对应的配置一般不同。Apollo提供了四种环境:
- FAT(Feature Acceptance Test):功能测试环境
- UAT(User Acceptance Test):集成测试环境
- DEV(Develop):开发环境(默认环境)
- PRO(Produce):生产环境
2.1.3 cluster
一个应用可以有多个实例,我们可以对这些实例进行分组管理,每个分组就是一个集群。
2.1.4 namespace
我们可以通过命名空间将不同类型的配置进行分组。如,将MySQL的配置使用一个命名空间,而Redis的配置使用另一个命名空间,这样可以将大量的配置信息分散到不同的分配空间,方便分类管理
命名空间可以分为公共的和私有的,私有的命名空间只对当前应用可见,公共的命名空间在所有应用中共享。
2.2 Spring Boot集成Apollo
2.2.1 原理简介
Spring Boot项目启动时,如果使用了Apollo配置中心,则会在启动前先去配置中心中读取配置信息。使用Spring Boot集成Apollo配置中心,需要先配置Apollo(需要配置的信息见后),告诉Apollo客户端从哪个Apollo服务器读取哪个配置。
Apollo 客户端会把从服务端获取到的配置在本地文件系统缓存一份,当服务不可用或网络不通时,可以从本地恢复配置,不影响应用正常运行。
2.2.2 Spring Boot集成Apollo的流程
- 添加Maven依赖
- 配置Apollo(详见后)
- 加载Apollo的配置(在主启动类上使用@EnableApolloConfig即可,同时可指定环境)
- 发布配置(详见后)
- 获取配置(使用@Value(${key})注解注入)
2.2.3 配置Apollo
最重要的三个配置:appId,Apollo服务器地址和端口,名称空间
其他三个常用配置:缓存目录,开启预加载,开启Apollo支持日志级别的加载时机
# appId信息,可以在此处配置,也可以在META-INF/app.properties中配置 app: id: testAppId apollo: # Apollo配置中心地址,包括Apollo服务器地址和端口号 meta: http://config-service-url # 配置默认的缓存目录(可选) cacheDir: /opt/data/some-cache-dir bootstrap: # 是否开启Apollo enabled: true # 使用namespaces指定命名空间,多个namespace之间用逗号隔开 # 不指定时会使用默认的namespace namespaces: namespace1,namespace2 # 将Apollo加载时机设置为初始化日志系统之前。由于加载时机在初始化日志系统之前,所以不能打印出Apollo的日志信息 # 默认加载时机为初始化日志系统之后,此时可以打印Apollo的日志信息,但由于加载时机是在初始化日志系统之后,此时无法对日志配置进行修改 eagerLoad: enabled: true
2.3 Apollo:从创建项目到发布配置
- 创建项目
- 创建namespace:点击进入一个项目,选择环境,然后创建namespace
- 创建一个配置:在namespace列表选择一个namespace,点击“展开/收藏”来展开,然后可以看到该namespace下的配置,并且显示了新增配置等功能(可能会因为权限问题不显示新增配置)
- 发布配置:创建配置后,配置会处于未发布状态,需要发布后才能使用(需要审核)
三、Apollo原理介绍
// to do
// 暂时当做工具用就好,原理可以不了解
参考博客推荐
Apollo官网(貌似打不开)
Apollo配置中心教程、详解
Apollo配置中心
Apollo(阿波罗)——携程推出的分布式配置管理中心 & 启动Apollo & SpringBoot集成 & @ConfigurationProperties的使用姿势
SpringBoot 集成 Apollo 配置中心
全网最全的Apollo教程从入门到精通
还没有评论,来说两句吧...