首页 > 技术文章 > Gateway 网关 之 概述

Alay 2021-08-16 23:25 原文

Gateway 概述

什么是网关:

  API网关作用就是把各个服务对外提供的API汇聚起来,让外界看起来是一个统一的接口。同时也可在网关中提供额外的功能。总结:网关就是所有项目的一个统一入口

  网关 = 路由转发 + 过滤器(编写额外功能)

路由转发:

接收外界请求,通过网关的路由转发,转发到后端的服务上。

如果只有这个一个功能看起来和之前学习的Nginx反向代理服务器很像,外界访问nginx,由nginx做负载均衡,后把请求转发到对应服务器上。

过滤器:

网关非常重要的功能就是过滤器。

过滤器中默认提供了 25 内置功能还自持额外的自定义功能。

对于我们来说比较常用的功能有网关的容错、限流以及请求及相应的额外处理。


Spring Cloud Gateway

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

2、Gateway 提供一种简单有效的方式对 API 进行路由,以及提供强大的过滤功能,如:熔断、限流、重试 等

3、SpringCloud Gateway 是SpringCloud 的一个新项目,基于Spring 5.0+SpringBoot2.0 和 Project Reactor 等技术开发的网关,它指在微服务架构提供一种简单有效的统一的 API 路由管理方式

4、SpringCloud Gateway 作为SpringCloud 生态系统中的网关,目标是替代 zuul,在SpringCloud 2.0以上版本中,没有对新版本的 zuul2.0进行集成,任然还是使用 zuul1.x 非 Reactor模式的老版本,Zuul理念更先进,想基于 Netty 非阻塞是和支持长连接,性能,但SpringCloud没有整合 Zuul2.x,而是借鉴了 Zuul的理念,开发了SpringCloud Gateway,而为了提高网关性能SpringCloud Gateway 是居于 WebFlux 框架实现的,而WebFlux 底层是居于高性能的 Reactor 模式通信框架 Netty,是基于异步非阻塞模型上进行开发的,性能上强劲,据官方基准测试,SpringCloud Gateway 的 RPS(每秒请求数)是 Zuul1.x的1.6倍,

5、SpringCloud Gateway 的目标是提供统一的 路由方式基于 Filter 链的方式提供网关的基本功能,如:安全、监控/指示、限流

6、作用:反向代理、鉴权、流量控制(过滤处理)、熔断、日志控制

 

 

 


Gateway 的三大和核心概念 

1、Route (路由):路由是构建网关的基本模块,由:ID、目标URI、一系列断言和过滤器组成,Gateway 的核心,一个Gateway 项目由若干个 route 组成,一个rote 代表一个完整的Api网关节点包含了:路由规则(Predicate),校验、过滤处理和容错处理(filter)

2、Predicate (断言):参看Java8的 java.util.function.Predicate,开发人员可以匹配 HTTP请求中的所有内容(例如请求和和请求参数),如果请求与断言匹配,则进行路由

3、Filter  (过滤):指的是Spring框架中GatewayFilter实例,使用过滤器,可以在请求被路由前或之后对请求进行修改,类似Servlet中的过滤器,同样是 链式执行

总结:

Web请求,通过匹配一些条件,定位到真正的服务节点,并在这个转发的前后进行一些精细化的控制,Predicate 是我们的匹配条件,Filter 可以理解为一个无所不能的过滤器,有两个元素,在加上 URI,就可以实现具体的路由

 

 

客户端向 Gateway 发送请求,然后 Gateway Handler Mapping中找到与之相匹配的路由,将其发给 Gateway Web Handler,Handler再通过指定的过滤器链将请求发送到我们实际的服务执行业务逻辑,然后返回,

过滤器中虚线分开的是可能会在发送代理请求之前(pre)或之后(post)执行业务逻辑

Filter 在 Pre 类型的过滤器可以做参数校验,权限校验,流量监控,日志输出协议转换等,在 Post 类型的过滤器可以做响应内容修改、响应头的修改、日志输出、流量监控 等重要操作

 

  • Gateway 将路由作为 WebFlux Handler Mapping 基础架构的一部分,包括内置的 Route Predicate 工厂,所有这些 Predicate 都与 HTTP 请求的不同属性匹配,多个 Route Predicate  可以进行组合使用
  • Gateway 创建 Route 对象时,使用 RoutePredicateFactory 创建 Predicate 对象,Predicate 对象可以赋值给 Route,Gateway 包含了许多内置的 Route Predicate Factories
  • 所有这些断言都匹配 HTTP 请求的不同属性,多种谓词工厂可以组合使用,并且通过逻辑 And

 

>>>>>>>>>>>>>>>>>>>   下一遍:https://www.cnblogs.com/Alay/p/15150489.html   <<<<<<<<<<<<<<<<<<<<<<

推荐阅读