在构建我们的AI网关时,我们知道性能将是关键因素之一。与大多数用Python编写的AI软件不同,AI网关充当用户和推理引擎之间的代理层。这个网关必须高效地处理高并发请求、低延迟响应和大数据量。虽然Python在AI生态系统中占主导地位,但在这些需求下,它因为存在运行时开销和并发限制而难以满足要求。
为了展示我们为什么选择了Rust,我们对三种流行的编程环境——Rust,Python,和JavaScript(Node.js)——进行了性能测试,以评估它们在高负载条件下的表现。结果表明,Rust 显示出明显的优势,即使在大规模应用下也能保持一致且稳定的性能表现。
基准设定:模拟真实世界中的AI交通流量
我们搭建了一个HTTP/2 流媒体服务器和相应的客户端,用来模拟实际的人工智能任务。这里是如何运作的:
服务器:
-
按流每令牌间隔25毫秒传输令牌,类似于AI推理引擎的输出。
-
使用 HTTP/2 将 tokenized 数据高效地传递到多个客户端。
- 实现了异步编程功能,来支持成千上万的并发连接数。
对方:
-
最多可逐步建立15,000个同时在线连接与服务器的连接。
-
测量令牌间延迟——即服务器发送的连续令牌之间的时间。该指标反映了服务器在负载增加时的处理能力。
- 确保连接稳定,并记录每个连接的延迟情况。
测试流程:
-
服务器是用 Rust 、 Python 和 JavaScript (Node.js) 编写的,以确保公平的比较。
客户逐渐增加了活跃连接数,从少量开始,先逐渐增加到15000个。
收集了每种实现的令牌内延迟测量,用以评估在负载情况下的性能表现。
结果如下:Rust vs. Python vs. JavaScript (Node.js)
以下图表说明了随着并发连接数的增加的令牌内部延迟时间(以毫秒为单位):
主要观察:
-
Rust :一种编程语言
- Rust 展现了最稳定的性能,延迟随着连接数的增加几乎呈线性增长。
- 在 15,000 个连接 时,Rust 的每个 token 的延迟达到约 75毫秒,仅为基线 token 间延迟 25毫秒 的 3 倍。
-
Rust 的高效性突显了其在处理高并发时保持性能稳定的能力。
-
Python :
- Python 的内部令牌延迟呈指数级增长,超过了在15,000个连接时的200毫秒。
-
这种指数级的增长展示了Python在处理大规模并发和资源竞争时的内在局限性。
-
JavaScript(Node.js):
- Node.js比Python表现更佳,能够在保持低延迟的情况下支持最多7,500个连接,
然而,其性能开始显著恶化,当连接数超过这一点时,连接数达到15,000时延迟超过150毫秒(或150毫秒以上)。
- 这表明Node.js的事件驱动架构在中等并发时运行良好,但在极高的负载下则难以应对。
为什么 Rust 是搭建 AI 网关的最佳选择
1.: 可预测且可扩展的性能:
Rust 的能力在于它可以在 15,000 个连接下维持 75ms 的延迟,这表明它的可扩展性。其几乎线性的延迟增长使其成为高并发系统的理想之选。
- 无需妥协的并行性:
Rust的异步编程模型(例如Tokio)可以高效管理数千个并发连接。与Python不同,Rust没有全局解释器锁 (GIL) 的瓶颈,并且能够充分利用系统资源,从而提高性能。
- 资源利用效率:
Rust 直接编译成机器码,确保极低的运行时开销。它的零开销抽象实现了可预测和高效的资源管理。
- 底层控制:
Rust 对线程与内存拥有细粒度控制,使其成为像 AI 网关这样的性能关键应用的最佳之选。
为什么Python和JavaScript不够好
- 编程语言Python:
并发限制:GIL 阻止了真正的多线程,导致在高负载情况下出现严重瓶颈。
运行时开销:Python的解释执行的特性导致了明显的延迟,因此不适用于对延迟敏感的应用。
指数级增长:随着连接数增加,Python的性能急剧恶化,导致延迟已经超出可接受范围。
- JavaScript (Node.js):
事件驱动模型:Node.js 在中等并发场景下表现良好,但当同时连接数超过 7,500 时就会开始出现问题,在这种情况下。
资源竞争:虽然Node.js在处理异步I/O方面表现出色,但它不像Rust那样提供底层控制,导致在大规模部署时性能降低。
为什么AI网关需要以性能为中心
AI网关不仅是一个简单的中介,它在确保这些关键方面起着重要作用。
-
实时响应: 用户期望 token化的输出能尽快出现,所以低延迟至关重要。
-
可扩展性: AI网关需要处理成千上万乃至更多的同时连接,以支持大规模应用。
- 可靠性: 性能不稳定或连接断开会严重影响用户使用体验,降低应用程序的稳定性。
Rust 在这些方面都表现出色,提供 可预测且稳定的规模化性能,使其成为构建高性能 AI 网关的绝佳选择。
重点:Rust会是AI网关的未来
我们的基准测试结果显示,虽然Python和JavaScript(Node.js)都有自己的优点,但它们不适合用来构建高性能AI网关:
-
Python 在处理并发和运行时成本时存在问题,这导致延迟呈指数增长。
- Node.js 表现更佳,但在极高的负载下会表现出问题,因此在高并发场景中可能不可靠。
Rust 另一方面提供了 一致且可扩展的高性能表现,即使在 15,000个连接 也能保持低延迟。选择 Rust 作为我们的 AI 网关,我们建立了一个能够轻松应对现代 AI 应用程序需求的基础设施,使我们能够更轻松地处理各种任务。
如果你正在构建AI网关或任何性能关键的基础设施,Rust不仅仅是一个选择——它是解决方案。当每一毫秒都至关重要的时候,Rust就是确保你能迎难而上的语言。
[OOP]:面向对象编程
[CRUD]:创建、读取、更新、删除
[JVM]:Java虚拟机
[SUT]:被测系统