Gateway -网关

1.网关

API 网关是一个服务器,是系统的唯一入口。它封装了内部系统的架构,为客户端提供统一的 API。它不属于业务系统,而是一种基础设施,负责所有请求的路由、组合、协议转换、认证、限流、熔断等非业务功能。它就像酒店的前台,负责用户的所有请求。

1.1核心职责与功能

没有网关时,客户端直接调用各个微服务,会变得非常复杂和难以管理:

  1. 统一接入 (Unified Access)
    • 问题:客户端需要知道所有微服务的地址(IP/域名),耦合严重,服务变更时客户端也要跟着变。
    • 解决:网关作为唯一入口,客户端只和网关交互,解除了客户端和内部服务的耦合。
  1. 路由转发 (Routing)
    • 问题:一个请求到底应该发给哪个服务?
    • 解决:网关根据请求的路径(如 /user/** 路由到用户服务)、参数、Header等信息,将请求精确地转发到后端的某个服务实例。这是网关最核心、最基本的功能。
  1. 认证授权 (Authentication & Authorization)
    • 问题:如果每个微服务都要自己检查用户是否登录、是否有权限,会造成大量重复代码和安全逻辑不一致。
    • 解决:网关统一进行身份认证(如校验 JWT Token)。只有认证通过的请求才会被转发到后端服务,后端服务可信任网关的校验结果,只需关注业务逻辑。
  1. 流量控制与熔断 (Rate Limiting & Circuit Breaking)
    • 问题:防止恶意请求刷爆系统,或者某个服务故障导致请求堆积拖垮整个系统。
    • 解决:网关可以对特定服务或 API 进行限流(如每秒只允许100次调用)。当发现某个服务响应缓慢或大量失败时,可以快速熔断,直接返回错误,避免故障扩散。
  1. 负载均衡 (Load Balancing)
    • 问题:一个服务有多个实例,请求应该发到哪个实例?
    • 解决:网关可以将请求均匀地分发到健康的服务实例上。
  1. 日志记录与监控 (Logging & Monitoring)
    • 问题:需要全面了解系统的访问情况和性能。
    • 解决:所有请求都经过网关,因此可以在网关统一收集日志、监控指标(如QPS、响应时间、错误率),是构建可观测性系统的绝佳位置。
  1. 协议转换 (Protocol Transformation)
    • 问题:外部客户端可能使用 HTTP/1.1,而内部服务间可能使用 gRPC 等高性能协议。
    • 解决:网关可以负责不同协议之间的转换,对客户端屏蔽内部实现细节。
  1. API 聚合 (API Aggregation)
    • 问题:一个页面需要调用多个微服务(如用户信息、订单列表),让客户端多次请求效率低下。
    • 解决:网关可以将这些请求聚合成一个请求,在后端并行调用多个服务,将结果组合后一次性返回给客户端。(注意:此功能需谨慎使用,会增加网关复杂度)

1.2常见技术实现

在 Java 技术栈中,主流的网关有:

  1. Spring Cloud Gateway: Spring 官方推出的基于 Spring 5、Project Reactor 和 Spring Boot 2 的异步高性能网关,是当前的主流选择。
  2. Netflix Zuul: Spring Cloud 早期的网关组件,基于 Servlet 同步阻塞模型,性能较差,目前已进入维护模式。
  3. Soul / ShenYu: 一个高性能的、异步的、响应式的 Java 网关,功能非常丰富,支持热更新。
  4. Kong: 基于 OpenResty(Nginx + Lua)的高性能网关,通常作为流量入口,与业务网关分层部署。
  5. Nginx: 更偏向于流量网关,作为最前置的入口,负责反向代理、负载均衡、SSL终止、动静分离等,通常不处理复杂的业务逻辑。

1.3创建网关

在父模块cloud-demo中创建子模块gateway,选择maven工程的方式创建

1.3.1 引入依赖

(1) 引入网关依赖

复制代码
 <dependency>
            <!-- 网关-->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

(2)引入注册中心依赖

复制代码
<dependency>
    <!-- 注册中心-->
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
1.3.2 编写配置文件
1.3.3 编写并运行启动类

如图,可以看到网关已经成功启动。

1.3.4测试网关

浏览器访问localhost或127.0.0.1

可以看到,弹出错误页面404,至此,网关启动成功。

相关推荐
fei_sun5 分钟前
【复习】计网强化第一章
运维·服务器·网络
Terio_my17 分钟前
IDEA自动构建与热部署配置
java·ide·intellij-idea
数智顾问33 分钟前
Java坐标转换的多元实现路径:在线调用、百度与高德地图API集成及纯Java代码实现——纯Java代码实现与数学模型深度剖析
java·开发语言
武子康44 分钟前
Java-138 深入浅出 MySQL Spring Boot 事务传播机制全解析:从 REQUIRED 到 NESTED 的实战详解 传播机制原理
java·大数据·数据库·spring boot·sql·mysql·事务
每天更新1 小时前
linux内核时间&定时器&延时
linux·运维·服务器
杜子不疼.1 小时前
【Linux】冯 • 诺依曼体系结构
linux·运维·服务器
门前灯1 小时前
Linux系统之msgexec 命令详解
linux·运维·服务器·msgexec
码神本神1 小时前
【附源码】基于Spring Boot的高校爱心捐助平台的设计与实现
java
真的想不出名儿1 小时前
登录前验证码校验实现
java·前端·python
珹洺1 小时前
Java-Spring入门指南(十九)thymeleaf基本概念
java·spring·状态模式