06 灰度核心设计

2021/03/06 灰度 共 562 字,约 2 分钟
MiniPa

Gray 思维脑图

Core 核心设计

1.Meta元数据 获取与刷新

  • ICompatibleServer 适配服务:利用注册中心来存储和刷新灰度信息,存储在实例元数据中
    • getMetadata() 获取注册的灰度信息
  • PluginInitializer 配置初始化:通过继承 Spring ApplicationContextInitializer 上下文初始化接口,实现 ICompatibleServer 初始化连接时注册一些自定义配置进去。
  • DynamicRouter 动态路由
    • Ribbon 路由需要一个 LoadBalanceKey,动态构建不同的 StringKey,如 “userId:3333”,”version:33”等
    • 构造事件分发处理机制,切入 Zuul PreFilter,执行不同的 Ribbon路由策略,实现灰度路由
  • DecisionManager 灰度管理
    • 本地缓存灰度信息:instanceId-Decision,appId-Decision
    • 定时刷新灰度信息
  • Spel解析:引入Spel解析机制,以利于配置灰度表达式
  • IServerPredicate:灰度决策判定,构造多种不同的判定器,如:VersionPredicate
  • RequestHolder: Zuul、Feign等请求,均会有请求上下文,本地缓存供Ribbon灰度路由执行判别取用,并按需要透传

文档信息

Search

    Table of Contents