有了 Nacos 为什么还要网关
一句话核心
Nacos 管"服务之间怎么找到彼此"(内部),网关管"外部请求怎么进来"(入口),两者职责互补,不可替代。
职责对比
| 维度 | Nacos | 网关 |
|---|---|---|
| 定位 | 服务注册与配置中心 | 系统统一入口 |
| 流量方向 | 东西向(服务 ↔ 服务) | 南北向(客户端 → 服务) |
| 面向对象 | 内部微服务 | 外部客户端(App/Web/第三方) |
| 是否对外暴露 | 否,内部组件 | 是,必须对外 |
| 核心能力 | 服务发现、动态配置、健康检查 | 路由转发、鉴权、限流、熔断、日志 |
Nacos 能做什么
- 服务注册与发现(服务 A 找到服务 B 的 IP:端口)
- 统一配置管理(动态推送配置变更)
- 权重、元数据管理(灰度、环境标记)
❌ Nacos 不接收浏览器/App 的 HTTP 请求,不做鉴权、限流、SSL
网关能做什么
- 路由转发:
/api/order/**→ 订单服务 - 鉴权认证:统一 Token 校验,微服务无需重复写
- 限流熔断:保护后端不被打垮
- 横切能力:SSL、跨域、日志、监控、黑名单、灰度发布
- 依赖 Nacos:从 Nacos 拿到微服务实例列表决定转发目标
通俗类比
微服务集群 = 一栋写字楼
- Nacos = 内部通讯录:部门之间办事查通讯录找房间,但不能接待外来访客
- 网关 = 前台保安:所有外来访客必须先过前台,验证身份后才放行到对应部门
如果没有网关会怎样
- 安全裸奔:每个微服务都要暴露到公网,还要各自实现鉴权,重复且易漏
- 前端痛苦:必须知道每个微服务的地址,服务重构就崩
- 横切逻辑分散:限流、日志、灰度散落各处,无法统一治理
架构关系
客户端 → 网关(鉴权/路由/限流)→ 微服务集群
↓ ↑
Nacos(注册发现 + 配置)1
2
3
2
3
结论:Nacos 解决"内部服务怎么协作",网关解决"外部流量怎么受控进入",两者配合才是完整的微服务架构。