
> 本篇为系列开篇,目标是站在"上帝视角"把整套系统的骨架讲清楚:为什么要用网关统一收口大模型接口、Nacos 在架构里到底扮演什么角色、请求从客户端到模型服务到底走了哪些节点。读完后你应当能在白板上画出一张完整的架构全景图,并理解后续 4 篇为什么按"Gateway 原理 → 断言过滤器 → 多接口收口 → Nacos 配置治理"的顺序展开。
1. 为什么需要网关统一收口大模型接口

在微服务架构里,"大模型能力"往往是后期接入的一批新接口,而不是一开始就规划好的标准业务服务。很多团队的早期做法,是让前端/客户端直接去调用各个模型服务:调用 OpenAI 兼容接口的、调用本地 vLLM 推理服务的、调用内部自研问答服务的,分散在各个前端项目里写死地址、写死鉴权头、写死重试逻辑。
这种"各自为战"的接入方式,在大模型场景里会迅速暴露出三个致命问题。
1.1 多模型、多供应商带来的接入碎片化
真实生产环境里,一个公司很少只用一个模型。典型组合是:GPT 类闭源模型负责通用问答、开源 Qwen/DeepSeek 本地部署负责私有数据问答、Embedding 模型负责向量化、Rerank 模型负责召回重排。如果每个前端都去直连,那么模型地址变更、密钥轮转、超时调整,都要改动几十个前端仓库。
网关收口后,所有模型调用都先到网关,再由网关按规则转发。前端只认一个统一入口,模型侧的任何变化对调用方透明。
1.2 大模型接口的"非标准"特征要求统一治理
大模型接口有几个很特殊的工程特征,天然适合放在网关层统一处理:
- **长连接 / 流式响应**:SSE(Server-Sent Events)和分块传输(chunked)需要网关正确透传,很多传统网关默认会缓冲响应体导致流式失效。
- **高 token 成本**:需要统一的配额、计费、限流,避免单个业务把额度打爆。
- **高延迟与易超时**:一次推理可能 10 秒以上,网关的默认 3 秒超时必须重新配置。
- **敏感密钥**:API Key 绝不能下发到前端,必须在网关侧注入。
这些横切关注点(cross-cutting concerns)如果散落在各前端,治理成本指数级上升。
1.3 统一鉴权、限流、审计的天然边界
网关是"请求进公司的第一道门"。把鉴权、限流、审计、灰度、灰度发布全部收敛到网关,意味着业务服务可以纯粹地关注"怎么把模型调好",而不用每个服务都重复实现一遍安全逻辑。
2. Nacos 在架构中的角色定位

很多同学会问:网关本身就能写路由配置,为什么还要引入 Nacos?关键在于"动态治理"。
2.1 配置中心:让网关配置"活"起来
Spring Cloud Gateway 的路由传统上写在 `application.yml` 里。一旦要新增一个模型路由、调整某个权重、下线一个废弃接口,就得改代码、重新打包、重新发布网关。在大模型接口频繁变化的场景下,这是不可接受的。
把路由配置、限流阈值、模型地址、密钥(加密后)放到 Nacos 配置中心后,运维在 Nacos 控制台上改一条配置,网关通过监听机制**秒级热更新**,无需重启。
2.2 服务发现:让模型实例"自动"出现在路由里
当模型服务以多实例部署(例如 3 个 vLLM 节点),Nacos 作为注册中心,能让网关通过服务名 `lb://model-service` 自动做负载均衡,而不用手写每个实例 IP。
2.3 配置与发现的统一
Nacos 同时是配置中心 + 注册中心,这意味着"模型服务上线 / 下线"和"网关路由怎么分"这两件事可以用同一套元数据联动,避免了引入两套中间件(如 Apollo + Eureka)的复杂度。

3. 整体分层架构设计

我们把整系统从外到内切成五层,每一层职责单一、边界清晰。
3.1 接入层(Client 层)
包含 Web 前端、移动端 App、第三方合作方、内部其他微服务。它们只看到统一网关域名 `gateway.example.com`,不关心背后是哪家模型。
3.2 网关层(Gateway 层)
Spring Cloud Gateway 集群,承担:
- 统一入口与 TLS 终止
- 路由断言(判断请求该去哪)
- 过滤器链(鉴权、限流、密钥注入、日志、熔断)
- 流式透传(SSE / chunked)
- 动态配置热更新(对接 Nacos)
3.3 治理层(Nacos 层)
提供配置管理与服务发现,是网关的"大脑"。网关启动从这里拉配置,运行时从这里监听变更。
3.4 模型服务层(Model 层)
各类模型服务,按能力分域:
- 通用对话模型(OpenAI 兼容 / 本地推理)
- Embedding / Rerank 模型
- 多模态(视觉、语音)模型
- 自研业务模型
3.5 支撑层(Observability 层)
链路追踪(SkyWalking / OTel)、监控(Prometheus + Grafana)、日志(ELK)。虽然不在本系列主线,但架构设计时必须预留接入点。

3.6 关键设计原则
|
原则 |
说明 |
反例 |
|
— |
— |
— |
|
单一入口 |
所有模型调用都过网关 |
前端直连模型服务 |
|
配置外置 |
路由/阈值存 Nacos |
硬编码在 yml |
|
无状态网关 |
网关不存会话状态 |
网关本地缓存用户上下文 |
|
失败快速 |
超时/熔断默认开启 |
无限等待模型响应 |
|
可观测 |
全链路埋点 |
出问题只能看模型日志 |
4. 一次完整请求的端到端数据流
下面以"用户在前端发起一次流式对话"为例,追踪请求走过的每一个节点。
4.1 时序拆解
4.2 关键时延点
大模型请求最慢的环节通常是模型推理本身(数百毫秒到数十秒)。网关层要做的不是"加速推理",而是确保:不因为自己的缓冲/超时把流打断,并且能在模型超时时快速失败并回退到备用模型。

5. 传统直连方案与网关收口方案对比
为了量化网关收口的价值,我们从六个维度做对比。
5.1 六维对比表
|
维度 |
传统直连方案 |
网关统一收口方案 |
|
— |
— |
— |
|
模型地址变更 |
改所有前端,发布 N 次 |
改 Nacos 1 处,网关热更新 |
|
密钥安全 |
Key 可能下发前端,泄露风险高 |
Key 只在网关注入,前端无感知 |
|
限流/配额 |
各端自理,难以全局管控 |
网关统一限流,全局配额 |
|
流式透传 |
需每个前端处理 SSE |
网关统一正确透传 |
|
灰度/AB |
几乎无法做 |
按 header/权重路由,天然支持 |
|
审计/监控 |
分散、缺失 |
入口统一采集,全链路可观测 |
5.2 形象化对比
下图左侧是"星形直连"的乱象:N 个前端连 M 个模型,连接数是 N×M;右侧是"网关收口"的清爽结构:连接数降为 N+M,且所有治理逻辑集中在一点。

6. 本系列后续篇章路线图
理清全景后,后续的 4 篇会按"由内到外、由静态到动态"的顺序展开:
7. 落地前的架构演进建议与踩坑清单
7.1 演进建议
不要一上来就追求"完美架构"。推荐三步走:
- **第一步**:单网关 + 静态路由,先跑通一个模型接口。
- **第二步**:接入 Nacos,把路由配置外置,实现热更新。
- **第三步**:补齐鉴权、限流、灰度、可观测,形成生产级方案。
7.2 常见踩坑清单
- **坑一:网关缓冲了流**。默认某些配置会缓冲响应体,导致 SSE 失效。务必显式关闭响应缓冲。
- **坑二:超时过短**。大模型推理动辄十几秒,网关默认 3 秒超时务必调大。
- **坑三:Key 下发前端**。这是安全事故,必须网关注入。
- **坑四:Nacos 配置改错导致全路由失效**。务必做好配置版本管理与回滚。
- **坑五:网关单点**。生产必须多实例 + 前置 LB,否则网关挂了所有模型调用全断。
7.3 小结
本篇我们建立了"网关统一收口 + Nacos 配置治理"的整体心智模型:网关是门,Nacos 是大脑,模型是后院。后续每一篇都是在这个骨架上长肉。下一篇,我们正式动手把 Spring Cloud Gateway 跑起来。

