Open jinfengcg opened 8 months ago
微服务网关,面向研发人员,提供业务域级的,与后端微服务紧耦合的配置,需要支持扩展开发能力,以便开发与微服务业务相关的插件,需要对接微服务架构的注册中心。从使用场景上来看:
● 南北向流量,需要流量网关和微服务网关配合使用,主要是为了区分外部流量和微服务流量,将内部的微服务能力,以统一的 HTTP 接入点对外提供服务。 ● 东西向流量,在一些业务量比较大的系统中,可能会按照业务域隔离出一系列的微服务,在同一业务域内的微服务通信走的是服务发现机制,而跨业务域访问,则建议借助于微服务网关。
SCG产品的核心功能,基本可以用下面一张图来概括。
SCG的所有核心能力,均是通过predicate、route、filter之间的组合来实现。 ● 路由Route:即一套路由规则,是集URI、predicate、filter等属性的一个元数据类,对应到云原生网关的路由 ● 断言Predicate:Java8函数断言,这里可以看做是满足什么条件的时候,route规则进行生效。允许开发者去定义匹配来自于Http Request中的任何信息,如请求头和参数,对应到云原生网关的匹配规则。 ● 过滤器Filter:filter针对请求和响应进行增强、修改处理。filter可以认为是Spring Cloud Gateway最核心的模块,熔断、安全、逻辑执行、网络调用都是filter来完成的,其中又细分为gateway filter和global filter,区别在于是具体一个route规则生效还是所有route规则都生效,对应到云原生网关的路由策略和插件
以一次请求看SpringCloud Gateway的调用流程: ● RoutePredicateHandlerMapping:通过lookupRoute方法,遍历所有路由列表,一个路由一个路由的匹配,直到找到第一个可以匹配的Route路由。 ● FilteringWebHandler:创建过滤器链,按顺序调用Filter,filter又分为PreFilter前置过滤器和PostFilter后置过滤器。 ● 整个请求过ServerWebExchange作为上下文贯穿启动,对于一次请求的信息从ServerWebExchange获取,修改则保存在ServerWebExchange中,注意基于Reactive特性,ServerWebExchange是只读的,修改Exchange需重新builder
针对SCG的常用的、核心的能力,MSE HIGRESS通过白屏配置+内置插件基本都可以覆盖,一些较个性化的能力也均可以通过自定义插件来实现。
下文分别列出SCG的predicate和filter如果通过HIGRESS具体实现
时间Before等断言,是说higress后续会支持这种插件吗?还是需要用户自己实现?
1 SCG简介
1.1 SCG定位
● 南北向流量,需要流量网关和微服务网关配合使用,主要是为了区分外部流量和微服务流量,将内部的微服务能力,以统一的 HTTP 接入点对外提供服务。 ● 东西向流量,在一些业务量比较大的系统中,可能会按照业务域隔离出一系列的微服务,在同一业务域内的微服务通信走的是服务发现机制,而跨业务域访问,则建议借助于微服务网关。
1.2 SCG核心功能
SCG产品的核心功能,基本可以用下面一张图来概括。
1.3 SCG实现核心能力的三要素
SCG的所有核心能力,均是通过predicate、route、filter之间的组合来实现。
● 路由Route:即一套路由规则,是集URI、predicate、filter等属性的一个元数据类,对应到云原生网关的路由 ● 断言Predicate:Java8函数断言,这里可以看做是满足什么条件的时候,route规则进行生效。允许开发者去定义匹配来自于Http Request中的任何信息,如请求头和参数,对应到云原生网关的匹配规则。 ● 过滤器Filter:filter针对请求和响应进行增强、修改处理。filter可以认为是Spring Cloud Gateway最核心的模块,熔断、安全、逻辑执行、网络调用都是filter来完成的,其中又细分为gateway filter和global filter,区别在于是具体一个route规则生效还是所有route规则都生效,对应到云原生网关的路由策略和插件
以一次请求看SpringCloud Gateway的调用流程: ● RoutePredicateHandlerMapping:通过lookupRoute方法,遍历所有路由列表,一个路由一个路由的匹配,直到找到第一个可以匹配的Route路由。 ● FilteringWebHandler:创建过滤器链,按顺序调用Filter,filter又分为PreFilter前置过滤器和PostFilter后置过滤器。 ● 整个请求过ServerWebExchange作为上下文贯穿启动,对于一次请求的信息从ServerWebExchange获取,修改则保存在ServerWebExchange中,注意基于Reactive特性,ServerWebExchange是只读的,修改Exchange需重新builder
2 MSE HIGRESS与SCG能力对标
下文分别列出SCG的predicate和filter如果通过HIGRESS具体实现
2.1 SCG的predicate通过Higress实现
时间Before等断言,是说higress后续会支持这种插件吗?还是需要用户自己实现?