• Apollo之架构


    角色

    1. ConfigService:独立的无状态的微服务,用于Apollo Client进行配置获取。Apollo ClientConfigService保持长连接,通过推拉结合(push和pull)的方式,在实现配置实时更新的同事,保证配置更新不丢失。

      • 提供配置获取接口
      • 提供配置推送接口
      • 服务于Apollo客户端
    2. AdminService:独立的无状态的微服务,用于Portal做配置管理,Portal通过调用AdminService进行配置管理和发布。ConfigServiceAdminService共享ConfigDB,每个环境都需要单独部署一套ConfigServiceAdminService和对应的ConfigDB

      • 提供配置管理接口
      • 提供配置修改发布接口
      • 服务于管理界面Portal
    3. Portal:用于存放用户权限、项目和配置的元数据信息。Portal只需要部署一份,可以管理多套环境,有一个独立的PortalDB数据库

      • 配置管理界面,主要用于人使用
      • 通过MetaServer获取AdminService的服务列表
      • 使用客户端软负载SLB方式调用AdminService
    4. Apollo Client

      • 为应用获取配置,支持实时更新
      • 通过MetaServer获取ConfigService的服务列表
      • 使用客户端软负载SLB方式调用ConfigService

    隐藏角色

    1. Eureka

      • 用于服务发现和注册
      • ConfigService和AdminService注册实例
      • 和ConfigService在一起部署
    2. MetaServer

      • 主要用于跨语言客户端,封装Eureka接口,提供HTTP接口获取地址列表,相当于一个Eureka Proxy
        • Portal通过域名访问MetaServer获取AdminService的地址列表
      • Client通过域名访问MetaServer获取ConfigService的地址列表
      • 和ConfigService在一起部署
    3. Nginx

      • 协助Portal访问MetaServer获取AdminService地址列表
        • 协助Client访问MetaServer获取ConfigService地址列表
      • 协助用户访问Portal进行配置管理

    架构

    1. 在不考虑服务发现的情况下,Apollo的架构可以简化为
      在这里插入图片描述

    2. 在实际生产环境,因为AdminServiceConfigService都是无状态的微服务,并且是集群部署的。这样就存在一个疑问,Portal如何找到AdminSerivce?Client如何找到ConfigService? 为了解决服务发现问题,Apollo使用了Eureka组件(集群部署),AdminServiceConfigService启动后都会注册到Eureka集群中,PortalClient可以从注册中心发现相应的服务地址
      在这里插入图片描述

    3. 因为Apollo要考虑多语言接入问题。但是Eureka(包括Ribbon软负载)原生仅支持Java客户端,如果要为多语言开发Eureka/Ribbon客户端,这个工作量很大,所以需要找到一种跨语言的解决方案。Apollo引入了一个新的角色Meta Server(相当于是Eureka Proxy),将Eureka的服务发现接口进行封装,以新的HTTP接口方式暴露给外部。这样不同语言的Client就可以通过HTTP接口直接查询到AdminService和ConfigService的地址了。Meta Server也是一个无状态的微服务,一般不会直接访问Meta Server,而是在前面加一层负载均衡(比如Nginx)。Portal一般也是通过负载均衡访问(单机部署也没问题,毕竟宕机只影响后台操作)
      在这里插入图片描述

    4. 为了简化部署,实际打包是将ConfigService、Eureka、Meta Server打成一个包,部署在一个JVM内

    在这里插入图片描述

  • 相关阅读:
    【深度梯度投影网络:遥感图像】
    深度学习入门之自动求导(Pytorch)
    MySQL常用操作
    利用Jmeter做接口测试(功能测试)全流程分析
    Qt设置右键菜单无效customContextMenuRequested(const QPoint &pos)
    Sparksql补齐连续工单状态
    临床评分SOFA、SIRS、qSOFA、LODS、OASIS、SAPS、SAPS II
    深度学习实战01-卷积神经网络(CNN)实现Mnist手写体识别
    记一次使用NetworkManager管理Ubuntu网络无效问题分析
    2022-08-20 mysql范围查询技术专利交底书
  • 原文地址:https://blog.csdn.net/usagoole/article/details/126163401