client实现灰度流程
2020-11-13 11:42:16 4 举报
本地服务灰度方案
作者其他创作
大纲/内容
本地灰度仓库
页面
匹配规则
10.33.160.55:3030
灰度任务全量发布完成
修改灰度任务已发布包括:主流量(灰度节点)特殊流量(非灰度节点)删除匹配规则
修改策略后主动推送到client
发起请求
服务治理收到任务变动
调用API
Feign
car
客户端
客户端client
外部请求入口
客户端收到任务变动
101.33.160.55:3030
服务端(被调用者)
暴露接收服务端推送灰度策略API
根据灰度策略解析灰度规则
客户端启动
过滤供选择的服务列表
服务调用方
灰度服务端
nginx
根据服务id验证是否满足灰度
当前服务相关服务灰度策略本地缓存
服务客户端(client)
服务端-1.0(被调用者)
下发策略
10.33.160.58:3030
客户端服务启动后主动拉取灰度策略(只运行一次)
服务可用列表
sta-service
更新本地灰度策略数据
网关根据组件返回组件下所有灰度任务
自定义choose服务实例
有灰度策略
调用网关API
特殊流量
LoadBalancer(提供给Ribbon的ip地址)
openAPI
基于流量比率
ServiceC(服务发现)
基于ip
客户端启动过程
网关通知
灰度服务(网关)
不满足
提供组件下所有灰度任务
本地仓库没有ServiceB服务
ServiceA
根据组件获取策略
基于用户
通过工厂类获取服务实例
数据交互与流向
10.33.160.57:3030
mgp(组件)
sta服务做灰度-实际场景
非灰度1.0版本
灰度任务结束
添加验证中灰度任务包括:主流量(非灰度节点)特殊流量(灰度节点)匹配规则(灰度策略)
推送灰度策略到客户端
供选择的实例列表轮询调用
没有服务对应灰度策略
因为没有规则所所以特殊流量不会触发
灰度策略变更过程
gov
discovery
问题点:执行节点不可控
根据FeignClient注解的name获取是否灰度
用户创建/更新灰度任务
确认
sta
请求服务没有灰度策略
针对组件下所有务实例下当前灰度策略
服务端主动推送灰度策略
更新缓存
网关
主流量
灰度
api
根据组件查询服务下所有实例通知变动
返回灰度策略
101.33.160.57:3030
101.33.160.58:3030
本地仓库没有灰度任务
修改灰度策略
根据灰度策略.过滤出
客户端拉取
sta-service-5个可用实例
请求网关API
灰度1.1版本
客户端Feign灰度调用流程
调用客户端refresh
满足灰度策略的实例列表
最终算出本次请求是否需要走灰度ip
灰度客户端服务端交互流程
ServiceC 灰度策略
使用feign默认Ribbon负载均衡完成调用
流量内容
根据本地缓存算法规则计算目标ip
服务端检测到客户端实例上线后.主动推送当前服务相关灰度策略到客户端
默认提供选择的整个列表
删除本地灰度元数据
获取网关API地址
服务第一次启动按当前服务组件维度主动拉取灰度策略
灰度任务结束后删除灰度任务
网关中心
服务提供方
用户修改灰度策略
请求配置中心
确认成功
nacos配置中心
满足
获取灰度元数据
服务启动完成
根据接口内容更新本地缓存
feign调用
ServiceB(服务发现)
ServiceC 灰度任务
请求头获取上游ip验证是否灰度ip
重写LoadBalancer将计算后的ip端口推入feign的LoadBalancer
客户端(调用者)
启动后执行一次
服务调用
choose服务实例(默认轮询)
0 条评论
下一页