九、Spring Cloud 微服务之 Gateway


一、SpringCloud 微服务基础介绍
二、SpringCloud 微服务项目构建
三、SpringCloud 微服务之Eureka 服务注册与发现
四、SpringCloud 微服务之 Zookeeper 服务注册与发现
五、SpringCloud 微服务之Consul 服务注册与发现
六、SpringCloud 微服务之 Ribbon 负载均衡服务调用
七、SpringCloud 微服务之 OpenFeign 服务接口调用
八、SpringCloud 微服务之 Hystrix 断路器
九、Spring Cloud 微服务之 Gateway
十、SpringCloud 微服务之SpringCloud Config 分布式配置中心
十一、SpringCloud 微服务之SpringCloud Bus 消息总线
十二、SpringCloud 微服务之SpringCloud Stream 消息驱动
十三、Spring Cloud 微服务之 SpringCloud Sleuth 分布式请求链路跟踪
十四、SpringCloud Alibaba Nacos 服务注册和配置中心
十五、SpringCloud Alibaba Sentinel 实现熔断与限流
十六、SpringCloud Alibaba Seata 处理分布式事务

Gateway 新一代网关

1. 概述简介

Gateway官网地址:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

1.1 是什么?

  • 概述
    Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,基于Spring5.0+SpringBoot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

Spring Cloud Gateway 作为Spring Cloud 生态系统中的网关,目标是替代 Zuul,在 Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x模式的老版本。而为了提升网关的性能,Spring Cloud Gateway 是基于 WebFlux 框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

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

1.2 能干嘛

  • 反向代理
  • 鉴权
  • 流量控制
  • 熔断
  • 日志监控
  • 。。。。。。

1.3 微服务架构中的网关在哪里

在这里插入图片描述

1.4 有Zuull了怎么又出来gateway

1. 为什么选择Gateway?
1.1netflix不太靠谱,zuul2.0一直跳票,迟迟不发布

一方面因为 Zuul 1.0 已经进入了维护阶段,而且Gateway是Spring Cloud团队研发的,是亲儿子产品,值得信赖。而且很多功能Zuul都没有,用起来也非常的简单便捷。
Gateway是基于异步非阻塞模型上进行开发的,性能方面不需要担心。虽然Netflix早就发布了最新的Zuul 2.x ,但 Spring Cloud貌似没有整合计划。而且 Netflix 相关组件都宣布进入维护期,不知前景如何?
多方面综合考虑Gateway是很理想的网关选择。

1.2 Spring Cloud Gateway 具有如下特性
  • 基于Spring Framework 5,Project Reactor 和 Spring Boot 2.0 进行构建;
    动态路由:能够匹配任何请求属性;
    可以对路由指定 Predicate(断言)和 Filter(过滤器);
    集成Hystrix的断路器功能;
    集成Spring Cloud服务发现功能;
    易于编写的 Predicate(断言)和 Filter(过滤器);
    请求限流功能;
    支持路径重写。
1.3 Spring Cloud Gateway 与 Zuul 的区别

在 Spring Cloud Finchley正式版之前,Spring Cloud 推荐的网关是 Netflix 提供的 Zuul;

  1. Zuul 1.x ,是一个基于阻塞I/O的 APIGateway
  2. Zuul 1.x 基于 Servlet 2.5 使用阻塞架构它不支持任何长连接(如 WebSocket)Zuul 的设计模式和 Nginx 较像,每次I/O操作都是从工作线程中选择一个执行,请求线程被阻塞到工作线程完成,但是差别是 Nginx 用 C++实现, Zuul 用 Java 实现,而 JVM 本身会有第一次加载较慢的情况,使得 Zuul 的性能相对较差。
  3. Zuul 2.x 理念更先进,想基于 Netty 非阻塞和支持长连接,但 Spring Cloud 目前还没有整合。 Zuul 2.x 的性能较 Zuul 1.x 有较大提升。在性能方面,根据官方提供的基准测试,Spring Cloud Gateway 的 RPS(每秒请求数)是 Zuul 的1.6倍。
  4. Spring Cloud Gateway 建立在 Spring Framework 5,Project Reactor 和 Spring Boot 2.0 之上,使用非阻塞 API。
  5. Spring Cloud Gateway 还支持 WebSocket ,并且与 Spring 紧密集成拥有更好的开发体验。
2. Zuul 1.x 模型

Spring Cloud 中所集成的 Zuul 版本,采用的是 Tomcat 容器,使用的是传统的 Servlet IO 处理模型。
Servlet 生命周期?
servlet 由 servlet container 进行生命周期管理。
container 启动时构造 Servlet 对象并调用 Servlet init()进行初始化;
container 运行时接受请求,并为每个请求分配一个线程(一般从线程池中获取空闲线程)然后调用service()。
container 关闭时调用 servlet destory()销毁 servlet。
在这里插入图片描述

上述模式的缺点:
servlet 是一个简单的网络 IO 模型,当请求进入 servlet container 时,servlet container 就会为其绑定一个线程,在并发不高的场景下这种模型是适用的。但是一旦高并发(比如抽风用jemeter压),线程数量就会上涨,而线程资源代价是昂贵的(上下文切换,内存消耗大)严重影响请求的处理时间。在一些简单的业务场景下,不希望为每个request分配一个线程,只需要1个或几个线程就能应对极大并发的请求,这种场景下servlet模型没有优势
所以 Zuul 1.x 是 基于servlet之上的一个阻塞式处理模型,即spring实现了处理所有request请求的一个servlet(DispatcherServlet)并由该servlet阻塞式处理请求。所以Spring Cloud Zuul 1.x 无法摆脱servlet模型的弊端。

3. Gateway 模型

Webflux 是什么
https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#spring-webflux

说明:
传统的Web框架,比如说:struts2、springmvc等都是基于Servlet API 与 servlet容器基础之上运行的。
在Servlet 3.1 之后有了异步非阻塞的支持。而WebFlux是一个典型非阻塞异步的框架,它的核心是基于Reactor的相关API实现的。相对于传统的web框架来说,它可以运行在诸如Netty、Undertow及支持Servlet3.1的容器上。非阻塞式+函数式编程(Spring5必须让你使用 Java8)
Spring WebFlux 是Spring 5.0 引入的新的响应式框架,区别于 Spring MVC,它不需要依赖 Servlet API,它是完全异步非阻塞的,并且基于Reactor来实现响应式流规范。

2. 三大核心概念

  1. Route(路由)
    路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如断言为true则匹配该路由
  2. Predicate(断言)
    参考的是Java8的java.util.function.Predicate
    开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
  3. Filter(过滤)
    指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改.
  4. 总体
    在这里插入图片描述
    客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关 Web 处理程序。此处理程序通过特定于请求的过滤器链运行请求。过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前和之后运行逻辑。执行所有“预”过滤器逻辑。然后进行代理请求。发出代理请求后,将运行“post”过滤器逻辑

Filter在 “pre” 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;在 “post” 类型的过滤器中可以做响应内容、响应头的修改、日志输出、流量监控等有着非常重要的作用。

3. Gateway 工作流程

官网总结
在这里插入图片描述

核心逻辑:

  • 路由转发+执行过滤器链

4. 入门配置

4.1 在父项目中创建 cloud-gateway-gateway9527 网关服务module

1. 修改 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值