从 Nginx 到 Gateway 再到微服务:一次 AI 请求的完整链路

在 Spring Cloud 项目中接入 AI 服务以后,一个前端请求通常不会直接进入 ChatController。真正的调用过程可能同时经过 Nginx、Gateway、服务发现、AI Service 和模型 Provider。

一、AI 请求的整体调用链路

一个常见的微服务 AI 系统可以抽象为:

浏览器 → Nginx → Gateway → AI Service → ChatClient → Model Provider

用户首先访问统一域名 ,例如 api.example.com/ai/chat。域名解析到服务器后,请求进入 Nginx。Nginx 根据域名和路径规则把请求转发给 Gateway;Gateway 再根据 Route 判断请求应该进入哪个微服务。如果目标 URI 使用服务名,Gateway 会结合注册中心找到实际运行的服务实例。AI Service 接收到请求以后完成业务处理,并通过 ChatClient 调用外部模型。

模型响应返回时沿相反方向传递:

Model Provider → AI Service → Gateway → Nginx → Browser

因此,Nginx、Gateway 和服务发现并不是三个孤立的知识点。它们共同完成了一件事:让一个外部请求能够准确进入内部目标服务。


二、Nginx 的外部入口职责

Nginx 通常位于整个系统的最外层,负责接收浏览器发来的 HTTP 或 HTTPS 请求。它可以统一管理域名、TLS、静态资源和反向代理,对微服务系统来说,最重要的作用是隐藏内部服务地址,并提供统一入口。

典型配置可以简化为:

nginx 复制代码
server {
    listen 80;
    server_name api.example.com;
location / {
    proxy_pass http://gateway;
}
}

浏览器只知道 api.example.com,并不知道 Gateway 的具体 IP,更不知道后面的 AI Service 部署在哪台服务器上。Nginx 收到请求后,根据 server_name 和 location 找到对应代理规则,再通过 proxy_pass 把流量送入内部系统。

因此,如果浏览器根本无法访问统一域名,或者请求没有进入后端,排查通常应该先从 DNS、端口、Nginx Server 和 Location 配置开始,而不是直接检查 AI 业务代码。


三、Gateway 的内部路由职责

请求进入微服务系统 以后,Gateway 开始决定它应该进入哪个服务。Gateway 中一条 Route 通常由目标 URI、Predicate 和 Filter 组成。

例如:

yaml 复制代码
spring:
  cloud:
    gateway:
      routes:
        - id: ai-service
          uri: lb://ai-service
          predicates:
            - Path=/ai/**
          filters:
            - StripPrefix=1

当外部请求为 /ai/chat 时,Path=/ai/** 负责判断该请求属于 AI 服务(类似于IF条件)。StripPrefix=1 会在转发前删除 /ai,因此真正到达下游 Controller 的路径可以是 /chat。

lb://ai-service 表示 Gateway 面向的是一个逻辑服务名,而不是固定 IP。服务发现组件负责维护 ai-service 当前有哪些实例,负载均衡再选择其中一个实例完成转发。

因此,新增一个 AI 微服务以后,仅仅把服务启动起来并不够。它还需要正确注册到服务发现体系,并拥有能够被 Gateway 命中的路由规则。


四、AI Service 到模型 Provider 的业务链路

请求成功进入 AI Service 后,才真正开始 AI 应用内部的处理。Controller 负责接收 HTTP 参数,Service 负责组织业务逻辑,ChatClient 或其他模型客户端负责向模型 Provider 发起调用。

链路可以继续展开为:

用户请求 → Controller → Chat Service → Memory / RAG / Tool → ChatClient → Model Provider

这一层出现的异常已经与入口路由不同。例如鉴权失败、Session 不存在、RAG 检索异常、Tool 执行失败、模型 API Key 无效或 Provider 超时,都可能导致最终请求失败。

因此,一个 HTTP 500 并不能直接说明 Gateway 出现故障。Gateway 可能已经成功把请求送入 AI Service,真正的异常发生在后面的 Service、数据库或模型调用中。判断问题位置需要结合网关日志和业务服务日志继续确认。


五、基于调用链的逐层排查方法

前端出现"接口没有返回"时,比较稳定的方法是从最靠近用户的位置开始检查,然后沿调用链逐层向下。

第一步查看浏览器 Developer Tools 的 Network ,确认 Request URL、Method、Status Code、Authorization 和 Response。请求如果根本没有发出,应先处理前端问题;401、403 更可能与认证有关;404 通常需要检查路径和路由;502、504 往往需要继续检查代理和下游服务状态。

第二步确认请求是否进入 Nginx 。可以通过 Access Log 判断域名和路径是否命中了正确 Server 和 Location。

第三步检查 Gateway 是否匹配到目标 Route,并确认 Filter 处理后的最终路径 。尤其存在 StripPrefix、RewritePath 等 Filter 时,外部 URL 与下游 Controller 路径可能并不相同。

第四步检查服务发现。确认目标服务已经注册、实例健康,并能够被 Gateway 正常访问。

第五步进入 AI Service,通过 Controller、Service 和模型调用日志继续向下定位。如果 Controller 已经收到请求,问题范围实际上已经从"网络与路由"缩小到了业务服务内部。

这种排查方式的核心是:每经过一层,都寻找一个能够证明请求已经到达该层的证据,再继续检查下一层。


六、流式 AI 请求的特殊问题

AI 对话经常使用 SSE 流式输出,这类请求与普通 REST 接口存在一个明显区别:HTTP 连接会持续较长时间。

因此,即使普通接口能够正常通过 Nginx 和 Gateway,流式请求仍可能受到代理缓冲、读取超时或连接提前关闭的影响。例如 AI Service 已经逐块产生 Token,但 Nginx 对上游响应进行了缓存,用户看到的效果就可能变成"等待很久后一次性出现全部内容"。

排查时需要分别确认 AI Service 是否持续产生数据,以及 Nginx、Gateway 是否及时向下游转发。HTTP 200 也只能说明 SSE 连接已经成功建立,模型仍可能在后续生成过程中超时或发生异常。


七、调用链可观测性的补充

当系统进一步复杂后,可以通过 Trace ID 把 Gateway、AI Service、RAG、Tool Calling 和模型调用关联起来。这样一次请求出现异常时,可以从入口 Trace 开始观察请求在哪个阶段耗时最长或发生失败。

不过 Trace 属于定位能力的增强,并不会改变基础排查逻辑。最重要的仍然是先建立清晰的请求路径,再让日志和 Trace 围绕这条路径提供证据。


八、总结

一次典型的微服务 AI 请求会依次经过 Nginx、Gateway、AI Service 和 Model Provider。Nginx 负责外部统一入口,Gateway 负责内部路由与服务选择,AI Service 承担真正的业务编排,模型 Provider 完成最终推理。

理解这条链路以后,接口排查就可以按照同样的顺序进行:先确认浏览器请求,再确认 Nginx 转发、Gateway 路由、服务实例、Controller 和模型调用。相比直接进入业务代码猜测异常原因,这种沿调用链逐层寻找证据的方法更加稳定,也更适用于真实微服务系统。

参考资料:

Spring Cloud Gateway Reference

Spring Cloud Gateway :: Spring Cloud Gateway

Spring AI Reference --- Chat Client

Chat Client API :: Spring AI Reference

Spring AI Reference --- Observability

Observability :: Spring AI Reference

相关推荐
小匠石钧知1 小时前
07_在k8s集群中安装ingress-nginx
nginx·容器·kubernetes·ingress
Thomas.Sir3 小时前
第19课:Gateway过滤器、全局拦截、请求响应统一处理
spring cloud·gateway
百度一下吧13 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
数据狐(Datafox)13 小时前
淘宝图片搜索 API 落地实战:基于以图搜货搭建跨境电商选品系统
java·大数据·微服务
Joy T17 小时前
Spring AI 接入已有 Java 项目的三种架构设计
java·人工智能·springai·ai入门·chatclient·ai service·ai能力接入
JAVA面经实录9171 天前
Java高级后端 · 全套面试通关手册(Nginx)
java·nginx·面试
Thomas.Sir1 天前
第18课:Gateway路由规则、内置谓词、自定义谓词实战
spring cloud·gateway
lpfasd1233 天前
WinSW在Win7上失败真相-实测与修复
windows·nginx
2601_962177303 天前
2026年AI API Gateway怎么选?我整理了6种方案的费用、稳定性和适用场景
网络·人工智能·深度学习·gateway