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

Alibaba Spring Cloud 十三 Nacos,Gateway,Nginx 部署架构与负载均衡方案

在微服务体系中,Nacos 主要承担“服务注册与发现、配置中心”的职能,Gateway(如 Spring Cloud Gateway)通常负责“路由转发、过滤、安全鉴权、灰度流量控制”等功能,而 Nginx 则常被用作“边缘反向代理”或“统一流量入口”。在实际项目里,这三者经常组合使用,以实现高扩展、高可用、可观测且灵活的流量调度。

一、Nacos + Gateway + Nginx 的常见部署架构

一般来说,可以把 Nginx 放在最外层作为“边缘代理”或“静态资源服务器”,在内网或容器集群里部署 Gateway 实例作为微服务的入口网关,网关与 Nacos 对接获取后端微服务实例信息,然后将请求路由到对应的服务。

示意图:

             ┌───────────────────┐Internet   │    Nginx (Edge)   │  <-- 监听80/443端口,做SSL、静态资源、反向代理└────────┬──────────┘│▼┌───────────────────┐│  Spring Cloud     │  <-- 网关集群(多个节点)│     Gateway       │  <-- 进行路由、鉴权、灰度流量控制└────────┬──────────┘│┌──────────────────┴───────────────────┐│                                      ││        ┌───────────────────┐        ││        │ microservice-A    │        │  <-- 内部微服务集群│        └───────────────────┘        │  <-- (多实例) 注册到 Nacos│                                      ││        ┌───────────────────┐        ││        │ microservice-B    │        ││        └───────────────────┘        │└──────────────────────────────────────┘┌───────────────────┐│     Nacos         │  <-- 提供服务注册、发现、配置管理│ (Discovery + Conf)│└───────────────────┘
  • Nginx (Edge)

    • 处理公网的 HTTP/HTTPS 流量,以及静态资源、域名解析等。
    • 将请求反向代理到内网的 Gateway 集群地址。
  • Gateway (Spring Cloud Gateway / Zuul / etc.):

    • Nacos 整合,实现动态获取微服务实例列表。
    • 进行更细粒度的负载均衡、路由转发、权限控制、限流、灰度发布等工作。
  • Nacos

    • 微服务(如 microservice-A、microservice-B)启动时向 Nacos 注册,网关也从 Nacos 拉取这些实例信息进行动态路由。
    • 同时可做分布式配置管理。

这种架构好处

  1. Nginx 专注处理边缘流量、SSL 证书、静态资源缓存等;
  2. Gateway 在内部网络中,实现微服务网关应有的路由、负载、鉴权、灰度、可观测功能;
  3. Nacos 提供统一的服务发现和配置管理;
  4. 部署和职责清晰,各组件各司其职,易于扩展和维护。

二、网关层负载均衡方案

Spring Cloud Gateway(或基于 LoadBalancer、Ribbon、Feign 等)的微服务负载均衡通常有两种模式:

  1. 基于服务名
    在 Gateway 的路由配置中,写 lb://microservice-A,Gateway 会通过 Spring Cloud LoadBalancer / Ribbon 去 Nacos 查询 microservice-A 的实例列表,并根据轮询或自定义策略进行负载均衡。

  2. 基于元数据或标签

    • 如果需要灰度发布、按版本路由等,则可以在实例注册到 Nacos 时,设置 metadata.version=v2 等属性。
    • Gateway 中的路由过滤器会基于请求头或特定条件筛选元数据为 v2 的实例,达到版本级或标签级的智能负载。

示例:(简化写法)

spring:cloud:gateway:discovery:locator:enabled: true  # 开启基于 Nacos 的自动路由routes:- id: microservice-auri: lb://microservice-apredicates:- Path=/api/a/**filters:- StripPrefix=1# 更多路由定义...

然后 Gateway 会自动通过 Nacos 找到 microservice-a 下所有可用实例并进行负载均衡。


三、Nginx 侧负载均衡最佳实践

3.1 在网关集群之上负载

如果你有多个 Gateway 实例(水平扩展),可以让 Nginx 来做第一层负载均衡,将外部流量分发到各 Gateway 实例。例如:

upstream gateway_cluster {least_conn;server 10.0.1.101:8080;server 10.0.1.102:8080;# 如果有更多 gateway 实例都可加上
}server {listen 80;server_name example.com;location / {proxy_pass http://gateway_cluster;proxy_http_version 1.1;proxy_set_header Connection "";}
}
  • 网关集群 内部再通过 Nacos 寻址到微服务。
  • 一般只在 Nginx 配置文件中维护 Gateway 实例即可,实例数量不会频繁变化,减少动态更新的复杂度。

3.2 直接负载微服务(不推荐)

如果你希望 Nginx 直接 负载到后端微服务实例,那么就需要自定义脚本OpenResty + Lua 来让 Nginx 跟 Nacos 同步实例列表(详见 上一条回答 或网上类似方案)。

  • 这种做法在大多数场景下不推荐,因为失去了网关层的可观测、流量管理、灰度控制等优势,维护起来也更复杂。
  • 最佳实践 还是将负载均衡下沉到 Gateway,Nginx 只需知道 Gateway 的地址做统一外部入口。

四、常见问题与建议

  1. 为什么还要 Nginx,如果 Gateway 也能做反向代理和 SSL?

    • 某些公司已有成熟的 Nginx 部署体系,用作七层安全防护、WAF、边缘缓存、流量统计等;或是依赖 Nginx 强大的高并发性能和成熟运维工具。
    • 也可以让 Gateway 直接对外暴露端口进行 HTTPS / 证书管理,但运维成本及安全需求决定了许多公司仍然倾向在最外层保留 Nginx。
  2. 如何实现灰度 / 蓝绿发布?

    • 最常见在 Gateway 层按用户标签或请求头区分流量;
    • 如果想在 Nacos 上给不同实例打上 metadata.version,再在 Gateway 的负载均衡策略里筛选可用实例,就能实现更精细的路由。
  3. Nacos 配置管理如何与 Gateway 结合?

    • Gateway 的路由规则或限流规则也可以存放在 Nacos Config 中,实现动态刷新;
    • 或者使用 Apollo / Spring Cloud Config 的方式管理网关配置。关键是要有统一的配置中心,避免重复修改、维护困难。
  4. 性能和高可用

    • Nacos:建议做集群部署(3 节点以上 odd 数目),并优化数据库写入/读取;
    • Gateway:可横向扩容,多实例配合 Nginx 或负载均衡器;
    • Nginx:也要做多节点或 keepalived / LVS 等方案防止单点;
    • 在高流量场景,应重点关注网关与微服务的压测和监控(QPS、RT、内存、CPU)。
  5. 可观测与日志

    • 建议在 Gateway 层做统一的链路追踪、埋点监控、日志收集(如 Zipkin / SkyWalking / SLS),更容易排查服务调用问题;
    • Nginx Access Log 只提供最外层访问日志,有助于了解外部访问频次、来源 IP 等。

五、总结

  • Nacos:服务发现 + 配置中心
  • Gateway:微服务网关层(路由、鉴权、限流、灰度)
  • Nginx:对外入口或边缘代理(SSL、静态资源、缓存、与 Gateway 集群负载均衡)

推荐架构

  1. Nginx 在外部扮演“CDN/反向代理”角色,可将请求分发到内部 Gateway 集群;
  2. GatewayNacos 深度整合,通过服务名或元数据查找后端实例并进行更多流量治理;
  3. 微服务(如订单、库存、支付等)都在 Nacos 注册并实现动态上下线管理;
  4. 若需要更精细的灰度、蓝绿发布,可在 Gateway 层结合 Nacos metadata 做路由筛选;
  5. 如果有 K8s 等容器平台,也可结合 Ingress / Service Mesh 进行更先进的流量管理和服务发现。

通过此种分层,既能让 Nginx 继续发挥在边缘侧(安全、缓存、静态资源)的优势,又能让 Gateway + Nacos 充分利用 Spring Cloud Alibaba 生态的微服务治理功能,形成一个高可用、高扩展、易运维的分布式架构体系。

相关文章:

Alibaba Spring Cloud 十三 Nacos,Gateway,Nginx 部署架构与负载均衡方案

在微服务体系中&#xff0c;Nacos 主要承担“服务注册与发现、配置中心”的职能&#xff0c;Gateway&#xff08;如 Spring Cloud Gateway&#xff09;通常负责“路由转发、过滤、安全鉴权、灰度流量控制”等功能&#xff0c;而 Nginx 则常被用作“边缘反向代理”或“统一流量入…...

+-*/运算符优先级计算模板

acwing3302 知识点一&#xff1a;有关unordered_map的优先级 头文件<unordered_map>,然后进行符号优先级定义 定义方式unordered_map<char,int>pr{ {,1},{-,1},{*,2},{/,2}};其余没定义的默认为0 知识点二&#xff1a;头文件<cctype>中的isdigit()是判断…...

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…...

FastDFS的安装及使用

分布式存储发展历程 前段时间 618 活动火热进行&#xff0c;正是购物的好时机。当我们访问这些电 商网站的时候&#xff0c;每一个商品都会有各式各样的图片展示介绍&#xff0c;这些图 片一张两张可以随便丢在服务器的某个文件夹中&#xff0c;可是电商网站如此 大体量的…...

C++ lambda表达式

目录 1.lambda表达式 1.1什么是Lambda表达式&#xff1f; 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式&#xff1f; Lambda表达式是C11标准引入的一种匿名函数&#xff0c;它允许你在需要函数的地方直接编写代码…...

react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求

为了实现一个React页面使用定时器调用一组多个接口&#xff0c;并在任意一个接口请求返回令牌失效时清除定时器且不再触发这一组请求&#xff0c;可以遵循以下步骤&#xff1a; 1. 定义API调用函数&#xff1a;创建一个函数来处理一组API调用。每个API调用都应该检查响应状态以…...

Python的泛型(Generic)与协变(Covariant)

今天咱们聊聊Python类型标注中的泛型(Generic),与协变(Covariant)。 不了解类型标注的小伙伴,可以先看一看我的上一篇文章 “Python类型检查” Python 类型检查-CSDN博客 例子 这次我开个宠物商店。看下面代码。 class Animal:passclass Dog(Animal):passclass Cat(A…...

Python Typing: 实战应用指南

文章目录 1. 什么是 Python Typing&#xff1f;2. 实战案例&#xff1a;构建一个用户管理系统2.1 项目描述2.2 代码实现 3. 类型检查工具&#xff1a;MyPy4. 常见的 typing 用法5. 总结 在 Python 中&#xff0c;静态类型检查越来越受到开发者的重视。typing 模块提供了一种方式…...

OpenEuler学习笔记(六):OpenEuler与其他Linux服务器的区别是什么?

OpenEuler是一款基于Linux内核的开源服务器操作系统&#xff0c;与其他Linux服务器操作系统&#xff08;如CentOS、Ubuntu Server等&#xff09;存在多方面的区别&#xff0c;主要体现在以下几个方面&#xff1a; 一、社区与支持 OpenEuler&#xff1a;由华为发起并开源&…...

如何使用CRM数据分析和洞察来支持业务决策和市场营销?

如何使用CRM数据分析和洞察来支持业务决策和市场营销&#xff1f; 大家好&#xff01;今天咱们聊聊一个特别重要的话题——如何利用客户关系管理&#xff08;CRM&#xff09;系统中的数据进行分析与洞察能够帮助我们做出更好的业务决策以及提升市场营销效果。其实啊&#xff0…...

MyBatis和JPA区别详解

文章目录 MyBatis和JPA区别详解一、引言二、设计理念与使用方式1、MyBatis&#xff1a;半自动化的ORM框架1.1、代码示例 2、JPA&#xff1a;全自动的ORM框架2.1、代码示例 三、性能优化与适用场景1、MyBatis&#xff1a;灵活的SQL控制1.1、适用场景 2、JPA&#xff1a;开发效率…...

SVN客户端使用手册

目录 一、简介 二、SVN的安装与卸载 1. 安装&#xff08;公司内部一般会提供安装包和汉化包&#xff0c;直接到公司内部网盘下载即可&#xff0c;如果找不到可以看下面的教程&#xff09; 2. 查看SVN版本 ​编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…...

VsCode安装文档

一、下载 进入VS Code官网&#xff1a;Visual Studio Code - Code Editing. Redefined&#xff0c;点击 DownLoad for Windows下载windows版本 当然也可以点击旁边的箭头&#xff0c;下载Windows版本 或 Mac OS 版本 备注&#xff1a; Stable&#xff1a;稳定版Insiders&#…...

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | &#x1f40d; 蛇年运势预测 在线体验地址&#xff1a;蛇年…...

【动态规划】--- 斐波那契数模型

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 算法Journey &#x1f3e0; 第N个泰波那契数模型 &#x1f4cc; 题目解析 第N个泰波那契数 题目要求的是泰波那契数&#xff0c;并非斐波那契数。 &…...

生信软件管家——conda vs pip

pip vs conda&#xff1a; 安装过python包的人自然两种管理软件都用过&#xff0c; Pip install和Conda install在Python环境中用于安装第三方库和软件包&#xff0c;但它们在多个方面存在显著的区别 总的来说&#xff1a; pip是包管理软件&#xff0c;conda既是包管理软件&…...

代码随想录——串

文章目录 反转字符串反转字符串Ⅱ路径加密反转字符串中的单词动态口令字符串匹配重复的子字符串 反转字符串 344. 反转字符串 //前后对应交换 //0<->sSize-1 //1<->sSize-2 //... //i<->sSize-1-i,i0,1,...,(sSize-1)/2 void reverseString(char* s, int s…...

詳細講一下RN(React Native)中的列表組件FlatList和SectionList

1. FlatList 基礎使用 import React from react; import { View, Text, FlatList, StyleSheet } from react-native;export const SimpleListDemo: React.FC () > {// 1. 準備數據const data [{ id: 1, title: 項目 1 },{ id: 2, title: 項目 2 },{ id: 3, title: 項目 3…...

TDengine 与上海电气工业互联网平台完成兼容性认证

在工业数字化转型和智能化升级的浪潮中&#xff0c;企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下&#xff0c;如何实现海量设备和时序数据的高效管理&#xff0c;已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明

原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 &#x1f449;前提&#xff1a; X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

微信小程序物流信息对接实战:发货接口的完整实现指南

1. 微信小程序物流对接的核心价值 对于电商类小程序来说&#xff0c;物流信息同步是用户体验的关键环节。当用户下单后&#xff0c;最关心的就是"我的包裹到哪了"。传统做法需要用户手动复制单号到第三方平台查询&#xff0c;而通过微信官方物流接口&#xff0c;可以…...

Pixel Couplet Gen 生成效果对比分析:不同参数下的对联质量评估

Pixel Couplet Gen 生成效果对比分析&#xff1a;不同参数下的对联质量评估 1. 引言&#xff1a;当AI遇上传统对联 春节贴对联是中国延续千年的文化传统&#xff0c;但创作一副既工整又有新意的对联并非易事。Pixel Couplet Gen作为一款AI对联生成工具&#xff0c;通过调整Te…...

突破语言壁垒:Unity游戏翻译破局工具如何重构跨文化体验

突破语言壁垒&#xff1a;Unity游戏翻译破局工具如何重构跨文化体验 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你满怀期待地启动一款国际热门Unity游戏&#xff0c;却被满屏陌生文字阻挡了探索脚步…...

别再手动改配置了!用Docker Compose一键部署Pikachu靶场,5分钟搞定测试环境

5分钟极速搭建Pikachu靶场&#xff1a;Docker Compose自动化实战指南 每次准备网络安全练习环境时&#xff0c;最头疼的莫过于反复安装配置各种服务——PHP版本不兼容、MySQL连接失败、Web服务器配置错误...这些琐碎问题消耗了本应用于渗透测试学习的宝贵时间。今天要分享的这套…...

京东开放平台应用申请实战:从零到一,避开那些“看不见”的坑

1. 为什么你需要这份京东开放平台避坑指南&#xff1f; 第一次申请京东开放平台应用时&#xff0c;我踩遍了所有能踩的坑。记得当时为了赶项目进度&#xff0c;直接跳过了官方文档的"不重要章节"&#xff0c;结果在云鼎环境配置环节卡了整整三天。后来才发现&#xf…...

3分钟快速上手AdGuard浏览器扩展:开源广告拦截工具全平台安装指南

3分钟快速上手AdGuard浏览器扩展&#xff1a;开源广告拦截工具全平台安装指南 【免费下载链接】AdguardBrowserExtension AdGuard browser extension 项目地址: https://gitcode.com/gh_mirrors/ad/AdguardBrowserExtension AdGuard浏览器扩展是一款开源、免费的广告拦截…...

n600高效涡流选粉机设计【说明书 CAD图纸 开题报告 任务书 实习报告】

n600高效涡流选粉机作为粉体分级领域的核心设备&#xff0c;其设计聚焦于提升分级精度与处理效率。该设备通过优化涡流场分布与颗粒运动轨迹&#xff0c;实现微细粉体的高效分离。其核心作用在于利用离心力和气流的复合作用&#xff0c;使不同粒径的颗粒在旋转流场中产生差异化…...

汽车智能制造如何落地?从“黑灯工厂”看AI赋能的关键路径

一、当工厂学会在黑暗中自行运转偌大的汽车生产车间里&#xff0c;灯光熄灭&#xff0c;只有AGV小车穿梭的微光和机械臂有节奏的运作声。没有工人的手电筒&#xff0c;也没有巡检的脚步&#xff0c;一切生产、检测、调度都在黑灯状态下有条不紊地进行。这并非科幻电影&#xff…...

基于STM32的智能药箱系统开发实战:从硬件搭建到云端互联

1. 为什么需要智能药箱 记得去年我奶奶因为忘记吃药导致血压飙升住院&#xff0c;当时我就在想&#xff0c;如果能有个自动提醒吃药的装置该多好。后来发现这个问题其实困扰着很多家庭——据统计&#xff0c;65岁以上老年人中&#xff0c;有超过60%存在漏服、错服药物的情况。这…...

Ostrakon-VL扫描终端效果展示:同一张图的商品识别+空缺定位双输出

Ostrakon-VL扫描终端效果展示&#xff1a;同一张图的商品识别空缺定位双输出 1. 像素特工&#xff1a;零售场景的AI扫描专家 想象一下&#xff0c;你走进一家便利店&#xff0c;货架上琳琅满目的商品中&#xff0c;有些位置空空如也。传统的人工巡检需要店员逐一检查&#xf…...