功能
Gateway负责拦截所有的请求,分发到服务上,
可以实现
- 日志拦截
- 权限控制
- 解决跨域问题
- 限流
- 熔断
- 负载均衡
- 隐藏服务端IP
- 黑白名单拦截
组成
- 路由:网关的基本模块,由ID,目标URL,一组断言和一组过滤器组成
- 断言:访问该接口的访问规则,可以用来匹配来自http请求的任何内容,包括headers,请求参数等
- 过滤器:过滤一些请求
- 面对互联网复杂的业务系统,基本可以将API网关分成两类:流量网关和业务网关。
流量网关:跟具体的后端业务系统和服务完全无关的部分,比如安全策略、全局性流控策略、流量分发策略等。流量网关的功能跟 Web 应用防火墙(WAF)非常类似。WAF一般是基于 Nginx/OpenResty 的 ngx_lua 模块开发的 Web 应用防火墙。
业务网关:针对具体的后端业务系统,或者是服务和业务有一定关联性的部分,并且一般被直接部署在业务服务的前面。业务网关一般部署在流量网关之后,业务系统之前,比流量网关更靠近系统。我们大部分情况下说的 API 网关,狭义上指的是业务网关。并且如果系统的规模不大,我们也会将两者合二为一,使用一个网关来处理所有的工作
什么是业务网关
服务网关 = 路由转发 + 过滤器
- 请求接入:作为所有 API 接口服务请求的接入点,管理所有的接入请求;
- 业务聚合:作为所有后端业务服务的聚合点,所有的业务服务都可以在这里被调用;
- 中介策略:实现安全、验证、路由、过滤、流控,缓存等策略,进行一些必要的中介处理;
- 统一管理:提供配置管理工具,对所有 API 服务的调用生命周期和相应的中介策略进行统一管理。
Spring Cloud Gateway
spring cloud gateway 作为业务网关的一种,整个作用原理如下图。
客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则将其发送到网关 Web 处理程序,此处理程序运行特定的请求过滤器链。过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求之前或之后执行逻辑。所有 “pre” 过滤器逻辑先执行,然后执行代理请求,代理请求完成后,执行 “post” 过滤器逻辑。