目录

一、apollo简介

二、apollo架构组成

三、apollo的通信

1、portal与admin的通信

2、admin与config的通信

3、config与client通信

四、灰度发布

五、使用中遇到的问题


一、apollo简介

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

apollo支持4个维度管理:1、application(应用);2、environment (环境);3、cluster (集群);4、namespace (命名空间)

(以上简介来源于apollo的wiki官方文档)

二、apollo架构组成

1、admin模块:

该模块负责对真正配置内容在数据库中的增删改查等操作,基于数据库ApolloConfigDB;

2、config模块:

该模块用于和调用客户端进行通信,用于接收admin配置的修改,推送客户端配置发生变更,客户端拉取最新配置内容,基于数据库ApolloConfigDB;

3、portal模块

该模块相当于是配置系统的前端UI界面,并且进行相关的权限管理,在portal模块进行配置内容的增删查改前端操作,最终调用admin模块保存到数据库中,基于数据库ApolloConfigDB;

4、client模块

该模块集成在需要调用apollo配置中心的相关服务中,用于通过config模块获取配置内容。

(该图来源于apollo官方wiki文档)

上图为apollo的整体架构图,apollo是采用springboot进行的开发,admin模块和config模块注册在eureka中。

client模块在获取配置信息的时候,先通过负载均衡访问meta server,然后通过eureka找到可用的config server来获取相关配置。这里有一个比较有意思的细节,为什么要有一层meta server,而不是直接访问config server?如果没有meta server这一层服务,那么该配置中心只能应用于java服务,添加上meta server这一层服务以后,就有了更好的扩展性,可以兼容更多语言,由meta server去进行兼容处理。

portal模块本身进行apollo项目的一个权限管理,有一个自己的独立数据库,然后当对具体的配置进行操作的时候,需要通过负载均衡,调用meta server服务,然后通过eureka找到可用的admin server,进行配置内容的管理。

config server,erueka,meta server在同一个jvm中。

(这里还有一个小细节就是,之所以采用eureka作为注册与发现中心,原因为:1、apollo本身就是使用spring boot进行的开发,具备天然的适配性;2、减少对其它中间件的依赖,让系统更加的简单)

三、apollo的通信

1、portal与admin的通信

这个通信就很简单,只是一个简单的服务调用,在portal模块进行配置的增删查改的时候,通过主动的api调用即可完成;

2、admin与config的通信

config是用来通知客户端配置发生变更,然后客户端拉取配置的模块,那么config是如何知道配置发生变更的呢?其实是利用mysql实现了一个简单的消息队列来实现的。当配置发生变更以后,admin模块会主动往数据库中的ReleaseMessage表中插入一条数据,该数据就是消息内容AppId+Cluster+Namespace,admin相当于的消息生产者;每个config模块会单开一个线程每秒一次的扫描ReleaseMessage表,如果发现有数据新增,就证明有配置变更,此时config就知道了有配置发生变更,然后根据AppId+Cluster+Namespace告知对应的客户端,config就相当于是消费者。

(在此通信中之所以没有采用一个真的消息中间件,而是采用mysql模拟的方式,也是为了降低系统的复杂性)

3、config与client通信

接下来就是最重要的client如何获取到配置内容,包含两种种情况:

1)client与config保持一个http的长链接,如果60s内没有响应,则返回状态码304,然后重新建立长链接,如果在长链接期间,config监听到了配置信息变更,则将有变化的namespace信息返回给client端,然后client端会主动调用config模块获取最新配置信息,通过上述方式实现了热更新;

2)为了防止config的推送失效,client端也会每五分钟主动访问一次config,获取最新的配置信息。

client端获取到配置信息以后,会将该信息放入内存中,并且会同时在本地缓存一份配置信息,防止apollo服务不可用的时候,读取不到配置信息。windows系统会缓存在c盘下的opt/data/namespace/configcache下;linux系统会缓存在/opt/目录下。

四、灰度发布

apollo的灰度发布指的是发布的配置信息对一部分服务器生效,对一部分服务器不生效,他是通过ip地址来进行的限制。

五、使用中遇到的问题

1、namespace不要使用0XXX这种方式进行命名,因为在yml配置文件中,对于数字会自动去0;

2、在搭建部署的时候,注意启动顺序,首先启动client端,因为eureka与client端是在同一个服务中,在刚开始启动的时候会报错,原因可能是eureka还没启动起来,config服务无法注册,等eureka服务启动成功以后,就好了;然后启动admin,最后启动portal。

apollo原理简介相关推荐

  1. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

  2. Nginx 反向代理工作原理简介与配置详解

    Nginx 反向代理工作原理简介与配置详解 测试环境 CentOS 6.8-x86_64 nginx-1.10.0 下载地址:http://nginx.org/en/download.html 安装 ...

  3. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  4. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  5. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  6. 【Android 异步操作】Handler ( 主线程中的 Handler 与 Looper | Handler 原理简介 )

    文章目录 一.主线程中的 Handler 与 Looper 二.Handler 原理简介 一.主线程中的 Handler 与 Looper Android 系统中 , 点击图标启动一个应用进程 , 就 ...

  7. 量子计算机编程原理简介 和 机器学习

    量子计算机编程原理简介 和 机器学习 本文翻译自D-Wave公司网站 www.dwavesys.com/en/dev-tutorial-intro.html D-wave公司在2007年就声称实现了1 ...

  8. DL之CNN:卷积神经网络算法简介之原理简介——CNN网络的3D可视化(LeNet-5为例可视化)

    DL之CNN:卷积神经网络算法简介之原理简介--CNN网络的3D可视化(LeNet-5为例可视化) CNN网络的3D可视化 3D可视化地址:http://scs.ryerson.ca/~aharley ...

  9. DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图)、七大层级结构(动态图详解卷积/池化+方块法理解卷积运算)、CNN各层作用及其可视化等之详细攻略

    DL之CNN:卷积神经网络算法简介之原理简介(步幅/填充/特征图).七大层级结构(动态图详解卷积/池化+方块法理解卷积运算).CNN各层作用及其可视化等之详细攻略 目录 CNN 的层级结构及相关概念 ...

最新文章

  1. 《Python 学习手册4th》 第四章 介绍Python对象类型
  2. java sendmessage_SendMessage()复制/剪切/粘贴WM_COPYDATA 0x004A
  3. 三十六、 SQL基本语法
  4. mysql 5.6 没死_MySQL 5.6不删空用户的影响
  5. 2016.09.03【初中部 NOIP提高组 】模拟赛A总结
  6. 铝板展开插件_铝板行业排料Rhino插件
  7. K3 Cloud 数据库查询表常用语句
  8. PMP课程笔记:第9章 项目资源管理
  9. 一文了解地理数据和三维地理信息系统
  10. matlab解超越函数,矩阵的超越函数Matlab提供的矩阵函数.PPT
  11. U盘存储设备有回收站吗及如何快速恢复u盘数据
  12. postman接口测试工具的使用攻略
  13. Axure RP 9格式刷使用说明【教程三】
  14. 影响世界的100条管理名言
  15. python爬虫网页图片显示不出来_网页爬虫 - python下载的图片不显示,无法查看
  16. python interpreter下载_Pyonic Python 2 interpreter
  17. 【STM32F429开发板用户手册】第46章 STM32F429的DMA2D应用之刷色块,位图和Alpha混合
  18. 基于PaddleX的化妆品识别
  19. sql loader导出数据和导入数据(sqlldr)
  20. Java - parseObject

热门文章

  1. 即刻掌握python格式化输出的三种方式 (o゜▽゜)o☆
  2. 第2章金融市场与金融机构课堂测验题
  3. npm run dev 运行报错code ELIFECYCLE
  4. Kafka单机环境搭建及整合SpringBoot完成基本使用
  5. MySQL 配置数据库远程访问权限
  6. Vue3 中使用组合式API替换mixins,实现代码复用并解决隐患
  7. 懒加载vue jQuery
  8. Laravel填充数据Seeder出现Target class [xxx] does not exist
  9. c语言中左移、右移要注意的细节
  10. Android 电源管理————gotosleep和userActivity关注