1、认识微服务网关
1.1、什么是微服务网关
"网关"它的功能也正如名字一样,具有关卡的作用。在单体应用中,调用服务极其简单。但在微服务中,调用服务就比较麻烦,因为不同的微服务可能使用了不同的开发语言和协议。在微服务生产环境中,用户调用微服务要经过网关。
1.2、为什么要使用微服务网关
从图中可以看出,网关统一向外部系统(如访问者、服务)提供REST API。在Spring Cloud,使用 Zull、Spring Cloud Gateway等作为API Gateway来实现动态路由、监控、回退、安全等功能。
1.3、Spring Cloud Gateway
Spring Cloud Gateway是Spring Cloud生态系统中的网关,旨在为微服务架构提供一种简单有效的、统一的API,并为微服务架构提供安全、监控、指标和弹性等功能,其目标是替代Zuul。
1.3.1、相关概念
Route(路由):
路由是网关的基本单元。它由一个ID、一个目标URI、一组断言(Predicates)和一组过滤器(Filters)来定义,即路由=ID URI Predicates Filters
Predicate(断言):
Predicate的输入类型是ServerWebExchange。ServerWebExchange中包含ServerHttpRequest,Predicate根据输入决定是否匹配路由。
Filter(过滤器):
过滤器用于过滤并处理请求,类似于Spring Web MVC的Web过滤器。
1.3.2、Spring Cloud Gateway的工作流程
工作流程:
1、客户端向Spring Cloud Gateway发出请求。
2、DispathcerHandler接收用户请求。
3、RotePredicateHanderMapping进行路由匹配
4、如果网关处理程序发现请求与路由匹配,则将请求发送到FilteringWebHandler(即网关的处理程序)。如果网关发现请求与路由不匹配,则将请求返给DispatcherHandler处理。
5、FilteringWebHandler通过特定过滤器发送请求,先执行所有"PRE逻辑,然后进行代理请求,最后进行“POST”逻辑。
6、FilteringWebHandler将请求转发到具体的服务中。
7、FilteringWebHandler将处理结果返回给用户。
1.3.3、比较Zuul与Spring Cloud Gateway
开源组织:
- Spring Cloud Gateway是Spring Cloud微服务平台的一个子项目,属于Spring开源社会
- Zuul是美国最大的视频点播服务商Netflix公司的开源项目
底层实现:
- Zuul 1.x构建于Servlet2.5,兼容3.x,使用阻塞式的API,不支持长连接和WebSockets
- Spring Cloud Gateway是基于Spring Boot2.x的, 构建于Spring 5以上的版本,它使用非阻塞式的API,支持WebSockets
请求方式:
- Zuul 1.x采用的同步请求,数据被封装在RequestContext里
- Spring Cloud Gateway采用的是异步请求,数据被封装在ServletWebExchange里