【SpringCloud应用框架】GateWay网关

Spring Cloud Alibaba 之初识GateWay网关


文章目录


一、网关介绍

在微服务架构中,一个系统会被拆分为多个微服务。如果没有网关存在,我们只能在客户端记录梅哥为服务端的地址,分别去调用,这样会产生很多问题,例如:

  • 客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性;
  • 认证复杂,每个微服务都需要独立认证;
  • 存在跨域请求,在一定场景下处理相对复杂。

因此有了网关的概念,所谓API网关,就是指系统的统一入口,提供内部服务的路由中转,为客户端提供统一服务,一些与业务功能本身无关的公共逻辑可以在这里实现,比如认证、鉴权、监控、路由转发等。

网关架构图


二、网关对比

  • Zuul 1.x

    Netflix开源的网关,基于Servlet框架构建,功能丰富,使用JAVA开发,易于二次开发 问题:即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。

  • Zuul 2.x

    Zuul2 采用了Netty实现异步非阻塞编程模型,每个 CPU 核一个线程,处理所有的请求和响应,请求和响应的生命周期是通过事件和回调来处理的,这种方式减少了线程数量,因此开销较小。

  • GateWay

    Spring公司为了替换Zuul而开发的网关服务,底层为Netty,将在下面具体介绍。

  • Nginx+lua

    使用nginx的反向代理和负载均衡可实现对api服务器的负载均衡及高可用,lua是一种脚本语言,可以来编写一些简单的逻辑, nginx支持lua脚本,问题在于:无法融入到微服务架构中

  • Kong

    基于Nginx+Lua开发,性能高,稳定,有多个可用的插件(限流、鉴权等等)可以开箱即用。 问题:只支持Http协议;二次开发,自由扩展困难;提供管理API,缺乏更易用的管控、配置方式。

三、GateWay

Spring Cloud Gateway 基于Spring Boot 2.x、Spring WebFlux和Project Reactor,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。它的目标是替代Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控和限流。

特点:

  1. 性能强劲:是Zuul的1.6倍
  2. 功能强大:内置了很多实用的功能,例如转发、监控、限流等
  3. 设计优雅,容易扩展

基本概念:

路由(route)是gateway中最基本的组件之一,表示一个具体的路由信息载体。主要定义了下面几个信息:

id:路由标识,区别于其它的route。

uri:路由指向的目的地uri,即客户端请求最终被转发到的微服务。

order:用于多个route之间的排序,数值越小排序越靠前,匹配优先级越高。

predicate:断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由。

filter:过滤器由于修改请求和响应信息。

执行流程:

Gateway Client 向 GateWay Server发送请求,

当前请求会被HttpWebHandlerAdapter进行提取组装成网关上下文,

然后网关上下文会传递到DispatcherHandler,它负责将请求分发给RoutePredicateHandlerMapping

RoutePredicateHandlerMapping负责路由查找,并根据路由断言判断路由是否可用,

如果断言成功,有FilteringWebHandler创建过滤器并调用,

请求会一次经过preFilter - 微服务 - postFilter的方法,最终返回响应。

总结

SpringCloud GateWay使用的是Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架。

相关推荐
MeAT ITEM14 小时前
maven导入spring框架
数据库·spring·maven
chenxu98b14 小时前
SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
spring boot·后端·maven
dEso RSET14 小时前
Skywalking介绍,Skywalking 9.4 安装,SpringBoot集成Skywalking
spring boot·后端·skywalking
青槿吖14 小时前
告别RestTemplate!Feign让微服务调用像点外卖一样简单
java·开发语言·分布式·spring cloud·微服务·云原生·架构
MacroZheng14 小时前
横空出世!IDEA最强Spring插件来了,让你的开发效率成倍提升!
java·spring boot·后端
NEGl DRYN14 小时前
Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
java·spring boot·logback
希望永不加班14 小时前
SpringBoot 缓存一致性:缓存与数据库双写策略
数据库·spring boot·后端·缓存·oracle
我是无敌小恐龙14 小时前
Java SE 零基础入门 Day02 运算符与流程控制超详细笔记
java·数据结构·spring boot·笔记·python·spring·spring cloud
MiNG MENS14 小时前
Spring Boot + Vue 全栈开发实战指南
vue.js·spring boot·后端
2601_9498165814 小时前
Spring Boot--@PathVariable、@RequestParam、@RequestBody
java·spring boot·后端