We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
微服务网关,面向研发人员,提供业务域级的,与后端微服务紧耦合的配置,需要支持扩展开发能力,以便开发与微服务业务相关的插件,需要对接微服务架构的注册中心。从使用场景上来看:
● 南北向流量,需要流量网关和微服务网关配合使用,主要是为了区分外部流量和微服务流量,将内部的微服务能力,以统一的 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具体实现
下文会会对标SCG如何通过HIGRESS实现核心能力的详细说明,实现的能力包括:按比例路由、按请求参数路由、删除请求路径前缀、添加清求头、添加请求参数、添加响应头、对接redis实现ip维度限流。
实现对接NACOS配置中心,根据配置中心的动态配置实现特定鉴权业务逻辑。
通过自定义鉴权实现,把对接NACOS监听NACOS配置的JAVA程序打包发布成一个ACK集群中的服务,然后HIGRESS中配置自定义鉴权,绑定对应的鉴权服务,如下图 更详细的自定义鉴权可参考官网文档:https://help.aliyun.com/zh/mse/user-guide/configure-custom-authentication?spm=a2c4g.11186623.0.0.230723acxRgqDq
The text was updated successfully, but these errors were encountered:
时间Before等断言,是说higress后续会支持这种插件吗?还是需要用户自己实现?
Sorry, something went wrong.
No branches or pull requests
1 SCG简介
1.1 SCG定位
● 南北向流量,需要流量网关和微服务网关配合使用,主要是为了区分外部流量和微服务流量,将内部的微服务能力,以统一的 HTTP 接入点对外提供服务。
![image](https://private-user-images.githubusercontent.com/77718431/296180865-83efc348-b7af-498b-8345-6ef2127be195.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ0MjA2NjYsIm5iZiI6MTcyNDQyMDM2NiwicGF0aCI6Ii83NzcxODQzMS8yOTYxODA4NjUtODNlZmMzNDgtYjdhZi00OThiLTgzNDUtNmVmMjEyN2JlMTk1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIzVDEzMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAwZDM4MDhjNzg3YzI4ZDZmYTgyOTViNzUwNDdlMmRkMGZmYTZjYjg3MTk2OGMxMDBhNDQzODcxMDdiODNkNGEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OL0P5abQQkgVWYaGuqXrsKQSDKmKpW-SM1yKuTgOJ0Y)
● 东西向流量,在一些业务量比较大的系统中,可能会按照业务域隔离出一系列的微服务,在同一业务域内的微服务通信走的是服务发现机制,而跨业务域访问,则建议借助于微服务网关。
1.2 SCG核心功能
SCG产品的核心功能,基本可以用下面一张图来概括。
![image](https://private-user-images.githubusercontent.com/77718431/296180825-2620fd40-e52c-4ac3-bd06-303ab5933818.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ0MjA2NjYsIm5iZiI6MTcyNDQyMDM2NiwicGF0aCI6Ii83NzcxODQzMS8yOTYxODA4MjUtMjYyMGZkNDAtZTUyYy00YWMzLWJkMDYtMzAzYWI1OTMzODE4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIzVDEzMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdjNDM1Mzk5ZDU2ZGQ5NjUxMWUyOWU1OTQwZmRjMGEzNjQ2OWU4MDhhNTg3NDRiMzhkNTFkN2ZhMGQ5ZjAzN2UmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.teehCeYicQPov4QKbudyMzlAU6z9-4qHW8dobJj4DwY)
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实现
2.2 SCG的filter通过Higress实现
3 对标功能实现方式
下文会会对标SCG如何通过HIGRESS实现核心能力的详细说明,实现的能力包括:按比例路由、按请求参数路由、删除请求路径前缀、添加清求头、添加请求参数、添加响应头、对接redis实现ip维度限流。
3.1 通过路由的多服务可以实现按比例灰度
SCG实现方式
Higress实现方式
3.2 通过路由的策略配置-重写可以实现StripPrefix
SCG实现方式
Higress实现方式
3.3 实现请求header和响应header的传递
SCG实现方式
Higress实现方式
3.4 实现请求参数的传递
SCG实现方式
Higress实现方式
3.5 实现自定义鉴权
SCG实现方式,通过GLOBAL Filter来实现
HIGRESS实现方式
通过自定义鉴权实现,把对接NACOS监听NACOS配置的JAVA程序打包发布成一个ACK集群中的服务,然后HIGRESS中配置自定义鉴权,绑定对应的鉴权服务,如下图
![image](https://private-user-images.githubusercontent.com/77718431/296199502-021264ff-903a-4381-a876-2c7ce93dd940.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjQ0MjA2NjYsIm5iZiI6MTcyNDQyMDM2NiwicGF0aCI6Ii83NzcxODQzMS8yOTYxOTk1MDItMDIxMjY0ZmYtOTAzYS00MzgxLWE4NzYtMmM3Y2U5M2RkOTQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA4MjMlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwODIzVDEzMzkyNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWRhMjEyNjNlZmVkOTVhYzg1N2UzMmNjOTFmNDRmNDBmYWNmYmY2OWE1ODRhNWMzZTI0MWQ4Y2Y0YzQ1N2Q1ZjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OW-kxeJhwdUd4ogVVm8qCMKqGxkhzddV-jfTfaVJyXY)
更详细的自定义鉴权可参考官网文档:https://help.aliyun.com/zh/mse/user-guide/configure-custom-authentication?spm=a2c4g.11186623.0.0.230723acxRgqDq
3.6 通过redis-limit插件实现对接redis实现redis限流
SCG实现方式
HIGRESS实现方式
3.7 通过query参数配置实现按内容灰度
SCG实现方式
Higress实现方式
The text was updated successfully, but these errors were encountered: