glide
云原生 LLM 网关,支持多供应商统一路由、自动故障转移与智能重试,用 Go 语言实现高性能 Gen
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
云原生 LLM 网关,支持多供应商统一路由、自动故障转移与智能重试,用 Go 语言实现高性能 Gen
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
凌晨两点,你的 AI 客服系统突然全面瘫痪。用户涌入投诉,工单爆炸,值班工程师从被窝里爬起来排查——结果发现只是 OpenAI 的 API 在凌晨维护窗口限流了。如果你的应用直接硬编码调用了某个 LLM 提供商,这个单点故障就会像多米诺骨牌一样传导到整个系统。
Glide 正是为了解决这类问题而生。它是一个用 Go 语言编写的云原生 LLM 网关(Model Gateway),部署在应用和各大 LLM 提供商之间,用统一 API 接管所有外部模型通信,让你的应用彻底解耦于任何单一供应商。

图1:Glide 项目 Logo
Glide 起源于 EinStack 团队在构建 GenAI 应用过程中的真实需求。在内部 Hackathon 中,团队需要快速迭代多个 AI 功能,而这些功能频繁切换模型——今天用 GPT-4,明天想换成 Claude,后天想在 AWS Bedrock 上跑。直接改代码意味着每次切换都要改动多个服务,测试成本极高。
于是他们花了两周时间,构建了一个内部工具来处理"统一模型路由"的脏活累活:供应商切换、API Key 管理、请求重试、限流处理。这个工具在内部被验证有效后,团队决定将其开源,Glide 由此诞生。
用生活中的例子来理解 Glide:它就像一个专业的外卖调度中心。餐厅(应用)只需要告诉调度中心"我要一份中餐",而不必关心这份中餐是从哪家店出餐、由哪个骑手配送、遇到了什么交通状况。调度中心负责在多个备选方案中自动选择最优路径,出了问题还能自动切换。
对 GenAI 应用来说,这意味着:
供应商无关性(Vendor Agnostic):一个统一接口调用 OpenAI GPT-4、Anthropic Claude、AWS Bedrock、Cohere、Ollama(本地模型)等多种模型,无需在业务代码中写任何提供商特定逻辑。换模型就像换个配置文件,改一行 YAML 即可。
高可用路由:Glide 内置了语言模型路由器(LangRouter),实现了权重路由 + 健康检查 + 错误预算(Error Budget)三重保障。路由器会实时监控每个模型实例的健康状态,一旦某个模型触发错误预算上限,立即自动切换到备用模型,整个过程对应用透明。
智能重试机制:内置指数退避(Exponential Backoff)重试逻辑,面对瞬时网络抖动、API 限流等短暂故障,Glide 不会立即报错,而是按照预设策略自动重试,最大限度降低失败率。
统一流式响应:非流式 Chat 和流式 Chat(Streaming)均支持,通过 Channel 机制将模型返回的增量 token 以 chunk 形式实时推送回客户端。
从代码层面看,Glide 的架构清晰而优雅,采用模块化设计,每个功能域独立成包。核心包结构如下:
| 包 | 职责 | 关键技术 |
|---|---|---|
pkg/gateway.go | 网关生命周期管理 | Goroutine + Signal 优雅退出 |
pkg/routers/ | 模型路由与重试策略 | 权重路由 + Error Budget + 指数退避 |
pkg/providers/ | 各 LLM 提供商客户端 | OpenAI/Anthropic/Azure/Cohere/Bedrock/Ollama |
pkg/api/ | HTTP API 层(Fiber) | Go Fiber v2.52 高性能 Web 框架 |
pkg/telemetry/ | 可观测性 | OpenTelemetry + Zap 日志 |
pkg/config/ | 配置管理 | YAML 配置热加载 |
Glide 使用 Go Fiber(版本 2.52.2)作为 HTTP 框架。Go Fiber 是一个受 Express.js 启发的 Go Web 框架,以极低的内存占用和极高的吞吐量著称,官方 benchmarks 显示其性能比标准库 net/http 快 10 倍以上。这对于网关类应用至关重要——Glide 必须"隐身"于请求链路中,不能成为性能瓶颈。
在 pkg/gateway.go 中,Gateway 结构体持有配置提供者、遥测组件和服务器管理器。启动时加载配置,然后依次启动 OpenTelemetry 仪表化和 HTTP 服务器,最后监听系统信号(SIGTERM/SIGINT)以实现优雅关闭(Graceful Shutdown)。
pkg/routers/router.go 中的 LangRouter 是 Glide 的核心。它维护两个路由池:chatModels(非流式)和 chatStreamModels(流式),每个池内包含多个已配置的语言模型实例。路由过程采用迭代器模式,当某个模型返回错误时,路由迭代器自动跳过并尝试下一个模型。同时,重试迭代器管理重试次数和退避等待时间,两层迭代器嵌套确保在所有模型都不可用的情况下,系统会在退避等待后重新尝试健康检查。
pkg/providers/config.go 中每种模型配置只需要在对应 provider 字段中填入连接参数,initClient() 通过类型断言自动识别并初始化对应客户端。目前已支持 OpenAI、Anthropic Claude、Azure OpenAI Service、AWS Bedrock(Titan)、Cohere、OctoML 和 Ollama(本地模型)。每种 Provider 客户端封装了各自提供商的 API 细节,对上层路由逻辑完全透明。
pkg/telemetry/ 实现了完整可观测性栈:Zap 结构化日志(支持 JSON 格式供日志聚合系统解析)+ OpenTelemetry Metrics(主机和运行时级别)+ B3 传播(分布式追踪上下文)。compose.yaml 预置了完整可观测性基础设施:Jaeger(分布式追踪 UI)、VictoriaMetrics(时序数据库)、Grafana(指标可视化),只需加 --profile telemetry 即可启用。
Glide 的部署体验经过精心设计:克隆官方 demo 仓库后,执行 make init 自动创建 secrets 目录结构,填入 API Key 后执行 make up 即可启动完整环境。Dockerfile 采用多阶段构建:第一阶段在 golang:1.22.4-alpine 中编译,第二阶段将产物复制到 alpine:3.19 轻量级镜像,最终二进制仅约 20MB。镜像还提供 Ubuntu、Distroless(Google 安全镜像)和 RedHat UBI 三个变体。
Streaming Chat 支持不完整:OpenAI 和 Azure OpenAI 已支持流式响应,但 Anthropic Streaming Chat 仍为"coming soon"。重度依赖 Claude 流式输出的应用需要等待。
无原生 Web UI:配置通过 YAML 文件管理,生产环境建议配合配置管理工具或 GitOps 流程。OpenTelemetry 数据通过 Grafana 查看。
路由策略有限:目前仅支持基础权重路由,不支持成本优先、最小延迟或语义相似度路由,这些功能在 Roadmap 中。
Glide 映射了一个更大的趋势:LLMOps 基础设施正在快速成熟。随着 LLM 应用从实验走向生产,如何可靠地调用 LLM 和调用哪个 LLM 同样重要。Glide 的差异化在于 Go 语言原生的性能优势(相比 Python 实现的网关有显著的性能和内存效率优势)、纯开源无厂商锁定,以及从 make init 到 make up 的极致开发者体验。虽然目前 star 数为 159(相对年轻),但路线图清晰、代码质量高,是一个值得持续关注的潜力项目。
本文档基于 EinStack/glide 仓库 v0.0.1 版本(main 分支)分析生成。报告图片均已通过 HTTP 200 验证。