自学内容网 自学内容网

Apollo(阿波罗)配置中心

Apollo(阿波罗)配置中心:

采用分布式架构,它能够集中管理不同环境、不同集群的配置,配置修改后能够实时推送到应用端,有可视化界面 和 规范的权限,支持 版本管理、灰度发布、监控 等功能。

主要模块及功能:

AdminService:服务于管理界面。提供配置管理、配置修改发布

ConfigService:服务于客户端。配置获取、配置推送

Client:应用客户端,获取应用配置,支持实时更新。通过MetaServer获取ConfigService的服务列表,使用客户端软负载SLB方式调用ConfigService

Portal:配置管理界面。通过MetaServer获取AdminService的服务列表,使用客户端软负载SLB方式调用AdminService

Eureka:服务注册、发现。Config/AdminService注册实例并定期报心跳,和ConfigService组在一起部署

MetaServer:

NginxLB:

配置更新流程

Portal(发布)  ——> AdminService(保存)  ——>  ConfigDB(ReleaseMessage)  <—— (读取)ConfigService(通知) <—— > (拉)Client

1、用户首先在 Portal 管理界面操作配置发布

2、Portal 调用 Admin Service 的接口操作发布

3、Admin Service 在配置发布后会往 ReleaseMessage 表插入一条消息记录(AppId+Cluster+Namespace)

4、Config Service 有一个线程会每秒扫描一次 ReleaseMessage 表,看是否有新的消息记录

5、客户端会发起一个HTTP请求到 Config Service 的notifications/v2接口,建立60s的长连接,当做监听器

6、Config Service 如果发现有新的消息记录,就会通知 AppId+Cluster+Namespace给所有的消息监听器,监听器接口返回变化的配置的 Namespace 给客户端。

监听器如果在 60 秒内没有得到客户端关心的配置发布,会返回 HTTP 状态码 304给客户端,客户端再次重试

7、客户端再立即请求 Config Service 获取该 Namespace 的最新配置。

8、此外,Apollo 提供了容错机制,防止长连接的推送机制失效 导致配置无法更新,客户端会定时主动向 Apollo 拉取配置,该定时频率默认为 5 分钟

ConfigService/AdminService/ConfigDB 三者在每个环境 (DEV/FAT/UAT/PRO) 中都要部署一份。

一套 Portal 就可以集中管理多套环境 (DEV/FAT/UAT/PRO) 中的配置。

Eureka 服务注册中心:ConfigService注册后 Client 就能找到它; ConfigService注册了,Portal 就能找到它。两个Service定期发送保活心跳。

(一)Apollo 和 Spring Cloud Config  区别

区别点ApolloSpring Cloud Config
配置界面有界面管理不同环境、不同集群配置没有,需要通过 git 操作
生效时间实时

重启生效,或手动refresh 生效;Config 需要通过 Git webhook,加上额外的消息队列才能支持实时生效

版本管理界面上有 发布历史和回滚按钮没有,需要通过git操作
灰度发布支持 灰度给部分实例不支持 
权限审核支持修改、发布权限分离

需要通过 git 仓库设置,不支持权限分离

监控可以看到当前哪些客户端在使用哪些配置不支持
配置获取性能快,通过数据库访问+缓存支持较慢,需要从 git clone repository,然后从文件系统读取
客户端支持原生支持 Java 和 .Net 应用;提供 API 支持其它语言应用支持 Spring 应用,提供 annotation 获取配置

(二)为什么用 Eureka 作为服务注册中心,而不是使用传统的 zookeeper

(1)和Spring Boot、Spring Cloud 集成比较方便。

(2)Eureka 可以在 应用自身的容器中启动,即是服务提供者,也充当了Eureka 的角色, 极大的提高了服务的可用性。

(3)完整的服务注册、发现。

参考资料:


原文地址:https://blog.csdn.net/jingzhi111/article/details/136869471

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!