-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
HaojunRen edited this page May 31, 2024
·
2 revisions
目前Nepxion Discovery支持Spring Cloud Gateway和Netflix Zuul实现对Spring Cloud服务全链路流量管控的功能,如果使用者希望把这个功能逻辑和标准移植到其它网关上,参考如下
- 支持网关对流量管控规则的解析
- 支持网关过滤器实现全链路流量管控Header的传递
- 支持网关实现对流量管控规则等相关埋点在监控平台(例如,SkyWalking/Jaeger)的输出
- 支持网关在异步(WebFlux)负载均衡机制下Header上下文对象缓存的处理
- 支持网关实现动态路由规则在六大配置中心(例如,Nacos/Apollo/Consul/Etcd/Redis/ZooKeeper)的订阅
- 支持网关实现动态路由规则增/删/改,并监听并通过事件总线推送事件,供外部订阅
- 支持网关全链路多入口的流量管控
参考如下
- Github Code :Spring Cloud Gateway实现
- Gitee Code :Spring Cloud Gateway实现
① StrategyWrapper封装流量管控的解析逻辑
- 其它网关如果也是Java网关,重用StrategyWrapper逻辑即可
① AbstractGatewayStrategyRouteFilter
-
filterOrder
需要设置合适的值,一般是把过滤器放在处理外部Header网关内置过滤器之后 -
gatewayHeaderPriority
和gatewayOriginalHeaderIgnored
开关逻辑-
gatewayHeaderPriority
开关逻辑,举例,版本蓝绿Headern-d-version
可以由网关本身从配置中心的规则获取并解析出来,被全链路传递下去,但是版本蓝绿Header也可以从网关外部传入(Postman上设置并传入)。gatewayHeaderPriority
如果设置true,表示优先取值配置中心的值,如果没有配置,则取值外部传入的值,如果设置false,逻辑刚好相反 -
gatewayOriginalHeaderIgnored
开关逻辑,举例,当gatewayHeaderPriority
为true,如果gatewayOriginalHeaderIgnored
设置为true,表示配置中心未设置版本蓝绿Headern-d-version
的值,而外部却传入该值,那么网关拒绝这个外部传入的值,反之则接受 - 上述两个开关的逻辑实现,参考
GatewayStrategyFilterResolver
-
-
gatewayCoreHeaderTransmissionEnabled
开关逻辑,全局订阅下,用户可能不需要全链路传递流量管控Header,通过该开关设置false,关闭Header传递 - 需要对ServerWebExchange对象实现上下文缓存和清除,该对象一般包含HttpRequest。清除逻辑,参考DefaultGatewayStrategyClearFilter,注意,优先级应该调到最低
- 自身属性Header的处理逻辑
- 需要对Group逻辑的处理,分域网关和非域网两种方式,具体参考代码上的注释
- 需要对服务自身关键属性的传递,以便作为监控埋点和熔断等功能的使用
- 流量管控Header的处理逻辑
- 需要对环境流量管控Header特殊处理,env驱动需要依赖外部传值,所以始终必须以外部传值为优先
- 需要把配置中心规则上配置的内置Header进行处理,内置Header适用于定时服务没外部业务Header的传入场景
- 需要进行十四个流量管控Header的处理
② DefaultGatewayStrategyRouteFilter封装流量管控Header与上下文的结合逻辑
- 流量管控Header与上下文的结合逻辑,流量管控Header是取值外部Header的值,还是取值配置中心的值
如果第三方网关已经具备相关的能力和界面,已经不用实现。如果希望通过Nepxion Discovery六大配置中心的功能块来管理第三方网关的动态路由功能,请参考包目录
-
route
网关动态路由规则增/删/改,并监听并通过事件总线推送事件,供外部订阅 -
event
网关动态路由规则增/删/改的事件 -
proccessor
网关动态路由适配Nepxion Discovery六大配置中心
把相关埋点输入到日志和调用链,请参考包目录
monitor
Discovery Agent上增加网关异步的支持
参考如下
- Github Code :Spring Cloud Gateway Agent实现
- Gitee Code :Spring Cloud Gateway Agent实现
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发