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, 当然, 客户端需要提交下面的信息,

 

posted @ 2021-06-20 17:53  harrychinese  阅读(31)  评论(0编辑  收藏  举报