继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

我们为什么用Rust打造AI网关:一个重性能的决定

拉丁的传说
关注TA
已关注
手记 617
粉丝 126
获赞 789

在构建我们的AI网关时,我们知道性能将是关键因素之一。与大多数用Python编写的AI软件不同,AI网关充当用户和推理引擎之间的代理层。这个网关必须高效地处理高并发请求低延迟响应大数据量。虽然Python在AI生态系统中占主导地位,但在这些需求下,它因为存在运行时开销并发限制而难以满足要求。

为了展示我们为什么选择了Rust,我们对三种流行的编程环境——RustPython,和JavaScript(Node.js)——进行了性能测试,以评估它们在高负载条件下的表现。结果表明,Rust 显示出明显的优势,即使在大规模应用下也能保持一致且稳定的性能表现。

基准设定:模拟真实世界中的AI交通流量

我们搭建了一个HTTP/2 流媒体服务器和相应的客户端,用来模拟实际的人工智能任务。这里是如何运作的:

服务器:

  • 按流每令牌间隔25毫秒传输令牌,类似于AI推理引擎的输出。

  • 使用 HTTP/2 将 tokenized 数据高效地传递到多个客户端。

  • 实现了异步编程功能,来支持成千上万的并发连接数。

对方:

  • 最多可逐步建立15,000个同时在线连接与服务器的连接。

  • 测量令牌间延迟——即服务器发送的连续令牌之间的时间。该指标反映了服务器在负载增加时的处理能力。

  • 确保连接稳定,并记录每个连接的延迟情况。

测试流程:

  1. 服务器是用 RustPythonJavaScript (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 的延迟,这表明它的可扩展性。其几乎线性的延迟增长使其成为高并发系统的理想之选。

  1. 无需妥协的并行性:

Rust的异步编程模型(例如Tokio)可以高效管理数千个并发连接。与Python不同,Rust没有全局解释器锁 (GIL) 的瓶颈,并且能够充分利用系统资源,从而提高性能。

  1. 资源利用效率:

Rust 直接编译成机器码,确保极低的运行时开销。它的零开销抽象实现了可预测和高效的资源管理。

  1. 底层控制:

Rust 对线程与内存拥有细粒度控制,使其成为像 AI 网关这样的性能关键应用的最佳之选。

为什么Python和JavaScript不够好

  1. 编程语言Python:

并发限制:GIL 阻止了真正的多线程,导致在高负载情况下出现严重瓶颈。

运行时开销:Python的解释执行的特性导致了明显的延迟,因此不适用于对延迟敏感的应用。

指数级增长:随着连接数增加,Python的性能急剧恶化,导致延迟已经超出可接受范围。

  1. 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]:被测系统

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP