网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。
Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。
Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构建成 war 包。
Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如说安全认证、监控、限流等等。
压测图
Avg Latency :延迟
Avg Req/Sec/Thread :每秒钟请求的线程数
none代表不使用网关
为什么要使用GateWay
没有网关
如果没有网关的话,假如说前端工程师要直接连接成百上千的微服务,如果后端给ip端口改了,前端还得跟着动.这样极大增加了前端的工作量.
使用了网关
使用了网关的话,前端直接连接网关,然后根据网关的配置去Nacos里面获取对应的服务器地址去调用.
前端只需要在前端代码里面配置网关的地址就行了,不管你后端怎么改服务的ip和端口,这样前端的工作量就大大的降低了.
GateWay的核心概念
路由(route)
路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成。如果断言为真,则说明请求的URL和配置的路由匹配。 就是根据判断你的url前缀,比如说如果你的url前缀是user,那么就路由到user服务,如果你的前缀是order,那么就路由到order服务 说白了就是类似于SpringMVC的路径匹配
断言(predicates)
Java8中的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。 说白了就是做if else 判断的,如果满足条件就转发请求,如果不满足条件就不转发请求
过滤器(Filter)
SpringCloud Gateway中的filter分为Gateway FilIer和Global Filter。Filter可以对请求和响应进行处理。
工作原理
Spring Cloud Gateway 的工作原理跟 Zuul 的差不多,最大的区别就是 Gateway 的 Filter 只有 pre 和 post 两种。
客户端向 Spring Cloud Gateway 发出请求,如果请求与网关程序定义的路由匹配,则该请求就会被发送到网关 Web 处理程序,此时处理程序运行特定的请求过滤器链。
过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有 pre 过滤器逻辑先执行,然后执行代理请求;代理请求完成后,执行 post 过滤器逻辑。