Home
img of docs

讲解Apollo的核心组件,包括配置管理端、客户端SDK和后端服务,以及如何集成到Java项目中进行配置管理。

chou403

/ Middleware

/ c:

/ u:

/ 9 min read


一学一个不吱声

Apollo

Apollo 定义

Apollo 是一个 分布式配置中心,由携程公司开源,旨在帮助开发者集中化地管理不同环境,不同服务的配置。它提供了 配置管理,配置动态推送版本控制 等功能,尤其适用于微服务架构和云原生环境。

Apollo 主要特点

  • 集中式配置管理: 支持跨环境,跨集群的配置管理。
  • 实时推送与热更新: 修改配置后,客户端能够实时感知并自动更新配置。
  • 版本管理: 自动保存配置的历史版本,并支持回滚。
  • 高可用性: 通过多实例集群部署,实现高可用性。
  • 权限管理: 支持配置权限的细粒度管理。
  • 多语言支持: 主要支持 Java 客户端,也可以通过 HTTP 接口使用。

相似的工具

以下是与 Apollo 相似的配置管理工具,常用于微服务架构中的配置管理:

工具优点缺点
Spring Cloud Config- 原生支持 Spring 生态
- 配置版本管理依赖 Git,方便版本控制
- 和 Spring Cloud 完美集成
- 配置更新后需要手动刷新
- 不支持实时推送
- 支持的语言主要是 Java
Nacos- 阿里巴巴开源,功能全面,支持服务发现与配置管理
- 适配多种客户端,支持 Spring Cloud
- 配置更新的实时性较差,无法与 Spring Boot 等直接集成
- 需要额外服务发现功能
Consul- 提供服务发现与配置管理功能
- 强大的 ACL 权限管理与健康检查支持
- 配置的实时推送功能较弱
- 需要额外的服务发现支持,使用复杂度较高
Etcd- 高性能的分布式键值存储系统,适用于大规模应用
- 和 Kubernetes 集成紧密
- 功能相对底层,缺少配置管理的高级特性
- 适合配置存储,但不够灵活

Apollo vs 其他工具的区别

特性ApolloSpring Cloud ConfigNacosConsul
实时推送支持实时推送,通过长轮询机制推送更新不支持,配置修改后需手动刷新支持实时推送,通过长轮询机制不支持实时推送,需手动刷新配置
支持环境管理多环境管理(如 dev, test, prod)通过 Git 分支管理环境支持多环境管理支持多环境管理
多语言支持主要支持 Java,提供 REST API 支持其他语言主要支持 Java支持多语言客户端支持多语言客户端
集成易用性易于与 Spring Cloud 集成原生支持 Spring Cloud支持 Spring Cloud,需额外配置服务发现支持 Spring Cloud,需额外配置服务发现
配置管理支持配置版本,历史记录,回滚基于 Git,简单的配置管理支持动态配置更新支持动态配置更新

Apollo 的优缺点

优点

  1. 实时推送与热更新: 当配置发生变化时,客户端能够立即感知并获取新的配置,减少了系统重启的需求。
  2. 跨环境与多集群管理: 支持多个环境(如 dev,test,prod)和多集群管理,适合分布式系统。
  3. 配置版本控制: 每次配置更新都会生成一个版本,可以追踪变更历史,支持回滚操作。
  4. Web UI 操作方便: 提供友好的 Web 控制台,方便操作和管理。
  5. 丰富的权限管理与审计功能: 支持基于角色的权限控制,且记录配置的变更日志。
  6. 多语言支持: 通过 HTTP 接口可以支持 Java 以外的其他语言。

缺点

  1. 部署与运维复杂: 需要单独部署 Config Server 和 Admin Server,增加了运维成本。
  2. 只支持 HTTP 或 Java 客户端: 对于非 Java 环境,需要通过 HTTP API 或其他方式进行配置获取。
  3. 集群扩展性: 需要确保服务端有高可用配置,否则可能出现单点故障问题。
  4. 配置修改频繁时可能影响性能: 当配置变更频繁时,推送机制可能对系统性能产生影响。

为什么选择 Apollo

  1. 集中式配置管理: 在微服务架构中,多个服务可能需要使用相同的配置,Apollo 提供了一种统一的管理方式,避免了分散配置的问题。
  2. 热更新: 配置更新后,客户端不需要重启即可获取最新配置,保证了系统的高可用性和动态调整能力。
  3. 支持跨环境与多集群: Apollo 提供了多环境和多集群的支持,适合大规模微服务应用。
  4. 良好的 Spring Cloud 集成: 与 Spring Cloud 兼容,支持 Spring Boot 和 Spring Cloud 项目,能够与其他服务发现组件(如 Eureka,Nacos)无缝集成。

如何在项目中使用 Apollo

1. 服务端部署

  • 步骤:
    1. 下载 Apollo 发布包
    2. 按照官方文档配置并启动 Apollo 配置中心服务(包括 Portal,Config Service,Admin Service)。
    3. 配置数据库和其他依赖服务(如 ZooKeeper,Redis)确保 Apollo 配置服务高可用。

2. Spring Cloud 项目集成 Apollo

  • 添加依赖: 在 Spring Boot 或 Spring Cloud 项目的 pom.xml 文件中添加 Apollo 依赖:

       <dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>2.2.0</version>
    </dependency>
  • 配置文件:application.ymlapplication.properties 中配置 Apollo 相关参数:

       apollo:
      bootstrap:
        enabled: true # 开启 Apollo 配置
        namespaces: application, custom-namespace # 使用的命名空间
      meta: http://apollo-server:8080 # 配置中心地址
  • 读取配置: 使用 @Value@ConfigurationProperties 注解读取配置:

       @Value("${your.config.key}")
    private String configValue;

3. 服务发现与配置结合

  • 服务发现: 如果在 Spring Cloud 中使用 Eureka 或 Nacos 作为服务发现工具,Apollo 只负责配置管理,不涉及服务发现。服务发现与配置管理分开管理。

  • Spring Cloud 配置更新: 通过 Spring Cloud Bus 和 Apollo 实现配置的自动刷新。

    • 在微服务架构中,使用 Spring Cloud Bus 实现配置变化时的广播通知。服务接收到配置变化后自动更新配置。

    • 在 Apollo 控制台中修改配置后,客户端自动感知变更,服务不需要重启。

Spring Cloud 与 Apollo 集成的完整配置步骤

  1. 配置 Apollo 客户端:

       apollo:
      meta: http://apollo-server:8080 # 配置中心地址
      bootstrap:
        enabled: true # 开启自动加载配置
        namespaces: application, service-namespace # 指定命名空间
  2. 读取配置:

       @Value("${app.name}")
    private String appName;
  3. 动态更新配置: 使用 Spring Cloud Bus 实现配置更新的动态刷新。

  4. 多环境支持: 在 Apollo 中创建不同的环境(如 dev,prod),并为每个环境配置不同的配置项。

总结

  • Apollo 作为配置中心,适用于需要集中化配置管理的微服务架构,提供强大的实时推送和热更新功能。
  • 它与 Spring Cloud 的集成非常简单,能够帮助开发者实现跨环境,多集群的配置管理和动态更新。
  • 对于大规模的微服务系统,Apollo 提供了高可用,强一致性的配置管理,是一种有效的解决方案。