Apollo 是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
产品特色
- 分布式配置管理:在微服务架构中,应用程序可能分为多个微服务组件。Apollo可以帮助开发者集中管理这些微服务的配置信息,实现配置的统一化和集中化。
- 动态配置更新:Apollo支持在线修改配置并实时推送到各个客户端,无需重新部署应用程序。这有助于提高系统的灵活性和可维护性。
- 多环境和多集群配置支持:Apollo允许在不同环境(如开发、测试、生产等)和不同集群下管理配置信息。这有助于开发者在不同场景下灵活地使用和管理配置。
- 灰度发布:Apollo支持配置的灰度发布,允许开发者逐步推出新的配置更改,以便更好地控制风险和观察配置更改的影响。
- 权限管理和审计:Apollo提供了完善的权限管理和操作审计功能,有助于保证配置信息的安全和准确。
- 高可用性和容错性:Apollo采用分布式部署,确保了系统的高可用性和容错性。
贴上一张官方的结构图
这张图现在看,疑惑是正常的,那么就接着文章继续往下看
主要模块解析
- Portal Service 前端web管理界面,提供可视化的配置管理界面,支持配置的添加、修改、删除等操作,并能够对配置进行版本控制和历史回滚,通过IP+Port访问服务
- Config Service 提供配置的读取、推送等功能,提供配置更新推送接口(基于Http long polling),服务对象是Apollo客户端
对于负载是否会大的设计
- 服务端使用Spring DeferredResult实现异步化,从而大大增加长连接数量
- 目前使用的tomcat embed默认配置是最多10000个连接(可以调整),使用了4C8G的虚拟机实测可以支撑10000个连接,所以满足需求(一个应用实例只会发起一个长连接)
- Admin Service 提供配置的修改、发布等功能,服务对象是 Portal(管理界面)
- Eureka 项目依赖于微服务,Config Service和Admin Service会向Eureka注册服务,并保持心跳,目前Eureka在部署时和Config Service是在一个JVM进程中的
- Client 业务代码客户端拉取配置,通过IP+Port访问服务
部署
环境依赖: java1.8+,Centos7(windows可选择Quick Start方式体验),mysql5.6.5+
本文将分部署部署2个节点,从而体验2个环境的应用,我们通过不同端口的方法,来模拟2个linux服务器,为此准备了
10.0.50.20 linux服务器,运行Apollo服务
10.0.54.9 mysql服务器
10.0.50.65 mysql服务器
创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB
和ApolloConfigDB
,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
-
ApolloPortalDB 大多提供了
Portal Server
管理界面的配置,里面继承了多维度(例如环境、节点配置)的管理,所以只需要在生产环境部署一个即可
1.1 10.0.54.9创建ApolloPortalDB数据库
1.2 导入数据https://github.com/apolloconfig/apollo/blob/master/scripts/sql/apolloportaldb.sql
-
ApolloConfigDB 需要在每个环境部署一套,如dev、uat和pro分别部署3套ApolloConfigDB,属于各个节点的业务存储
2.1 10.0.54.9和10.0.50.65分别创建Apol