Skip to content

如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发

HaojunRen edited this page May 31, 2024 · 2 revisions

目前Nepxion Discovery支持Spring Cloud Gateway和Netflix Zuul实现对Spring Cloud服务全链路流量管控的功能,如果使用者希望把这个功能逻辑和标准移植到其它网关上,参考如下

Nepxion Discovery网关

  • 支持网关对流量管控规则的解析
  • 支持网关过滤器实现全链路流量管控Header的传递
  • 支持网关实现对流量管控规则等相关埋点在监控平台(例如,SkyWalking/Jaeger)的输出
  • 支持网关在异步(WebFlux)负载均衡机制下Header上下文对象缓存的处理
  • 支持网关实现动态路由规则在六大配置中心(例如,Nacos/Apollo/Consul/Etcd/Redis/ZooKeeper)的订阅
  • 支持网关实现动态路由规则增/删/改,并监听并通过事件总线推送事件,供外部订阅
  • 支持网关全链路多入口的流量管控

其它网关二次开发

参考如下

流量管控规则解析模块

① StrategyWrapper封装流量管控的解析逻辑

  • 其它网关如果也是Java网关,重用StrategyWrapper逻辑即可

全链路流量管控Header传递模块

① AbstractGatewayStrategyRouteFilter

  • filterOrder需要设置合适的值,一般是把过滤器放在处理外部Header网关内置过滤器之后
  • gatewayHeaderPrioritygatewayOriginalHeaderIgnored开关逻辑
    • 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上增加网关异步的支持

参考如下




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally