Lazy loaded image
网关项目demo01丨LLM Access Gateway:我的网关不止做API转发
Words 1200Read Time 4 min
2025-11-12
type
Post
status
Published
date
Nov 12, 2025
slug
gateway001
summary
tags
gateway
category
icon
password
我一开始也以为,网关大概就是把 provider 接进来,再给一层统一 API。
如果我当时就停在这里,后面很容易把 stream 中断后要不要补救、tenant usage 该怎么算、provider 挂了以后还要不要继续打这些事,继续丢回业务侧自己兜。
再往下看我才发现,接上只是第一步。真正会卡住我的,是 stream、租户治理、故障处理和观测到底该算谁的责任。这个判断也不是我坐在白板前先想出来的,而是被一个很具体的坑逼出来的。
比如流式请求一旦已经吐出首 chunk,后面上游再断,你就不能再偷偷切另一个 provider 把这条流补完整了。客户端已经看到了这条流,再切 provider,本质上就是把两条不同上游的输出拼成一次“看起来成功”的响应。我第一次意识到这不是个简单转发层,就是卡在这里。
只要多个应用开始通过同一层访问模型,这层就已经不只是转发器了。治理、stream 边界、故障处理和观测都得在这里收口。

我先把中间这一层说清

LLM Access Gateway 位于调用方和模型服务 provider 之间。
它至少要负责:
  • 接住请求,识别租户,把治理先卡在入口
  • 向后代理 non-stream / stream 响应,把使用量、健康状态和观测信号一起收回来
关键不在中间多了一层,关键在这套事不能再散在各个业务里各自处理。

我就是从 stream 这件事开始确认:这层不能只做转发

我后来真正转变想法,就是卡在 stream 上。
首个 chunk 发给客户端之前,网关还能回退到别的 provider。首个 chunk 一旦发出去,这次响应就已经开始生效了。后面上游再断,网关只能继续转发,或者把中断暴露出来。再切 provider,这次调用的语义就变了。
这件事让我把这层重新看了一遍。provider 接入、tenant、fallback、/readyz、trace 这些都不是后面再补的装饰功能。只要多个应用共用这一层,这些责任就得一起收回来。
这一节只回答一个问题:如果这层不只是转发器,它到底要自己兜住什么。
问题
这层要自己兜住的责任
provider 接入
统一 provider 差异,不把接入逻辑散落在业务里
stream
处理 SSE、chunk flush、TTFT 和中断边界;stream fallback 只能发生在首 chunk 之前
多租户治理
API Key、tenant、RPM / TPM、budget、usage
故障处理
retry、fallback、provider health、cooldown、/readyz、/debug/providers
工程化
request_id、trace_id、structured logs、metrics、benchmark、failure drill、交付
具体代码和运行时证据,我会放到后面的文章里慢慢展开。001 先把责任边界说清:只要这层开始承接多个应用的模型调用,它就得自己兜住请求语义、治理和故障处理。

再往下做,这些责任最后会收成 6 层

这 6 层不是我一开始画好的图,也不是 001 这一篇就要证明完的能力清单。
它更像是我后面一点点确认下来:如果这层真的要成立,这些责任绕不过去,最后都得留在这层里面。
后面会一篇篇做实的责任
API Contract
OpenAI-compatible 入口:POST /v1/chat/completions、GET /v1/models、GET /v1/usage
Provider Adapter
request shape、model mapping、error response、non-stream / stream normalization
Streaming Proxy
chunk flush、TTFT、client disconnect、pre-first-chunk fallback、post-first-chunk interruption
Tenant Governance
API Key、tenant principal、RPM / TPM、token budget、usage tracking
Routing / Resilience
primary / secondary backend、retry、fallback、provider health、cooldown、/readyz
Observability / Delivery
request_id / trace_id、structured logs、metrics、Docker Compose、Kubernetes、benchmark、failure drill

后面的文章,会把这些责任一件件落实

这篇 001 先把主线说清楚。后面的文章会沿着这条线,把接入链路、tenant 治理、fallback、/readyz、trace 和真实上游验证这些责任一件件落实。

总结

网关除了API转发之外,还需要做到请求语义、租户治理、故障处理和观测等功能
 
回到首页