相较嫡系的SpringCloudConfig,为什么选择使用Apollo作为微服务的配置中心?

目录

1、SpringCloudConfig和Apollo的对比

2、apollo的介绍

3、apollo架构设计原理

4、客户端通过apollo拉取配置的原理


1、SpringCloudConfig和Apollo的对比

SpringCloudConfig VS Apollo.jpg

如上图对比

  • SpringCloudConfig优势是对SpringBoot原生支持,且是SpringCloud组件。缺点是无界面管理,且需要git,SpringCloudBus、Mq支持其动态更新。
  • Apollo优势是技术栈单一,仅需要Mysql就可以支持动态更新配置,便于维护。缺点是不是SpringCloud体系,虽然开源,版本更新也活跃,但是对SpringCloud的支持没有SpringCloudConfig的好。

2、apollo的介绍

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

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

  • application (应用)
  • environment (环境)
  • cluster (集群)
  • namespace (命名空间)
    同时,Apollo基于开源模式开发,开源地址

3、apollo架构设计原理

overall-architecture.jpg

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

4、客户端通过apollo拉取配置的原理

client-architecture.jpg

上图简要描述了Apollo客户端的实现原理:
  1. 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
  2. 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
    • 这是一个fallback机制,为了防止推送机制失效导致配置不更新
    • 客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
    • 定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property: apollo.refreshInterval来覆盖,单位为分钟。
  3. 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
  4. 客户端会把从服务端获取到的配置在本地文件系统缓存一份
  5. 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置
  6. 应用程序从Apollo客户端获取最新的配置、订阅配置更新通知
配置更新推送实现
  1. 前面提到了Apollo客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
  2. 长连接实际上我们是通过Http Long Polling实现的,具体而言:
  • 客户端发起一个Http请求到服务端
  • 服务端会保持住这个连接60秒
    • 如果在60秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的namespace信息,客户端会据此拉取对应namespace的最新配置
    • 如果在60秒内没有客户端关心的配置变化,那么会返回Http状态码304给客户端
  • 客户端在收到服务端请求后会立即重新发起连接,回到第一步
  1. 考虑到会有数万客户端向服务端发起长连,在服务端我们使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java使用Apollo是为了实现微服务配置文件的统一管理。Apollo是一个开源的配置中心,它提供了一种方便的方式来管理和配置微服务的各种环境变量、数据库连接等配置信息。 首先,Java使用Apollo可以实现配置文件的集中化存储和统一管理。传统的方式是将配置文件分散存储在各个微服务的代码中,当需要修改配置时,需要找到对应的配置文件进行修改,然后重新打包发布。而使用Apollo,可以将配置文件集中存储在Apollo服务器中,默认支持版本控制,方便团队成员协同修改配置。 其次,Java使用Apollo可以实现配置文件的动态更新。传统的方式是修改配置文件后,需要重新部署整个微服务才能生效。而Apollo提供了实时推送配置变更的功能,只需要在Apollo服务器上修改配置,就可以自动通知到各个微服务,实现配置的实时更新,无需重启服务。 另外,Java使用Apollo还可以实现配置的灰度发布和回滚。通过在Apollo服务器上管理配置的版本,可以方便地进行配置的灰度发布和回滚操作。比如,可以先将新的配置发布到部分微服务中进行测试,再逐步扩大范围进行全量发布,如果出现问题,可以快速回滚到之前的配置版本,确保服务的稳定性。 总之,Java使用Apollo可以简化微服务的配置管理,提高配置的可维护性和可管理性,同时也提供了配置的动态更新和灰度发布等功能,让配置的变更更加灵活和快速。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值