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

《从单体架构到微服务:为什么需要 Nacos 和 Gateway?一文搞懂服务注册、配置中心和网关》

从单体架构到微服务:为什么需要 Nacos 和 Gateway?

前言

大家好!我是小尤~。在传统项目开发中,我们经常看到一个 Spring Boot 项目直接连接数据库,然后提供接口给前端调用。

例如:

前端 | | Spring Boot | | MySQL

这种架构在项目初期完全没有问题。

但是随着业务越来越复杂,一个项目可能包含:

  • 用户模块
  • 商品模块
  • 订单模块
  • 支付模块
  • 库存模块

如果全部写在一个项目里面,代码会越来越庞大。

于是很多企业开始采用:

微服务架构

将一个大的系统拆分成多个独立服务。

例如:

前端 | | API Gateway | ------------------------------------------------ | | | | 用户服务 商品服务 订单服务 支付服务

但是拆成微服务之后,又产生了新的问题:

  • 服务之间怎么找到对方?
  • 服务地址变化怎么办?
  • 配置文件怎么统一管理?
  • 前端请求应该访问哪个服务?

于是出现了:

  • Nacos
  • Gateway

这两个非常重要的组件。


一、Nacos 是什么?

Nacos 是一个服务发现和配置管理平台。

官方定位:

Nacos 主要解决服务发现、服务配置管理等问题。 ([Nacos 官网][1])

简单理解:

Nacos 就是微服务世界里的“通讯录 + 配置中心”。

它主要有两个作用:

  1. 服务注册与发现
  2. 配置管理

二、为什么需要服务注册中心?

假设没有 Nacos。

现在有:

订单服务 需要调用 用户服务

订单服务可能直接写:

http://192.168.1.10:8080/user

刚开始没问题。

但是生产环境:

用户服务可能部署多个:

user-service 192.168.1.10:8080 192.168.1.11:8080 192.168.1.12:8080

那么问题来了:

订单服务到底调用哪个?

如果某台服务器挂了怎么办?

如果新增服务器怎么办?


没有注册中心的问题

每个服务自己维护地址:

订单服务 知道用户服务地址 商品服务 知道用户服务地址 支付服务 知道用户服务地址

结果:

每增加一个服务:

所有地方都需要修改。

维护成本非常高。


三、有 Nacos 后是什么样?

引入 Nacos:

Nacos | 保存所有服务信息 | --------------------------------- | | | 用户服务 商品服务 订单服务

服务启动的时候:

主动告诉 Nacos:

我是 user-service 地址: 192.168.1.10:8080

Nacos 保存:

user-service 实例1: 192.168.1.10:8080 实例2: 192.168.1.11:8080

当订单服务需要调用用户服务:

不会直接找 IP。

而是:

订单服务 | | 询问 Nacos "user-service在哪里?" | | Nacos返回地址

这个过程叫:

服务发现


四、Nacos 如何保证服务可用?

Nacos 有健康检查机制。

例如:

用户服务启动:

注册 user-service 192.168.1.10

然后定期发送:

heartbeat 我还活着

如果:

超过时间没有响应

Nacos 会认为:

服务不可用 删除实例

避免其他服务继续调用故障机器。


五、Nacos 第二个作用:配置中心

除了服务发现,Nacos 还有一个非常重要的功能:

配置管理


以前:

每个服务都有:

application.yml

例如:

用户服务:

mysql:url:xxxredis:host:xxx

订单服务:

mysql:url:xxxredis:host:xxx

商品服务:

mysql:url:xxxredis:host:xxx

如果数据库地址变化。

需要修改几十个服务。


使用 Nacos:

统一保存:

Nacos shop-prod.yaml mysql: url: xxx redis: host: xxx

所有服务启动:

从 Nacos 获取配置。

结构:

Nacos 配置中心 | ----------------------------- | | | 用户服务 商品服务 订单服务

六、Gateway 是什么?

如果说:

Nacos 是通讯录。

那么:

Gateway 就是公司前台。

它负责:

所有请求进入系统的统一入口。


没有 Gateway:

前端 | |------ 用户服务 | |------ 商品服务 | |------ 订单服务

前端需要知道:

  • 用户服务地址
  • 商品服务地址
  • 订单服务地址

非常麻烦。


有 Gateway:

前端 | | Gateway | -------------------------------- 用户服务 商品服务 订单服务

前端只访问:

api.xxx.com

所有请求进入 Gateway。


七、Gateway 的核心功能

1. 请求路由

例如:

用户请求:

/api/user/login

Gateway:

/api/user/** | ↓ user-service

订单:

/api/order/** | ↓ order-service

2. 统一鉴权

如果没有 Gateway:

每个服务都判断:

Token 权限 登录状态

例如:

用户服务判断一次 订单服务判断一次 商品服务判断一次

代码重复。

有 Gateway:

请求 | Gateway | 检查Token | 通过 | 进入业务服务

3. 限流

例如:

接口:

/api/pay

突然大量请求。

Gateway 可以限制:

1秒最多1000次

超过:

拒绝请求

保护后端服务。


4. 日志记录

Gateway 可以统一记录:

请求用户 请求路径 响应时间 状态码

方便排查问题。


八、Nacos 和 Gateway 是什么关系?

很多初学者容易混淆。

它们负责不同事情。

Nacos:

解决:

服务在哪里?

例如:

user-service 192.168.1.10

Gateway:

解决:

请求应该去哪?

例如:

/user/** 发送给 user-service

组合起来:

前端 | ↓ Gateway | ↓ 查询 Nacos | ↓ 找到 user-service | ↓ 用户服务

九、企业常见微服务架构

实际项目中经常看到:

用户 | ↓ Gateway网关 | ↓ Nacos | ------------------------------------------------ 用户服务 商品服务 订单服务 | ↓ MySQL Redis

技术组合:

Spring Boot Spring Cloud Spring Cloud Alibaba Nacos Gateway Feign Redis MySQL

十、作为前端为什么需要了解?

虽然前端不会直接开发 Nacos。

但是日常开发经常会遇到:

1. 接口为什么404?

可能:

Gateway路由错误。

2. 后端服务为什么调用失败?

可能:

Nacos没有注册。

3. 测试环境接口为什么突然变化?

可能:

配置中心修改。

4. 为什么所有接口都是/api开头?

因为:

Gateway统一入口。


总结

微服务里面:

Nacos

负责:

服务注册 服务发现 配置管理

一句话:

告诉系统“服务在哪里”。


Gateway

负责:

统一入口 请求路由 权限校验 限流 日志

一句话:

决定“请求应该去哪里”。


最终关系:

Nacos 服务注册中心 ↑ | 前端 → Gateway → 微服务

理解:

Nacos 管服务,Gateway 管请求。

掌握这两个组件,基本就能看懂大部分企业 Spring Cloud 微服务项目的整体架构。

http://www.jsqmd.com/news/1371457/

相关文章:

  • 工商管理专业,哪些证书真的值得咬牙一考?一份难度与含金量梯队解析
  • 2026西安防水补漏避坑指南 细数五大常见陷阱帮你少花冤枉钱 - 冠盾建筑修缮
  • LangGraph 从零搭建 AI Agent:状态图 + 工具调用 + 多步推理,一个真实案例讲透
  • Python+Django构建文本情感分析系统的实践指南
  • 5分钟免费上手!BOTW存档编辑器终极使用指南
  • 感抗与容抗:从电磁感应到LC谐振的电路设计核心
  • 两联供系统品牌推荐:预算20-50万,不同梯队品牌如何匹配你的户型和需求?
  • 本地CTF靶场搭建与渗透测试实战指南
  • 深圳龙岗装修公司怎么选?初心装饰为何更适合旧房翻新 - GrowthUME
  • Unity性能优化:面数统计工具2.0的设计与实现
  • 2026国内最新暑校/修学分/转学分机构推荐!美国线上等地专业靠谱平台精选 - 十大品牌榜
  • 股份 50 对 50,干活却全靠你一个人?别让“兄弟情”变成搞垮公司的毒药 | 盈小蚁实操指南
  • Godot引擎在HarmonyOS 5.0上的性能优化:突破填充率瓶颈的批处理实战
  • 驭龙社徐一 带着学员把爱心送到广西受灾村民家门口
  • 滑动窗口算法:高效解决数组子区间问题
  • 无线网络安全深度解析:从airmon-ng监听模式到WPA2破解原理与防御策略
  • 跨端框架开发鸿蒙PC应用实战指南
  • 链式队列:从数据结构原理到C语言实现详解
  • 星露谷物语XNB文件终极解包打包秘籍:5分钟掌握游戏资源自由定制
  • 基于VC++6.0与OpenCV1.0的摄像机标定工具:原理、实现与工程实践
  • 在选电磁流量计供应商,国产里口碑比较好的是哪几家? - 仪表人小余
  • Windows 11纯净安装全攻略:从官方镜像到系统加固,打造极致稳定环境
  • AI论文工具完全指南:从语法纠错到查重降AI,这一篇承包你的全部痛点
  • 智能门锁避坑指南2026:格行/鹿客/华为横评——3D人脸vs半导体指纹vs掌静脉,谁才是普通家庭真标杆?
  • 我找了份月薪 7 万的 FDE 工作,结果进厂贴了一天二维码?!
  • 电容三大核心作用详解:储电、滤波与耦合的电路设计与选型指南
  • 广州越秀公司一般注销公司口碑好测评推荐:广州服务机构实力盘点与挑选攻略 - GrowthUME
  • 深入解析AI Agent系统提示词构建:模块化设计与工程实践
  • Git Squash在 IDEA 中精准多选并 Squash
  • 基于AI与FFmpeg的自动化视频剪辑方案:从自然语言到批量处理