微服务网关spring cloud gateway

官网:https://cloud.spring.io/spring-cloud-gateway/reference/html/

参考:B站尚硅谷Springcloud教程 

Gateway简介

Cloud全家桶中有个很重要的组件就是网关,在1.x版本采用的是Zuul网关,但在2.x版本中,zuul的升级一直没有很好的开展下去,SpringCloud最后自己研发了一个网关替代Zuul,即gateway,所以可以说gateway是原zuul1.x版本的替代。

SpringCloud gateway作为Spring cloud生态系统中的网关,目标是替代zuul,在spring cloud2.0以上版本中,没有对新版本的zuul 2.0以上最新高性能版本进行集成,仍然还是使用的zuul非reacter模式的老版本。而为了提升网关的性能,springcloud gateway是基于webFlux框架实现的,而webFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

Spring cloud Gateway的目标提供统一的路由方式且基于Filter链的方式提供了网关基本功能,例如:安全,监控/指标,和限流。

 

什么是微服务网关

服务网关=路由转发+指向过滤链
1、路由转发:接收一切外界请求,转发到后端的微服务上去。
2、过滤链:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器来完成。(其实路由转发也是通过过滤器实现的。)
 

为什么需要引入网关

对于一些横切功能,比如权限校验,我们一般可以有三种实现。
1、每个微服务都自己实现。
2、写到一个公共服务中,然后其他服务都引入这个服务。
3、写到服务网关的前置过滤器中,所有请求过来进行权限校验。
第一种,太多的冗余代码,pass, 
第二种,代码不会冗余,但是每个服务都需要引入一个公共的jar包,无疑是使项目的体量增大了。而且我们一旦更新了公共服务代码,需要对每个引入该jar包的服务进行升级,也可以pass。
第三种,该方法基本可以解决上面两种方法的弊端了。
 

gateway的特性

基于Spring Framework5,Project Reactor和spring boot2.0进行构建
动态路由:能够匹配任何请求属性
可以对路由指定Predicate(断言)和Filter(过滤器)
继承Hysrix的断路器功能;
继承spring cloud的服务发现功能。
易于编写的Predicate(断言)和Filter(过滤器)
请求限流功能;
支持路径重写。

gateway和zuul 1.x的区别


1、zuul 1.x, 是一个基于阻塞I/O的api gateway
2、zuul1.x基于servlet2.5上的一个阻塞阻塞式处理模型,它不支持长连接如websocket。
3、spring cluod gateway建立在Spring Framework5、Project Reactor和Spring Boot2之上,使用非阻塞API。
4、spring cloud gateway还支持websocket,并且与spring紧密继承。

扩展:

①为什么说zuul是阻塞式的api gateway?

spring cloud集成zuul,采用的是Tomcat容器,它使用的是传统的Servlet IO处理模型。
我们知道Servet的生命周期是怎样的:
servlet一般由servlet container(如Tomcat)进行生命周期管理。
container启动时构造servlet对象并调用servlet init()进行初始化;
container运行时接受请求,并为每个请求分配一个线程(一般由线程池汇总获取空闲线程),然后调用service()。
container关闭时调用servlet destroy()销毁servlet;

上述就是简单的阻塞式io模型,servlet container为每个请求绑定一个线程,在并发不高的场景下这种模型是适用的。但是在高并发场景(比如jemter压测),线程数量就会暴涨,而线程资源的代价是很大的,涉及到上下文切换,内存消耗极大,会严重影响请求的处理时间。
②webFlux是什么?

传统的web框架,比如说:struts2, springmvc等都是基于Servelt API和Servlet容器基础上运行的。
在Servlet3.1之后有了异步非阻塞的支持。
而WebFlux是spring5.0引入的典型非阻塞异步的框架,是一个新的响应式框架,区别于Spring MVC,它不需要依赖Servlet API, 它的核心是基于Reactor的相关API实现,相对于传统的web框架来说,它可以运行在诸如Netty,Undertow以及支持Servlet3.1的容器上。

gateway三大核心概念

Route(路由):路由是构建网关的基础模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由。
Predicate(断言):参考的是java8的java.util.function.Predicate(布尔),开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由。
Filter(过滤):指的是Spring框架中的GatewayFilter的实例,使用过滤器,可以在请求被路由前或之后对请求进行修改。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值