核心组件

ConfigService

  • 提供配置获取接口

  • 提供配置推送接口

  • 服务于Apollo客户端

AdminService

  • 提供配置管理接口

  • 提供配置修改发布接口

  • 服务于管理界面Portal

Client

  • 为应用获取配置,支持实时更新

  • 通过MetaServer获取ConfigService的服务列表

  • 使用客户端软负载SLB方式调用ConfigService

Portal

  • 配置管理界面

  • 通过MetaServer获取AdminService的服务列表

  • 使用客户端软负载SLB方式调用AdminService

Eureka

  • 用于服务发现和注册

  • Config/AdminService注册实例并定期报心跳

  • 和ConfigService住在一起部署

MetaServer

  • Portal通过域名访问MetaServer获取AdminService的地址列表

  • Client通过域名访问MetaServer获取ConfigService的地址列表

  • 相当于一个Eureka Proxy

  • 逻辑角色,和ConfigService住在一起部署

NginxLB

  • 和域名系统配合,协助Portal访问MetaServer获取AdminService地址列表

  • 和域名系统配合,协助Client访问MetaServer获取ConfigService地址列表

  • 和域名系统配合,协助用户访问Portal进行配置管理

技术架构

Apollo的技术架构是完全的微服务部署架构,但是和apollo的创始人沟通之后,发现其实apollo技术架构一直在不断的升级,下面就把Apollo的架构版本演变之路通过图形展示出来,这样可以更加容易理解Apollo的技术架构

1.0版本

  1. ConfigService是一个独立的微服务,服务于Client进行配置获取。

  2. Client和ConfigService保持长连接,通过一种推拉结合(push & pull)的模式,在实现配置实时更新的同时,保证配置更新不丢失。

  3. AdminService是一个独立的微服务,服务于Portal进行配置管理。Portal通过调用AdminService进行配置管理和发布。

  4. ConfigService和AdminService共享ConfigDB,ConfigDB中存放项目在某个环境中的配置信息。ConfigService/AdminService/ConfigDB三者在每个环境(DEV/FAT/UAT/PRO)中都要部署一份。

  5. Protal有一个独立的PortalDB,存放用户权限、项目和配置的元数据信息。Protal只需部署一份,它可以管理多套环境。

2.0版本

  1. Config/AdminService启动后都会注册到Eureka服务注册中心,并定期发送保活心跳。

  2. Eureka采用集群方式部署,使用分布式一致性协议保证每个实例的状态最终一致。

3.0版本

基于Eureka实现服务注册发现+客户端Ribbon配合实现软路由

4.0版本

引入了MetaServer这个角色,它其实是一个Eureka的Proxy,将Eureka的服务发现接口以更简单明确的HTTP接口的形式暴露出来,方便Client/Protal通过简单的HTTPClient就可以查询到Config/AdminService的地址列表

5.0版本

Apollo当前完整的技术架构

客户端推送更新架构

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

服务端机制

  • 服务端会保持住这个连接60秒

    • 如果在60秒内有客户端关心的配置变化,被保持住的客户端请求会立即返回,并告知客户端有配置变化的namespace信息,客户端会据此拉取对应namespace的最新配置
    • 如果在60秒内没有客户端关心的配置变化,那么会返回Http状态码304给客户端
  • 客户端在收到服务端请求后会立即重新发起连接,回到第一步

核心原理

服务端Spring DeferredResult来服务Http Long Polling请求

Apollo-原理以及架构图分析相关推荐

  1. 鸿蒙OS原子化服务卡片原理和架构分析

    引言 2021年6月2日晚间,华为在HarmonyOS 2系统及全场景新品发布会上正式推出了服务卡片,颠覆了人们对APP信息展示的认知,引起了行业内的极大关注,本文是对HarmonyOS服务卡片的原理 ...

  2. eureka架构图原理

    我们已经编写完了Consumer,并且在Consumer当中去调用了Provider,完成了服务与服务之间的一个通信,其实我们在做案例的时候,我们是一步一步的,大家回顾一下,是不是先去创建了一个Eur ...

  3. Android-FrameWork原理与架构分析

    Android-FrameWork原理与架构分析 Android架构主要分为分为四部分,从上往下依次为 APPLICATION(应用程序), APPLICATION FRAMEWORK(应用框架层), ...

  4. 阿里云3D架构图绘制工具寻找分析结果

    示例如下: 一.阿里云3D架构图绘制工具寻找分析结果 1. https://www.diagrams.net/   前身是draw.io,免费开源  可在线制作, 可存储在github等云仓库中 2. ...

  5. 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

    Nginx再次回顾 也许你已经忘记了Nginx是做什么的?我来再次给你夯实一下概念. 多协议反向代理 Nginx是个高性能的Web和反向代理服务器及HTTP服务器,它能反向代理HTTP,HTTPS和邮 ...

  6. DayDayUp:计算机技术与软件专业技术资格证书之《系统集成项目管理工程师》课程讲解之项目管理知识最全架构图、计算题四大题型、案例分析常考题型分析与经验技巧总结

    DayDayUp:计算机技术与软件专业技术资格证书之<系统集成项目管理工程师>课程讲解之项目管理知识最全架构图.计算题四大题型.案例分析常考题型分析与经验技巧总结 目录 一.项目管理知识架 ...

  7. 系统架构图怎么画_基于ROS的移动机器人上层系统架构分析

    看过网上不少博客,介绍ROS系统架构的,基本上都是在介绍ROS自身系统架构,很少有介绍特定机器人的系统架构的.个人觉得,入门一个系统,首先需要从整体开始把握,而不必在意细节,整体把握好了,细节自然水到 ...

  8. Android10.0 Binder通信原理(五)-Binder驱动分析

    摘要:本节主要来讲解Android10.0 Binder的驱动层分析 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计 ...

  9. npu算力如何计算_CPU、GPU、NPU、FPGA等芯片架构特点分析

    来源 | 汽车电子与软件 知圈 | 进"高精度地图社群",请加微信15221054164,备注地图 概述 随着人工智能的热潮和AI算法的广泛应用,深度学习已成为当前AI研究的重点, ...

  10. 如何画一张架构图(内含知识图谱)

    简介:架构图是什么?为什么要画架构图?如何画好架构图?有哪些方法?本文从架构的定义说起,分享了阿里文娱高级技术专家箫逸关于画架构图多年的经验总结,并对抽象这一概念进行了深入地讨论.内容较长,同学们可收 ...

最新文章

  1. 文档相似度之词条相似度word2vec、及基于词袋模型计算sklearn实现和gensim
  2. OKR管理和绩效考核有什么不一样呢?
  3. 怎么用css控制border成为三角形
  4. 几条跟堆栈扯上关系的汇编指令
  5. 复杂结构体的存取器 [C宏——智者的利刃,愚者的恶梦]
  6. 十大非著名之父:手机,黑莓,iPod,FORTRAN,远程办公,鼠标,垃圾邮件,DSL,Java,WIFI说,我爸是...-asp.net关注...
  7. springboot 实现接口灰度发布
  8. python编程(fabric部署)
  9. mysql 执行计划 改变_数据量增加导致mysql执行计划改变解决_MySQL
  10. 经典面试题之赋值操作
  11. Spring Security 原理
  12. ADSAD合辑(一)
  13. 解决iPhone发送短信显示红色感叹号:尚未送达
  14. 计算机无法打开pdf文件夹,计算机打开PDF文档时发生错误. 如何修复损坏的文件...
  15. app版本更新提醒方案
  16. 【Oracle】快速向表中插入大量数据Oracle中append与Nologging
  17. 【论文学习】干旱指标相关
  18. 用户AppList 特征提取
  19. Python 爬虫实战1.0
  20. android 应用商店

热门文章

  1. 如何学好游戏编程 一
  2. 安装mathtype打开word报错 mathtype.Dll cannot be found 解决方式
  3. 《JavaScript 学习指南》
  4. cplex java_线性最优解java实现+Cplex java调用
  5. Java后台开发精选知识图谱
  6. 配置文件解析利器-Config库
  7. 今天第72个儿童节,程序猿“童”样精彩~
  8. 浅谈游戏《Hollow Knight空洞骑士》
  9. iconfont-阿里巴巴矢量图标库的使用
  10. 中国范围的经纬度及部分城市经纬度