2021/03/06 灰度 共 562 字,约 2 分钟 Gray 思维脑图
Core 核心设计
- ICompatibleServer 适配服务:利用注册中心来存储和刷新灰度信息,存储在实例元数据中
- 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灰度路由执行判别取用,并按需要透传