Obi Madu 的博客
返回所有文章
AI EngineeringSystem DesignBackend

LiteLLM 与 Bifrost:如何选择 AI 网关

对 LiteLLM 基于 Python 的分布式状态和 Bifrost 基于 Go 的原始性能的实用对比,帮你选择一个 AI 网关。

LiteLLM 与 Bifrost:如何选择 AI 网关

选择生产环境用的 AI 网关时,盯着功能矩阵和基准测试图表看很诱人。但选对网关不是回答"哪个工具功能更多?"而是回答"哪个工具的架构支持我产品的分布式现实?"

两个领先的开源 AI 网关是 Bifrost(来自 Maxim)和 LiteLLM。它们代表不同的架构哲学。基于我们之前对使用 Bifrost 进行密钥池化LiteLLM 的分布式 Redis 架构的深入分析,让我们直接对比它们,决定哪一个适合你的基础设施。

性能 vs. 实用性

先从原始速度说起。

Bifrost 用 Go 写成,使用 FastHTTP 引擎。它精简、并发、快。基准测试持续显示它在原始代理吞吐量和内存效率上大幅领先 LiteLLM。

LiteLLM 用 Python 写成,带着该语言固有的开销。它用 FastAPI 和 asyncio,能力不错,但无法匹配 Go 逐字节的代理速度。

但这里有一个关键的工程问题:当上游 LLM 生成需要 3 到 10 秒时,网关 10ms 的延迟差异有意义吗?

对绝大多数 AI 应用来说,相比模型推理时间,代理开销只是个舍入误差。往往,状态管理和横向扩展的灵活性胜过原始代理速度。

状态管理哲学

这些网关之间真正的差异在于它们如何管理运行时状态,特别是提供商密钥、虚拟密钥、速率限制和预算。

Bifrost:"智能孤立节点"

Bifrost 设计用于极端的单节点性能。为实现这一点,它把配置(密钥、预算、路由规则)从 Postgres 数据库加载到本地内存。一旦初始化,节点很少回连数据库做验证。

  • 优点: 路由快,因为内存查询几乎零成本。
  • 缺点: 在 OSS 版本里,如果你运行三个 Bifrost 节点,它们之间不会同步本地内存。这意味着虚拟密钥和预算在你的集群里会断裂。要解决这个问题,你必须购买企业许可证来解锁它们定制的 RAFT 共识算法。

LiteLLM:"分布式执行器"

LiteLLM 假定它会被部署在横向扩展的集群里。它把状态管理完全委托给外部、专门的系统。

  • 优点: 因为它重度依赖 Redis(用于热计数器/速率限制)和 Postgres(用于持久虚拟密钥/预算),你可以运行任意多的 OSS LiteLLM 节点。它们都会保持同步。
  • 缺点: 架构依赖更高(你必须运行 Redis 和 Postgres),每个请求的延迟略高,因为有到这些数据存储的网络跳。

预算边界测试

要做出明智的决定,你必须应用预算边界测试这个网关能否安全地把虚拟密钥当作多个 OSS 节点上一个用户的硬性预算边界?

Bifrost OSS 通不过这个测试。 当跨多个实例使用 Postgres config_store 时,运行时状态是节点本地的。一个用户向不同节点发送并发请求,可以绕过预算,因为这些节点不会把它们的支出实时上报到一个共享账本。

LiteLLM 通过这个测试。 Postgres 和 Redis 被集成进它的开源多实例设计。节点 A 检查过的预算会更新到 Redis,这样节点 B 在一毫秒后就能看到已消耗的配额。

最终结论(决策矩阵)

没有客观上"最好"的网关。只有针对你特定架构约束最好的网关。

选择 Bifrost,如果:

  • 你运行单个垂直扩展的大型节点。
  • 你的团队偏好严格的 GitOps,通过静态 config.json 文件而不是动态数据库来准备密钥。
  • 你有企业集群的预算,想要绝对最低的代理延迟。
  • 你想要内置的 MCP(Model Context Protocol)网关功能。

选择 LiteLLM,如果:

  • 你需要在开源层级上真正的横向扩展。
  • 你依赖通过 API 动态生成每个用户或团队的虚拟密钥。
  • 你需要严格的、全局协调的每用户预算和速率限制。
  • 你偏好 Python 生态用于自定义代理回调和集成。

如果你的网关负责保护你的钱包,同步比速度更重要。在最后一篇文章里,我们会看设计一个全球 AI 配额系统的终极蓝图