Apollo

Apollo #

基本概念 #

架构原理 #

apollo

Config Server一般配置为集群,客户端通过 Eureka 的服务发现机制连接该集群。为了解决其它语言没有Eureka的问题,Apollo引入了 Meta Server,通过引入代理层来实现服务发现。

当用户在页面上修改配置后,Portal页面会调用Admin Server,Admin Server会往DB中插入一条消息记录,Config Server会定时扫描该表,有新记录通知客户端。服务端和客户端之间使用长轮询维持连接。技术栈中之所以没有引入消息队列是为了保持架构简单,减少复杂性。

动态配置原理 #

基于http长轮询请求和Spring扩展机制实现。在Spring容器启动过程中,Apollo通过自定义的BeanPostProcessor和BeanFactoryPostProcessor将参数中包含${...}占位符和@Value注解的Bean注册到Apollo框架中定义的注册表中。然后通过http长轮询不断的去获取服务端的配置信息,一旦配置发生变化,Apollo会根据变化的配置key找到对应的Bean,然修改Bean的属性,从而实现了配置动态生效的特性。

基本组成 #

  • application:应用。唯一性基于appid。
  • environment:环境。可选值:dev/fat/uat/pro。
  • cluster:集群。将单应用的不同实例进行分组,主要用于不同的数据中心。
  • namespace:命名空间。将单应用的配置进行分组,默认分组为application。一般可以按照功能进行分组,例如数据库配置,消息队列配置,应用配置等;也可以用来引用不属于任何服务的公共配置,如线程池数量等。
    • 命名空间分类:私有、公有(全局唯一)、关联(私有继承公有)。
    • 私有命名空间会覆盖公共命名空间。
    • 不同命名空间应用中先定义的先使用。
  • item:配置项。支持键值对,json,xml。定位方式如下:
    • 私有配置:env+app+cluster+namespace+item_key
    • 公有配置:env+cluster+namespace+item_key
  • 权限

Portal页面 #

应用管理页面

apollo

大量修改配置时,可以选择使用【文本】Tab进行编辑。

apollo

【实例列表】Tab上可以查看当前已连接到Apollo的所有客户端实例。

apollo

沪ICP备17055033号-2