当前位置: 首页 > news >正文

Spring Cloud Gateway 进行集群化部署

如果将 Gateway 单独部署为一个服务而不做任何高可用处理,它确实会成为一个单点故障(SPOF, Single Point of Failure)。如果这个唯一的 Gateway 实例因为服务器宕机、应用崩溃、部署更新或其他任何原因而不可用,那么整个系统的所有外部请求都将无法访问,后果非常严重。

因此,在生产环境中,绝对需要对 Spring Cloud Gateway 进行集群化部署

下面我用一个表格和架构图来详细说明为什么以及如何做:

📊 单点部署 vs. 集群部署对比

方面

单点部署 (Single Instance)

集群部署 (Cluster)

可用性

。实例宕机即导致服务完全中断。

。单个实例故障不影响整体服务,由其他实例接管流量。

可扩展性

。性能受限于单台服务器资源,遇到高并发时无法水平扩展。

优秀。可以通过简单地增加实例数量来轻松应对高并发流量。

可靠性

脆弱。是典型的单点故障。

健壮。消除了单点故障。

维护性

。任何更新、重启都意味着服务停机。

良好。可以逐个实例进行蓝绿部署或滚动更新,实现无缝升级。

成本

服务器成本低。

服务器/资源成本较高,但换来了高可用性,是必要的投入。

🏗️ Gateway 集群架构示意图

标准的解决方案是为 Gateway 部署多个实例,然后在前端使用一个负载均衡器(Load Balancer)作为统一的流量入口。整个架构的流程如下所示:

flowchart TDInternet[Internet/外部流量] --> SLB[负载均衡器<br>SLB/ELB/F5/Nginx]subgraph GatewayCluster [Gateway 高可用集群]SLB --> G1[Gateway 实例 1<br>:9000]SLB --> G2[Gateway 实例 2<br>:9001]SLB --> G3[Gateway 实例 3<br>:9002]endG1 --> Discovery[服务注册中心<br>Nacos/Eureka]G2 --> DiscoveryG3 --> Discoverysubgraph BusinessServiceCluster [业务服务集群]Discovery --> S1[业务服务 1<br>user-service]Discovery --> S2[业务服务 2<br>order-service]Discovery --> S3[业务服务 3<br>product-service]end

🔧 搭建 Gateway 集群的关键步骤

搭建一个高可用的 Gateway 集群并不复杂,主要涉及以下三个环节:

  1. 部署多个 Gateway 实例
    • 这是最简单的一步。只需将相同的 Gateway 应用包部署到多台服务器(或多个容器)上。
    • 每个实例的 application.yml 中的主要配置(如Nacos地址、路由规则)应该完全一致。
    • 每个实例的 server.port 可以相同(如果机器不同)也可以不同(如果在同一机器用不同端口,常用于本地测试)。
  1. 使用负载均衡器 (LB)
    • 这是集群的入口和关键。所有外部请求首先到达这个负载均衡器,再由它分发给后端的各个 Gateway 实例。
    • 选择
      • 硬件负载均衡器:如 F5。
      • 云服务商提供的LB:这是最省事的方式,如 阿里云的 SLB腾讯云的 CLBAWS 的 ELB/ALB。它们本身通常就是高可用的。
      • 自建软件LB:如 NginxHAProxy。你需要至少部署两个Nginx节点并通过 Keepalived 实现VIP漂移,以避免Nginx本身成为单点。
  1. 共享配置与服务发现
    • 配置一致性:确保所有 Gateway 实例的路由、过滤器等配置完全相同。最佳实践是使用配置中心(如 Nacos Config、Apollo),而不是将配置写在每个应用的本地文件里。
    • 服务发现:所有 Gateway 实例和业务服务都需要注册到同一个服务注册中心(如 Nacos、Eureka)。这样,任何一个 Gateway 实例都能准确地知道所有业务服务的网络地址,从而正确地进行路由转发。如上图所示,这是Gateway集群能正确工作的基础。

💡 集群下的注意事项

  • 分布式会话:如果你在 Gateway 上做了登录鉴权等功能,需要将会话(Session)存储到外部存储(如 Redis)中,以实现会话共享。这样用户请求被转发到集群内任何一个 Gateway 实例上时,都能识别其登录状态。
  • 限流器的作用域:如果你使用了基于Redis的分布式限流(如之前的 RequestRateLimiter),那么限流是集群级别的。例如,你设置了每秒10次请求,指的是整个集群所有实例加起来每秒处理10次,而不是每个实例10次。这正是你想要的效果。
  • 健康检查:负载均衡器需要能够对后端的 Gateway 实例进行健康检查,自动将故障实例从服务列表中剔除,从而保证流量的可靠性。

💎 总结

单独部署的 Gateway 必须做成集群,否则就有单点故障风险。

核心部署模式就是:负载均衡器 (LB) + 多个 Gateway 实例 + 统一的服务注册与配置中心。

对于生产环境,强烈推荐使用云服务商的负载均衡服务,因为它们提供开箱即用的高可用性和强大的流量处理能力,可以让你更专注于业务开发本身。


文章转载自:

http://Q9qlOpTs.rtbhz.cn
http://6PzkBW43.rtbhz.cn
http://IjtuC3g8.rtbhz.cn
http://L6nOCjCF.rtbhz.cn
http://eVOQg0t7.rtbhz.cn
http://T5RchH3t.rtbhz.cn
http://yuBPSARu.rtbhz.cn
http://tRksyVWA.rtbhz.cn
http://swTBzXEU.rtbhz.cn
http://SBcTFG7o.rtbhz.cn
http://H1cFslf8.rtbhz.cn
http://6z9u2tEC.rtbhz.cn
http://N6fzO0Q5.rtbhz.cn
http://lyrGASYg.rtbhz.cn
http://OFFGPMdQ.rtbhz.cn
http://qqEXd4d2.rtbhz.cn
http://a9ONnxG3.rtbhz.cn
http://rSBNzDlx.rtbhz.cn
http://zF6qQAQU.rtbhz.cn
http://0O3ILcg5.rtbhz.cn
http://jCWO9bc4.rtbhz.cn
http://sU30FWsA.rtbhz.cn
http://OUlNFfpG.rtbhz.cn
http://VXsQAkhz.rtbhz.cn
http://vNwCyr34.rtbhz.cn
http://rXtDLOrG.rtbhz.cn
http://qUDNcDin.rtbhz.cn
http://8pqKX0Hh.rtbhz.cn
http://VHzgyc4o.rtbhz.cn
http://W84ljql0.rtbhz.cn
http://www.dtcms.com/a/372083.html

相关文章:

  • EmbodiedOneVision——类似π0.5集成了离散自回归解码与连续流匹配去噪:单个模型中完成具身推理、动作生成
  • Paper reading - 03. Speech sequencing in the human precentral gyrus
  • Spring事务失效的常见陷阱与解决方案
  • 现代C++:现代C++?
  • ZSet
  • Linux初级篇
  • MySQL集群高可用架构——组复制 (MGR)
  • MySQL Cluster核心优缺点
  • RestTemplate使用 | RestTemplate设置http连接池参数
  • 01OpenCV简介
  • 美股市场股票数据API对接文档
  • Coze源码分析-资源库-删除插件-前端源码-核心接口与工具
  • 【深度学习】重采样(Resampling)
  • http接口幂等性
  • 无重复字符的最长子串
  • 架构思维:架构师视角的 FullGC 治理
  • pytest(1):fixture从入门到精通
  • Logstash中http_poller插件的用法
  • 软考中级习题与解答——第三章_操作系统(1)
  • 基于Python的智能工程资料自动生成模型设计与实现
  • 硬件:传感器(DS18B20)
  • muduo库搭建客户端
  • smpp3.4 协议
  • 阿里云高可用生产环境网络架构实战:VPC规划与多可用区部署
  • 中国移动中兴云电脑W132D-RK3528-2+32G-刷机固件包(非原机制作)
  • 疯狂星期四文案网第63天运营日记
  • 【PCIe EP 设备入门学习专栏 -- 8.2 PCIe EP 寄存器配置空间介绍】
  • Android开发-按钮触控
  • RocketMQ分布式消息中间件的核心原理与应用
  • MySQL 之 InnoDB 存储架构解析