Env Navigator项目设计
Env Navigator项目
定位: 用于管理企业内部系统与环境相关的配置, 还可以做到流量调控. 和通用的配置系统不同的是, 本系统专注于多环境下的环境相关的配置, 同时提供一个集中化的规则引擎, 无需每个客户端增加切换环境的逻辑.
架构: SpringBoot web应用, 配置信息存储在 DB 中, 如果需要更高性能, 可以增加 Redis 缓存.
核心系统升级上线要求:
1. 核心系统新版 Production 上线之前, 需要一个 Pilot 测试, 需要有 Pilot 环境
2. 核心系统上线过程中, 需要保证系统不停机, 往往需要A/B两套环境
这样运行环境就有4套, 见下图.
项目背景: 所有接入核心系统的客户端或其他服务, 需要配合核心系统作上线之前的 pilot 运行, 接入 pilot 的范围要做精细化管控, 不能太多, 毕竟是上线前的试运行, 又不能太少, 否则就不能在试运行期间发现问题. 每次升版因为改动不同, 可能需要调整接入客户端范围.
在这种要求下, 每个客户端或调用方如果都增加这样的环境切换逻辑, 成本太高, 就算加好了, 如何确保所有客户端能同时变更环境配置也非常困难.
Env Navigator项目应运而生.
使用场景:
1. 集中调控客户端按需接入 Pilot/Production 环境.
2. 支持滚动升级, 比如Pilot环境, 需要从1.0升级到2.0, 可以先将 Pilot_A 流量关掉, 完成升级, 然后将 Pilot_A 开启, 然后将 Pilot_B完成升级.
3. 流量分摊. 升级完成后, A/B两套环境, 可以作 Load Balance.
4. 如果核心系统升级, 引起接口不兼容, 可以通过本系统强制客户端完成对应的升级.
ER 模型:
Service 表 , 定义 Service, 并设定未知客户端将被分配到哪个环境中
Client 表, 定义 Client 端
ServiceDos 表, 指定拒绝客户端的策略
Resource表, 用于存储具体的Resource value
NavPolicy表, 存储客户端选择Env Level的策略, 下面设计是client和serviceId直接建立关系, 也可以抽象成client到 serviceGroup建立关系,
Env 表, Env定义和流量控制策略
客户端使用方法:
客户端在每次使用服务端接口时候, 先从Env Navigator系统, 获取目标服务端的Resource取值, 比如获取目标服务端的网关 url, 当然, 客户端需要提交下面的信息,