新一代开源配置中心携程Apollo详解

in 推介 with 0 comment  访问: 234 次


出于针对线上基于配置文件做配置管理太过于老派和不便于现在自动化管理和微服务化管理,运维部门需要根据不同产品统一使用配置管理中心软件,来达到统一配置中心化的目的,来加速自动化的进程,现基于开源产品调研了携程的Apollo分析如下。

总体感觉 Apollo 不是一个成熟的开源(单指没有开源经验,Server 端配置文件、Server 端部署、文档完善度有待改善),但社区活跃,可用性、稳定性不用担心。

源码地址: https://github.com/ctripcorp/apollo

基本概念

模块

  1. Config Service
    • 提供配置获取接口
    • 提供配置更新推送接口
  2. Admin Service
    • 提供配置管理接口
    • 提供配置修改、发布等接口
  3. Meta Server
    • Meta Server 只是一个逻辑角色,可以理解为 Meta Server = Eureka
  4. Eureka
    • Eureka 实现服务发现
    • Config Service 和 Admin Service 会向 Eureka 注册服务,并保持心跳
    • Eureka 和 Config Service 在一个 JVM
  5. Portal
    • 提供 Web 界面供用户管理配置
    • 通过 Meta Server(Eureka)获取 Admin Service 列表
    • 在 Portal 侧做负载均衡、错误重试
  6. Client
    • 集成在应用中
    • 配置获取
    • 内存缓存
    • 文件缓存

模块 官方详细介绍

Namespace

  1. Namespace 是配置项的集合,可以理解为一个配置文件。
  2. application Namespace 是每个应用的默认 Namespace
  3. Namespace 分 public、private 两种权限,private 仅当前应用可读,public 无限制
  4. Namespace 类型分三种:私有类型、公共类型、关联类型(继承类型)

Namespace 官方详细介绍

Apollo 架构

15305437543979.jpg

配置

  1. config/app.properties 不需要修改
  2. config/application-github.properties 中设置数据库连接
  3. scripts/startup.sh 中设置 日志、环境、端口、JVM 内存
  4. 日志路径需要设置 *.confscripts/startup.sh 两个文件,并保持一致
  5. config/apollo-env.properties 中指定各环境 apollo-configservice,仅 apollo-portal 需要配置
  6. apollo-configservice 和 apollo-adminservice 连接 Eureka 需要在 ApolloConfigDB 库的 serverconfig 表设置 eureka.service.url 指定 apollo-configservice
  7. 管理员指定需要修改 ApolloPortalDB 库中的 ServerConfig 表
  8. 部门增删改需要修改 ApolloPortalDB 库中的 ServerConfig 表

问题

  1. 启动后需要一分钟左右才能工作
  2. 无用户管理
  3. 无部门管理
  4. 无产品概念
  5. 相互通讯无严格认证机制(官方建议加密存储,客户端解密,对 API 调用不友好)
  6. apollo-configservice 和 apollo-adminservice 的环境需要设置 -Denv=BETA 启动参数
  7. 日志路径需要设置 *.confscripts/startup.sh
  8. Eureka > apollo-configservice 和 apollo-adminservice 连接 Eureka 需要在 apolloconfigdb 库的 serverconfig 表设置 eureka.service.url 指定一个 apollo-configservice

无关紧要

  1. apollo-env.properties 从 apollo-core 中获得
  2. 只有 apollo-portal 需要 apollo-env.properties
  3. application-github.properties 从 apollo-common 中获得
  4. apollo-configservice 与 apollo-portal 中的 application-github.properties 不一样
  5. 所有 properties 格式配置放到 config 载入
  6. apollo-configservice 端口有 Eureka 状态页
  7. *-sources.jar 文件是源码,运行并不需要
  8. jar 包中嵌入了 shell 脚本,最终启动是运行 jar 包,head -242 apollo-portal.jar 完整脚本

高可用

  1. apollo-portal 和 apollo-configservice 通过 Nginx 或其它方式负载均衡
  2. apollo-adminservice 会注册在 Eureka 中,通过 apollo-configservice 获取节点信息。所以 apollo-adminservice 直接运行多个实例即可。

生产架构

15305439586748.jpg

WeZan
Responses