zoukankan      html  css  js  c++  java
  • Apollo配置中心设计

    一、基础模型

    1. 用户在配置中心对配置进行修改并发布
    2. 配置中心通知Apollo客户端有配置更新
    3. Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用

    二、架构模块

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

     三、选择Eureka的原因

    1. 提供了完整的Service Registry和Service Discovery实现
    2. 和Spring Cloud无缝集成
      1)项目本身就使用了Spring Cloud和Spring Boot,同时Spring Cloud还有一套非常完善的开源代码来整合Eureka,所以使用起来非常方便
      2)Eureka还支持在我们应用自身的容器中启动,也就是说我们的应用启动完之后,既充当了Eureka的角色,同时也是服务的提供者。这样就极大的提高了服务的可用性
      3)为了提高配置中心的可用性和降低部署复杂度,我们需要尽可能地减少外部依赖
    3. 开源,由于代码是开源的,所以非常便于我们了解它的实现原理和排查问题。

    四、配置发布后的实时推送设计

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

     五、发送ReleaseMesssage的实现方式

    1. Admin Service在配置发布后,需要通知所有的Config Service有配置发布,从而Config Service可以通知对应的客户端来拉取最新的配置
    2. Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace
    3. Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录
    4. Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器
    5. NotificationControllerV2得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端

     六、ConfigService通知客户端的实现方式

    1. 客户端会发起一个Http请求到Config Service的notifications/v2接口,也就是NotificationControllerV2
    2. NotificationControllerV2不会立即返回结果,而是通过Spring DeferredResult把请求挂起
    3. 如果在60秒内没有该客户端关心的配置发布,那么会返回Http状态码304给客户端
    4. 如果有该客户端关心的配置发布,NotificationControllerV2会调用DeferredResult的setResult方法,传入有配置变化的namespace信息,同时该请求会立即返回。客户端从返回的结果中获取到配置变化的namespace后,会立即请求Config Service获取该namespace的最新配置

    七、客户端设计

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

    参考地址:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E8%AE%BE%E8%AE%A1

  • 相关阅读:
    CIFAR10-网络训练技术
    论文-Deep Residual Learning for Image Recognition
    Origin-作图相关
    OnCtlColor
    查看电脑MAC地址
    改变静态文本框和PictureControl的背景颜色
    MFC在对话框中的Picture contrl控件中添加icon图标,并改变icon图标的背景色与对话框背景色一致
    char型数组学习
    条件编译
    ASCII码
  • 原文地址:https://www.cnblogs.com/jayce9102/p/12290737.html
Copyright © 2011-2022 走看看