当前位置: 首页 > news >正文

Apollo配置发布原理

在配置中心中,一个重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的。
在这里插入图片描述

上图简要描述了配置发布的主要过程:

  1. 用户在Portal操作配置发布
  2. Portal调用Admin Service的接口操作发布
  3. Admin Service发布配置后,发送ReleaseMessage给各个Config Service
  4. Config Service收到ReleaseMessage后,通知对应的客户端。

1.1 发送ReleaseMessage

Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置。
从概念上来看,这是一个典型的消息使用场景,Admin Service作为producer(生产者)发出消息,各个Config Service作为consumer(消费者)消费消息。通过一个消息队列组件(Message Queue)就能很好的实现Admin Service和Config Service的解耦。
在实现上,考虑到Apollo的实际使用场景,以及为了尽可能减少外部依赖,我们没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列。
具体实现方式如下:

  1. Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的
    AppId+Cluster+Namespace
SELECT * FROM ApolloConfigDB.ReleaseMessage

在这里插入图片描述

消息发送类:DatabaseMessageSende
在这里插入图片描述

  1. Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录
    消息扫描类:ReleaseMessageScanner
    在这里插入图片描述

  2. Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器

然后调用消息监听类的handleMessage方法:NotificationControllerV2
在这里插入图片描述

  1. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端
    在这里插入图片描述

1.2 Config Service通知客户端

上一节中简要描述了NotificationControllerV2是如何得知有配置发布的,那NotificationControllerV2在得知有配置发布后是如何通知到客户端的呢?
实现方式如下:

  1. 客户端会发起一个Http请求到Config Service的 notifications/v2 接口NotificationControllerV2
    在这里插入图片描述

客户端发送请求类:RemoteConfigLongPollService
在这里插入图片描述

  1. NotificationControllerV2不会立即返回结果,而是把请求挂起。考虑到会有数万客户端向服务端发起长连,因此在服务端使用了async servlet(Spring DeferredResult)来服务Http Long Polling请求。
  2. 如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端。
  3. 如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置。

1.3 客户端读取设计

除了之前介绍的客户端和服务端保持一个长连接,从而能第一时间获得配置更新的推送外,客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
1.这是一个备用机制,为了防止推送机制失效导致配置不更新。
2.客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - NotModified
3.定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property:apollo.refreshInterval 来覆盖,单位为分钟。

http://www.dtcms.com/a/550814.html

相关文章:

  • DDC可编程控制器风机水泵空调节能控制器哪家生产厂家
  • 网站开发浏览器兼容无锡市建设工程质量监督站网站
  • 一个企业网站ppt怎么做国内搜索网站
  • java面试-0315-父子线程怎么共享数据?原理?
  • 河北省建设厅办事大厅网站网站制作哪个好一些
  • apache添加多个网站做国外网站推广
  • 空间站免费版下载wordpress 遍历文章
  • 什么叫网站收录提交如何制作学校网站
  • 心理咨询网站做loge的网站
  • 建网站费用明细电脑上如何删除wordpress
  • 柳州建设公司网站2018年做网站赚钱吗
  • 懂得做网站还可以做什么兼职百度网址浏览大全
  • 网站推广的策略方法天津市建设工程交易网
  • 小学网站建设实施方案花蝴蝶免费视频直播高清版
  • 建网站行业企业网站推广方式和策略
  • 小杰-自然语言处理(eleven)——transformer系列——Attention中的mask
  • 关于智能指针的一些理解
  • 微信公众账号申请注册新浪博客seo
  • 网站注销主体填写原因it外包运维服务
  • Masstransit(一)
  • 马鞍山网站制作重庆建一个网站
  • 在线教育网站制作网页设计与网站建设区别
  • 图文消息点击进去是自己的网站核心关键词和长尾关键词举例
  • 网站搜索优化官网做网站报价表
  • java应该如何学习 分四个阶段由浅入深
  • 麻油厂网站怎么做怎么做网站淘宝转换工具
  • 【C语言实战(64)】51单片机串口通信:开启嵌入式开发的通信大门
  • Android开发工作经历整理
  • 网站开发公司专业网站建设布为网
  • 福州高端网站建设公司免费网站素材下载