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 拉取这些实例信息进行动态路由。
- 同时可做分布式配置管理。
这种架构好处:
- Nginx 专注处理边缘流量、SSL 证书、静态资源缓存等;
- Gateway 在内部网络中,实现微服务网关应有的路由、负载、鉴权、灰度、可观测功能;
- Nacos 提供统一的服务发现和配置管理;
- 部署和职责清晰,各组件各司其职,易于扩展和维护。
二、网关层负载均衡方案
Spring Cloud Gateway(或基于 LoadBalancer、Ribbon、Feign 等)的微服务负载均衡通常有两种模式:
-
基于服务名:
在 Gateway 的路由配置中,写lb://microservice-A
,Gateway 会通过 Spring Cloud LoadBalancer / Ribbon 去 Nacos 查询microservice-A
的实例列表,并根据轮询或自定义策略进行负载均衡。 -
基于元数据或标签:
- 如果需要灰度发布、按版本路由等,则可以在实例注册到 Nacos 时,设置
metadata.version=v2
等属性。 - Gateway 中的路由过滤器会基于请求头或特定条件筛选元数据为
v2
的实例,达到版本级或标签级的智能负载。
- 如果需要灰度发布、按版本路由等,则可以在实例注册到 Nacos 时,设置
示例:(简化写法)
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 的地址做统一外部入口。
四、常见问题与建议
-
为什么还要 Nginx,如果 Gateway 也能做反向代理和 SSL?
- 某些公司已有成熟的 Nginx 部署体系,用作七层安全防护、WAF、边缘缓存、流量统计等;或是依赖 Nginx 强大的高并发性能和成熟运维工具。
- 也可以让 Gateway 直接对外暴露端口进行 HTTPS / 证书管理,但运维成本及安全需求决定了许多公司仍然倾向在最外层保留 Nginx。
-
如何实现灰度 / 蓝绿发布?
- 最常见在 Gateway 层按用户标签或请求头区分流量;
- 如果想在 Nacos 上给不同实例打上
metadata.version
,再在 Gateway 的负载均衡策略里筛选可用实例,就能实现更精细的路由。
-
Nacos 配置管理如何与 Gateway 结合?
- Gateway 的路由规则或限流规则也可以存放在 Nacos Config 中,实现动态刷新;
- 或者使用 Apollo / Spring Cloud Config 的方式管理网关配置。关键是要有统一的配置中心,避免重复修改、维护困难。
-
性能和高可用
- Nacos:建议做集群部署(3 节点以上 odd 数目),并优化数据库写入/读取;
- Gateway:可横向扩容,多实例配合 Nginx 或负载均衡器;
- Nginx:也要做多节点或 keepalived / LVS 等方案防止单点;
- 在高流量场景,应重点关注网关与微服务的压测和监控(QPS、RT、内存、CPU)。
-
可观测与日志
- 建议在 Gateway 层做统一的链路追踪、埋点监控、日志收集(如 Zipkin / SkyWalking / SLS),更容易排查服务调用问题;
- Nginx Access Log 只提供最外层访问日志,有助于了解外部访问频次、来源 IP 等。
五、总结
- Nacos:服务发现 + 配置中心
- Gateway:微服务网关层(路由、鉴权、限流、灰度)
- Nginx:对外入口或边缘代理(SSL、静态资源、缓存、与 Gateway 集群负载均衡)
推荐架构:
- Nginx 在外部扮演“CDN/反向代理”角色,可将请求分发到内部 Gateway 集群;
- Gateway 与 Nacos 深度整合,通过服务名或元数据查找后端实例并进行更多流量治理;
- 微服务(如订单、库存、支付等)都在 Nacos 注册并实现动态上下线管理;
- 若需要更精细的灰度、蓝绿发布,可在 Gateway 层结合 Nacos metadata 做路由筛选;
- 如果有 K8s 等容器平台,也可结合 Ingress / Service Mesh 进行更先进的流量管理和服务发现。
通过此种分层,既能让 Nginx 继续发挥在边缘侧(安全、缓存、静态资源)的优势,又能让 Gateway + Nacos 充分利用 Spring Cloud Alibaba 生态的微服务治理功能,形成一个高可用、高扩展、易运维的分布式架构体系。
相关文章:
Alibaba Spring Cloud 十三 Nacos,Gateway,Nginx 部署架构与负载均衡方案
在微服务体系中,Nacos 主要承担“服务注册与发现、配置中心”的职能,Gateway(如 Spring Cloud Gateway)通常负责“路由转发、过滤、安全鉴权、灰度流量控制”等功能,而 Nginx 则常被用作“边缘反向代理”或“统一流量入…...
+-*/运算符优先级计算模板
acwing3302 知识点一:有关unordered_map的优先级 头文件<unordered_map>,然后进行符号优先级定义 定义方式unordered_map<char,int>pr{ {,1},{-,1},{*,2},{/,2}};其余没定义的默认为0 知识点二:头文件<cctype>中的isdigit()是判断…...

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

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

C++ lambda表达式
目录 1.lambda表达式 1.1什么是Lambda表达式? 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式? Lambda表达式是C11标准引入的一种匿名函数,它允许你在需要函数的地方直接编写代码…...
react页面定时器调用一组多个接口,如果接口请求返回令牌失效,清除定时器不再触发这一组请求
为了实现一个React页面使用定时器调用一组多个接口,并在任意一个接口请求返回令牌失效时清除定时器且不再触发这一组请求,可以遵循以下步骤: 1. 定义API调用函数:创建一个函数来处理一组API调用。每个API调用都应该检查响应状态以…...
Python的泛型(Generic)与协变(Covariant)
今天咱们聊聊Python类型标注中的泛型(Generic),与协变(Covariant)。 不了解类型标注的小伙伴,可以先看一看我的上一篇文章 “Python类型检查” Python 类型检查-CSDN博客 例子 这次我开个宠物商店。看下面代码。 class Animal:passclass Dog(Animal):passclass Cat(A…...

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

OpenEuler学习笔记(六):OpenEuler与其他Linux服务器的区别是什么?
OpenEuler是一款基于Linux内核的开源服务器操作系统,与其他Linux服务器操作系统(如CentOS、Ubuntu Server等)存在多方面的区别,主要体现在以下几个方面: 一、社区与支持 OpenEuler:由华为发起并开源&…...

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

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

SVN客户端使用手册
目录 一、简介 二、SVN的安装与卸载 1. 安装(公司内部一般会提供安装包和汉化包,直接到公司内部网盘下载即可,如果找不到可以看下面的教程) 2. 查看SVN版本 编辑 3. SVN卸载 三、SVN的基本操作 1. 检出 2. 清除认证数据 3. 提交…...

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

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”
🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | 🐍 蛇年运势预测 在线体验地址:蛇年…...

【动态规划】--- 斐波那契数模型
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 算法Journey 🏠 第N个泰波那契数模型 📌 题目解析 第N个泰波那契数 题目要求的是泰波那契数,并非斐波那契数。 &…...

生信软件管家——conda vs pip
pip vs conda: 安装过python包的人自然两种管理软件都用过, Pip install和Conda install在Python环境中用于安装第三方库和软件包,但它们在多个方面存在显著的区别 总的来说: pip是包管理软件,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 与上海电气工业互联网平台完成兼容性认证
在工业数字化转型和智能化升级的浪潮中,企业对高效、可靠的数据管理解决方案的需求日益增长。特别是在风电智能运维、火电远程运维、机床售后服务等复杂多样的工业场景下,如何实现海量设备和时序数据的高效管理,已经成为推动行业升级的关键。…...

随机矩阵投影长度保持引理及其证明
原论文中的引理 2 \textbf{2} 2 1. \textbf{1. } 1. 引理 1 \textbf{1} 1(前提之一) 1.1. \textbf{1.1. } 1.1. 引理 1 \textbf{1} 1的内容 👉前提: X ∼ N ( 0 , σ ) X\sim{}N(0,\sigma) X∼N(0,σ)即 f ( x ) 1 2 π σ e – x 2 2 σ 2 f(x)\text{}…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...