共计 1336 个字符,预计需要花费 4 分钟才能阅读完成。
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 里