您现在的位置是:首页 > 编程 > 

告别Eureka!acos也落伍了!这款配置中心才是新宠!

2025-07-21 12:26:15
告别Eureka!acos也落伍了!这款配置中心才是新宠! 前言 在我们微服务种,配置中心的选择有多种多样。小二哥之前使用Eureka、acos、Zookeeper这几种方案。这周的新项目张,团队选择了另一款携程开源的分布式配置中心Apollo,今天就跟大家详细介绍一下这款神级配置中心。Apollo简介 1. 基本概念由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实

告别Eureka!acos也落伍了!这款配置中心才是新宠!

前言

在我们微服务种,配置中心的选择有多种多样。小二哥之前使用Eureka、acos、Zookeeper这几种方案。

这周的新项目张,团队选择了另一款携程开源的分布式配置中心Apollo,今天就跟大家详细介绍一下这款神级配置中心。

Apollo简介

1. 基本概念

由于 Apollo 概念比较多,刚开始使用比较复杂,最好先过一遍概念再动手实践尝试使用。面试上,这些知识跑不了~

1.1、背景

随着程序功能的日益复杂,程序的配置日益增多,各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高,配置修改后实时生效,灰度发布,分环境、分集管理配置,完善的权限、审核机制…… 在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。因此 Apollo 配置中心应运而生!

1.2、简介

Apollo()是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

1.、特点
  • 部署简单
  • 灰度发布
  • 版本发布管理
  • 提供开放平台API
  • 客户端配置信息监控
  • 提供Java和.et原生客户端
  • 配置修改实时生效(热发布)
  • 权限管理、发布审核、操作审计
  • 统一管理不同环境、不同集的配置
1.4、基础模型

如下即是 Apollo 的基础模型:

  • (1)、用户在配置中心对配置进行修改并发布
  • (2)、配置中心通知Apollo客户端有配置更新
  • ()、Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
1.5、Apollo 的四个维度

Apollo支持4个维度管理Key-Value格式的配置:

  • application (应用)
  • environment (环境)
  • cluster (集)
  • namespace (命名空间)

(1)、application

  • Apollo 客户端在运行时需要知道当前应用是谁,从而可以根据不同的应用来获取对应应用的配置。
  • 每个应用都需要有唯一的身份标识,可以在代码中配置 app.id 参数来标识当前应用,Apollo 会根据此指来辨别当前应用。

(2)、environment

在实际开发中,我们的应用经常要部署在不同的环境中,一般情况下分为开发、测试、生产等等不同环境,不同环境中的配置也是不同的,在 Apollo 中默认提供了四种环境:

  • FAT(Feature Acceptance Test):功能测试环境
  • UAT(User Acceptance Test):集成测试环境
  • DEV(Develop):开发环境
  • PRO(Produce):生产环境

在程序中如果想指定使用哪个环境,可以配置变量 env 的值为对应环境名称即可。

()、cluster

  • 一个应用下不同实例的分组,比如典型的可以按照数据中心分,把上海机房的应用实例分为一个集,把北京机房的应用实例分为另一个集。
  • 对不同的集,同一个配置可以有不一样的值,比如说上面所指的两个北京、上海两个机房设置两个集,两个集中都有 mysql 配置参数,其中参数中配置的地址是不一样的。

(4)、namespace

一个应用中不同配置的分组,可以简单地把 namespace 类比为不同的配置文件,不同类型的配置存放在不同的文件中,如数据库配置文件,RPC 配置文件,应用自身的配置文件等。熟悉 SpringBoot 的都知道,SpringBoot 项目都有一个默认配置文件 application.yml,如果还想用多个配置,可以创建多个配置文件来存放不同的配置信息,通过指定 spring.profiles.active 参数指定应用不同的配置文件。这里的 namespace 概念与其类似,将不同的配置放到不同的配置 namespace 中。amespace 分为两种权限,分别为:

  • public(公共的): public权限的 amespace,能被任何应用获取。
  • private(私有的): 只能被所属的应用获取到。一个应用尝试获取其它应用 private 的 amespace,Apollo 会报 "404" 异常。

amespace 分为三种类型,分别为:

  • 私有类型: 私有类型的 amespace 具有 private 权限。例如 application amespace 为私有类型。
  • 公共类型: 公共类型的 amespace 具有 public 权限。公共类型的 amespace 相当于游离于应用之外的配置,且通过 amespace 的名称去标识公共 amespace,所以公共的 amespace 的名称必须全局唯一。
  • 关联类型(继承类型): 关联类型又可称为继承类型,关联类型具有 private 权限。关联类型的 amespace 继承于公共类型的 amespace,将里面的配置全部继承,并且可以用于覆盖公共 amespace 的某些配置。
1.6、本地缓存

Apollo客户端会把从服务端获取到的配置在本地文件系统缓存一份,用于在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置,不影响应用正常运行。

本地缓存路径默认位于以下路径,所以请确保/opt/data或C:\opt\data\目录存在,且应用有读写权限。

  • Mac/Linux: /opt/data/{appId}/config-cache
  • Windows: C:\opt\data{appId}\config-cache

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

代码语言:javascript代码运行次数:0运行复制
{appId}+{cluster}+{namespace}.properties
1.7、客户端设计

上图简要描述了Apollo客户端的实现原理

  • 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
  • 客户端还会定时从 Apollo 配置中心服务端拉取应用的最新配置。
  • 这是一个 fallback 机制,为了防止推送机制失效导致配置不更新
  • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回 04 - ot Modified
  • 定时频率默认为每 5 分钟拉取一次,客户端也可以通过在运行时指定 apollo.refreshInterval 来覆盖,单位为分钟。
  • 客户端从 Apollo 配置中心服务端获取到应用的最新配置后,会保存在内存中。
  • 客户端会把从服务端获取到的配置在本地文件系统缓存一份 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置。
  • 应用程序从 Apollo 客户端获取最新的配置、订阅配置更新通知。

配置更新推送实现

前面提到了 Apollo 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。长连接实际上我们是通过 Http Long Polling 实现的,具体而言:

  • 客户端发起一个 Http 请求到服务端
  • 服务端会保持住这个连接 60 秒
  • 如果在 60 秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的 namespace 信息,客户端会据此拉取对应 namespace 的最新配置
  • 如果在 60 秒内没有客户端关心的配置变化,那么会返回 Http 状态码 04 给客户端
  • 客户端在收到服务端请求后会立即重新发起连接,回到第一步
  • 考虑到会有数万客户端向服务端发起长连,在服务端我们使用了 async servlet(Spring DeferredResult) 来服务 Http Long Polling 请求。
1.8、总体设计

上图简要描述了Apollo的总体设计,我们可以从下往上看:

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

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

场景

影响

降级

原因

某台 config service 下线

无影响

Config service无状态,客户端重连其它config service

所有 config service 下线

客户端无法读取最新配置,Portal无影响

客户端重启时,可以读取本地缓存配置文件

某台 admin service 下线

无影响

Admin service无状态,Portal重连其它 admin service

所有 admin service 下线

客户端无影响,portal无法更新配置

某台 portal 下线

无影响

Portal域名通过slb绑定多台服务器,重试后指向可用的服务器

全部 portal 下线

客户端无影响,portal无法更新配置

某个数据中心下线

无影响

多数据中心部署,数据完全同步,Meta Server/Portal 域名通过 slb 自动切换到其它存活的数据中心

好了,关于Apollo的基础介绍就到此告一段落了!

需要掌握 Apollo 配置中心搭建、配置、测试等实战步骤的,请查看次条图文攻略!带你从0到1轻松上手!

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2024-10-20,如有侵权请联系 cloudcommunity@tencent 删除客户端配置nacos服务服务端

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1171113.html

相关标签:无
上传时间: 2025-07-21 08:31:11
留言与评论(共有 19 条评论)
本站网友 克银丸
23分钟前 发表
private(私有的): 只能被所属的应用获取到
本站网友 dajia
22分钟前 发表
同一个配置可以有不一样的值
本站网友 滑膜炎偏方
7分钟前 发表
不影响应用正常运行
本站网友 不完美的她
22分钟前 发表
能够集中化管理应用不同环境
本站网友 十拿九稳
3分钟前 发表
而后直接通过 IP+Port 访问服务
本站网友 金海心图片
1分钟前 发表
请查看次条图文攻略!带你从0到1轻松上手!本文参与 腾讯云自媒体同步曝光计划
本站网友 万科拿地
25分钟前 发表
面试上
本站网友 不出所料
2分钟前 发表
Apollo客户端从配置中心拉取最新的配置
本站网友 二手房西安
8分钟前 发表
所以请确保/opt/data或C
本站网友 ipo上市流程
6分钟前 发表
能被任何应用获取
本站网友 陆皓东故居
5分钟前 发表
(2)
本站网友 荨麻疹偏方
7分钟前 发表
可用性要求非常高
本站网友 广东本田
15分钟前 发表
依然能从本地恢复配置
本站网友 如何瘦臀
30分钟前 发表
如数据库配置文件
本站网友 二手别墅出售
28分钟前 发表
传统的通过配置文件
本站网友 三剑客惊天动地
30分钟前 发表
这些知识跑不了~1.1
本站网友 新产品上市
29分钟前 发表
可以配置变量 env 的值为对应环境名称即可
本站网友 12306购票时间
21分钟前 发表
关联类型具有 private 权限