【Java面试系列】初识GateWay网关

ops/2025/3/29 17:48:39/

网关介绍

在微服务架构中,一个系统会被拆分为很多个微服务,那么作为客户端要如何调用这么多微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题。例如:

  1. 客户端多次请求不同的微服务,增加客户端代码或配置编写的复杂性;
  2. 认证复杂,每个微服务都有独立认证;
  3. 存在跨域请求,在一定场景下处理比较复杂。

为解决上面的问题,所以引入网关的概念:所谓API网关,就是指系统的统一入口,提供内部服务的路由运转,为客户端提供统一服务,,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、监控、路由、转发等。

网关架构图:

网关架构图

网关对比

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

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

  • GateWay
    Spring公司为了替换Zuul而开发的网关服务,底层为Netty,在后面详细介绍。

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

  • Kong基于nginx+lua开发,性能高,稳定,有多个可用的插件,限流、鉴权等等。

  • 问题:只支持http协议;二次开发,扩展困难,提供管理api,缺乏更简单的管控和配置方式。

GateWay

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

特点:

  1. 性能强劲,是zuul的1.6倍;
  2. 功能强大,有很多实用的功能,如限流、监控、转发等;
  3. 设计精巧,容易扩展。
基本概念

路由(Route)是GateWay中最基本的组件之一,表示一个具体的路由信息载体,主要定义包含了以下几个信息:

  • id:路由标识,用于区别其它Route;
  • uri:路由指向的目的地uri,就是客户端请求最终转发到的微服务;
  • order:多个路由之间的排序,数值越小排序越靠前,匹配的优先级越高;
  • predicate:断言,进行条件判断,只有断言都返回真,才会真正的路由;
  • filter:过滤器,用于修改请求和响应信息。
执行流程
  1. GateWay Client 向 GateWay Server发送请求;
  2. 请求首先会被HttpWebHandlerAdapter进行提取组装成网关上下文;
  3. 然后网关的上下文会传递到DispatcherHandler,它负责将请求分发给RoutePredicateHandlerMapping;
  4. RoutePredicateHandleMapping负责路由查找,并根据路由断言判断路由是否可用;
  5. 如果断言成功,有FilteringWebHandler创建过滤器链并调用;
  6. 请求会依次经过PreFilter–微服务–PostFilter的方法,最终返回响应。

总结

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


http://www.ppmy.cn/ops/169959.html

相关文章

团体协作项目总结Git

使用Git开放时候发现本地, 有些代码并没有被拉取到本地仓库, 又不想再commit一次, 这时候我就想到了 git commit --amend 合并提交 git commit --amend 修改git提交记录用法详解 可以将本次提交记录合并到上一次合并提交 git commit --amendgit rebase -i master^^ // 假设我…

【C++ Linux编程进阶 从0实现muduo库系列】第三讲:时间类的实现

重点内容 这一讲的内容主要是时间类的实现,但时间类面试很少被问到,所以这里我们主要讲CMakeLists.txt如何生成库文件,以及make install的时候如何把对应的库文件和头文件安装到指定目录。 视频讲解:《CLinux编程进阶&#xff1a…

C语言判断闰年相关问题

一、简单闰年问题引入 写一个判断年份是否为闰年的程序? 运行结果: 二、闰年问题进阶 使用switch语句根据用户输入的年份和月份,判断该月份有多少天? 第一种写法(判断年份写在switch的case的里面): 运行结果: 第二种解法(先判断闰年): 运行结果: 三、补充 switch中的ca…

“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验

“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验 哈喽小伙伴们好,我是Stark-C~ 曾几何时,哪怕是现在,估计依然有很多小伙伴沉迷于开放性和自由度极高的《我的世界》这种沙盒游戏吧~。 我个人到现在手机上还有这款游戏…

给语言模型增加知识逻辑校验智能,识别网络信息增量的垃圾模式

给LLM增加逻辑校验模型,赋予其批判性智能。 网络系统上信息不断增长,相当部分是非纯粹的人类生成,而是由各种模型生成输出。模型持续从网络取得信息,生成信息输出到网络,AI生态系统与网络信息池之间陷入信息熵增循环。…

C++值传递和引用传递

系列文章目录 值传递和引用传递是 C 中两种常见的参数传递方式,它们的主要区别在于函数内部对参数的操作是否会影响原始数据 C值传递和引用传递 系列文章目录1、值传递2、引用传递3 、常量引用传递4、值传递 vs 引用传递总结 1、值传递 值传递会复制传入的参数&…

selenium基本使用(一)

selenium基本使用 from selenium import webdriver #导入一个selenium 库中导入webdriver模块 在Python中做UI自动化:selenium 创建一个drvier对象用来调用打开浏览器,对浏览器实现操作 driver webdriver.Chrome() #主讲谷歌浏览器 driver webdriver.I…

【计算机网络中的奈氏准则与香农定理】

文章目录 一、前言二、奈氏准则1. 概念2. 奈氏准则公式3. 奈氏准则的意义 三、香农定理1. 概念2. 香农定理公式3. 香农定理的意义 四、奈氏准则与香农定理的对比五、应用示例1. 奈氏准则示例2. 香农定理示例 六、总结 一、前言 在计算机网络中,数据的传输速率与信道…