Apollo - 阿波罗配置中心使用,一文搞定!

Apollo基本概念一、简介Apollo - A reliable configuration management systemApollo的Github地址Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用的不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo包括服务端和客户端两部分:1、服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安
摘要由CSDN通过智能技术生成

Apollo基本概念

一、简介

Apollo - A reliable configuration management system
Apollo的Github地址

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

Apollo包括服务端和客户端两部分:
1、服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
2、Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

二、特性

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

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

Apollo提供了一个统一界面集中式管理不同环境(environment)、不同集群(cluster)、不同命名空间(namespace)的配置。
同一份代码部署在不同的集群,可以有不同的配置,比如zookeeper的地址等
通过命名空间(namespace)可以很方便地支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖

2、配置修改实时生效(热发布)

用户在Apollo修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序

3、版本发布管理

所有的配置发布都有版本概念,从而可以方便地支持配置的回滚

4、灰度发布

支持配置的灰度发布,比如点了发布后,只对部分应用实例生效,等观察一段时间没问题后再推给所有应用实例

5、权限管理、发布审核、操作审计

应用和配置的管理都有完善的权限管理机制,对配置的管理还分为了编辑和发布两个环节,从而减少人为的错误。
所有的操作都有审计日志,可以方便地追踪问题

6、客户端配置信息监控**

可以在界面上方便地看到配置在被哪些实例使用

7、提供Java和.Net原生客户端

①提供了Java和.Net的原生客户端,方便应用集成
②支持Spring Placeholder, Annotation和Spring Boot的ConfigurationProperties,方便应用使用(需要Spring 3.1.1+)
③同时提供了Http接口,非Java和.Net应用也可以方便地使用

8、提供开放平台API

Apollo自身提供了比较完善的统一配置管理界面,支持多环境、多数据中心配置管理、权限、流程治理等特性。不过Apollo出于通用性考虑,不会对配置的修改做过多限制,只要符合基本的格式就能保存,不会针对不同的配置值进行针对性的校验,如数据库用户名、密码,Redis服务地址等。
对于这类应用配置,Apollo支持应用方通过开放平台API在Apollo进行配置的修改和发布,并且具备完善的授权和权限控制。

三、基础模型

在这里插入图片描述
1、用户在配置中心对配置进行修改并发发布
2、配置中心通知Apollo客户端有配置更新
3、Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

四、Apollo的四个维度

Apollo基于四个维度去管理key-value格式的配置:

1、application(项目/应用) - 一级维度

②Apollo 客户端在运行时需要知道当前项目是谁,从而可以根据不同的应用来获取对应的项目的配置。
②这个项目在SpringBoot代码里用app.id来标识,在VM options中用-Dapp.id来标识。

2、environment(环境) - 二级维度

实际开发中,不可能只有一个环境。常见的如:
①DEV - 开发环境
②FAT - 功能验收测试环境
③UAT - 用户验收测试环境
④PRO - 生产环境
⑤其他环境(test-测试环境、sit-系统集成测试环境、pre-灰度环境)

3、cluster(集群) - 三级维度

一个应用下不同实例的分组,比如上海、北京两个机房为两个集群,它们中某些参数配置可能不一致。

4、namespace(命名空间) - 四级维度

可以简单地把 namespace 类比为不同的配置文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC 配置文件,应用自身的配置文件等。

4.1、Namespace的两种权限

①public(公共的):public权限的Namespace可以被任何应用获取
②private(私有的):只能被所属的应用获取到。一个应用尝试获取其他应用private的Namespace,Apollo会报404错误。

4.2、Namespace的三种类型

①公有类型:具有public权限,游离与应用之外的配置,名称全局唯一。
②私有类型:具有private权限。
③关联类型(继承类型):具有private权限,可以将继承关联的Namespace的配置,并且可以覆盖配置。

五、本地缓存

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。
本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。

Mac/Linux/opt/data/{
   appId}/config-cache
WindowsC:\opt\data{
   appId}\config-cache

本地配置文件会以下面的文件名格式放置于本地缓存路径下:

{
   appId}+{
   cluster}+{
   namespace}.properties
六、客户端设计

在这里插入图片描述
1、客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
2、客户端还会定时从 Apollo 配置中心服务端拉取应用的最新配置。
3、这是一个 fallback 机制,为了防止推送机制失效导致配置不更新
4、客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回 304 - Not Modified
5、定时频率默认为每 5 分钟拉取一次,客户端也可以通过在运行时指定 apollo.refreshInterval来覆盖,单位为分钟。
6、客户端从 Apollo 配置中心服务端获取到应用的最新配置后,会保存在内存中。
7、客户端会把从服务端获取到的配置在本地文件系统缓存一份,在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。
8、应用程序从 Apollo 客户端获取最新的配置、订阅配置更新通知。
长连接是通过 Http Long Polling 实现的,具体而言:
1、客户端发起一个 Http 请求到服务端
2、服务端会保持住这个连接 60 秒
3、如果在 60 秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的 namespace 信息,客户端会据此拉取对应 namespace 的最新配置
3、如果在 60 秒内没有客户端关心的配置变化,那么会返回 Http 状态码 304 给客户端
客户端在收到服务端请求后会立即重新发起连接,回到第一步
4、考虑到会有数万客户端向服务端发起长连,在服务端使用了 async servlet(Spring DeferredResult) 来服务 Http Long Polling 请求。

七、总体设计

在这里插入图片描述
从上往下看:
1、Config Service 提供配置的读取、推送等功能,服务对象是 Apollo 客户端
2、Admin Service 提供配置的修改、发布等功能,服务对象是 Apollo Portal(管理界面)
3、Config Service 和 Admin Service 都是多实例、无状态部署,所以需要将自己注册到 Eureka 中并保持心跳
4、在 Eureka 之上我们架了一层 Meta Server 用于封装Eureka的服务发现接口
5、Client 通过域名访问 Meta Server 获取Config Service服务列表(IP+Port),而后直接通过 IP+Port 访问服务,同时在 Client 侧会做 load balance 错误重试
6、Portal 通过域名访问 Meta Server 获取 Admin Service 服务列表(IP+Port),而后直接通过 IP+Port 访问服务,同时在 Portal 侧会做 load balance、错误重试
7、为了简化部署,我们实际上会把 Config Service、Eureka 和 Meta Server 三个逻辑角色部署在同一个 JVM 进程中

八、可用性考虑

配置中心作为基础服务,可用性要求非常高,下面的表格描述了不同场景下Apollo的可用性:

某台 config service 下线 无影响 Config service无状态,客户端重连其它config service
所有 config service 下线 客户端无法读取最新配置,Portal无影响 客户端重启时,可以读取本地缓存配置文件
某台 admin service 下线 无影响 Admin service无状态,Portal重连其它 admin service
所有 admin service 下线 客户端无影响,portal无法更新配置
某台 portal 下线 无影响 Portal域名通过slb绑定多台服务器,重试后指向可用的服务器
全部 portal 下线 客户端无影响,

  • 9
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Apollo Docker Quick Start Files是用于在Docker容器中快速启动Apollo配置中心的文件集合。Apollo配置中心是携程框架部门开发的分布式配置管理平台,用于实现配置集中管理和动态配置更新的需求。 使用Docker容器来快速启动Apollo配置中心可以提高开发和部署的效率,方便跨平台和环境的使用Apollo Docker Quick Start Files包含了配置中心的相关配置文件、Dockerfile和启动脚本等,使用这些文件可以快速构建和启动配置中心的Docker容器。 在启动Docker容器之前,我们需要先配置好Apollo配置中心的相关信息,在配置文件中指定数据库、端口等参数。然后,使用Docker命令构建Docker镜像并生成Docker容器,通过运行启动脚本,让Docker容器启动并运行Apollo配置中心。 通过使用Apollo Docker Quick Start Files,可以方便地在各种环境中部署和启动Apollo配置中心,提高系统的可维护性和可扩展性。同时,通过Docker的特性,我们可以更好地管理和监控配置中心的运行状态,更灵活地进行配置的更新和维护。 总之,Apollo Docker Quick Start Files提供了一种便捷的方式来快速部署和启动Apollo配置中心,使得我们能够更加高效地管理和使用分布式配置,提高系统的稳定性和可靠性。 ### 回答2: Apollo是一个分布式配置中心,用于管理和配置分布式系统中的应用程序的配置信息。Docker是一种容器化平台,可以将应用程序打包成容器,并在不同的环境中快速部署和运行。 Apollo-Docker-Quick-Start-Files是一个用于快速开始使用Apollo和Docker的文件集合。它包含了一系列的配置文件和脚本,可以帮助用户快速搭建Apollo配置中心使用Docker部署应用程序。 在这个文件集合中,用户可以找到一些配置文件示例,如application.properties和meta-server.properties,这些文件定义了Apollo配置中心和元数据服务器的相关配置信息。用户可以根据自己的需要进行修改和定制。 此外,还有一些脚本文件,如docker-compose.yaml和Dockerfile。这些文件用于定义Docker容器的构建和部署规则。用户可以使用docker-compose命令,根据docker-compose.yaml文件一键启动Apollo配置中心和应用程序的Docker容器。 使用Apollo-Docker-Quick-Start-Files,用户可以轻松地搭建Apollo配置中心和部署应用程序。它提供了一种快捷的方式,帮助用户快速入门并使用Apollo和Docker进行分布式系统的配置和部署管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值