AWS Lambda 中的 Rust:冷启动速度提升三倍、内存需求降低至 25%
最近 AWS Re:Invent 大会的一场演讲表明,Rust 和 Severless 简直是绝配——在成本方面,Rust 的优势可能比 Python 高出好几倍。
Lambda 函数和巨大的运行时环境是一对糟糕的组合(注:这里指 JAVA 和 Python 这类编程语言,相比 Rust 对运行时环境有更高的要求)——因为比起原生代码,它不仅冷启动速度更慢,对内存的需求也会更高。但另一方面,许多开发者在使用 Java 和 Python 时会比使用 Rust 这种系统语言时的开发效率更高。
在 re:Invent 大会演讲中,来自以色列特拉维夫的云咨询公司 CloudEX 的工程师主管 Efi Merdler-Kravitz 解释道:你并不需要用 Rust 对 Python Lambda 函数进行彻底的重构。他举了一个例子:一个使用 python 编写的,列出 S3 的存储桶的 Lambda 函数。事实证明,AWS 的 Python SDK Boto3 模块十分臃肿,仅需要使用 Rust 替换掉原本依赖的 Boto3 函数,即使其它代码依然使用 Python,也能在成本和性能方面获得巨大提升。
使用 Rust 替换 Python 代码的关键是 PyO3,它提供了将 Rust 的代码嵌入到 Python 中的能力。Rust 代码中的属性(Attributes)将暴露为像是标准的 Python 接口一样的函数。
在 Merdler-Kravitz 展示的例子中,使用 Rust 替换一部分 Python 代码的结果是,冷启动速度提升了三倍,同时内存需求也大大降低。使用 1GB 内存时,Rust 和 Boto3 具有相似的性能表现,但当内存降至 256MB 时,使用 Rust 优化的版本仍然表现良好,而纯 Python 版本则无法实现同样的效果。(注:在演讲中,Merdler-Kravitz 还强调了 Rust 在 256MB 内存下的性能表现,与 Python 在 1GB 内存下的性能表现基本相同,这意味着通过 Rust 进行优化后,内存需求可以降低到之前的 1/4。)
在 Lambda 中使用 Rust 的成本收益:re:Invent 中的一个展示案例
减少所需的计算资源意味着成本更低,尤其是在 serverless 平台上(注:AWS Lambda 根据请求数量,执行代码的持续时间以及你为函数分配的内存量来计费)。Merdler-Kravitz 声称:“Rust 比 Python 平均便宜 2/3 到 3/4。”
在 re:Invent 期间,AWS 宣布其 Rust SDK 现已准备好投入生产环境使用。早在去年 11 月,这家云巨头就将基于“最小容器镜像(minimal container image)”的 Amazon Linux 2023 支持添加到了 Lambda 中。它表示,该支持的一个关键应用场景是“当使用需要原生编译的语言时,例如 Go 或 Rust。”
此外,还有一个为 AWS Lambda 提供的实验性的 Rust 运行时环境,可以简化使用 Rust 开发 Lambda 函数的操作,并包含了支持 Lambda 事件、Lambda 扩展和 Lambda 运行时 API 的 crates。有一个名为 Cargo Lambda 的项目与此相关,该项目支持在本地使用 Lambda 模拟器进行开发和测试,以及在 Windows 或 macOS 上开发时,将代码编译构建为 Linux 的可执行文件,无论开发者自己的 PC 是使用的 ARM64 还是 x86-64 都可以完成相应的编译构建。使用 Rust 构建 Lambda 函数的官方文档可在 此处 查阅。
实验性代码不适用于生产环境,因此 Rust 在 Lambda 方面的应用还处于早期阶段,但看起来潜在收益或许相当可观。
(注:Merdler-Kravitz 在演讲中总共介绍了 3 种使用场景,除了本文中介绍的利用将 Rust 代码嵌入到 Python 中的方式对现有代码中性能表现较差的部分进行重构和使用 AWS Lambda 提供的 Rust runntime client 在本地从零开始创建一个 Rust 项目的两个场景外,还介绍了使用 Rust 编写 Lambda 扩展的场景,通过扩展的方式将与业务核心逻辑无关但又必要的部分,如监控指标和日志上报等功能抽离出来,与业务核心逻辑进行异步处理,实现降低响应延迟的效果。并对三种场景下,Rust 版本和原版本的成本和性能都做了详尽的对比,得出了如下结论:场景一的方案适用于已经运行的程序中存在明显性能瓶颈,全部重构又有较大的风险和成本,这时寻找到其中运行较慢的小段代码并使用 Rust 进行重构在成本和性能方面都会带来明显受益;场景二依然在实验阶段,虽然可以在性能和成本方面带来极大受益,但当前还不推荐直接用于生产环境;场景三在成本方面不会有明显收益,在热启动时可以优化响应的延迟,但在冷启动时延迟会比不使用扩展时更高。)
原文链接:
Rust in AWS Lambda: a magic ingredient to reduce cost and increase performance?(https://devclass.com/2023/12/21/rust-in-aws-lambda-a-magic-ingredient-to-reduce-cost-and-increase-performance/)
声明:本文为 InfoQ 翻译,未经许可禁止转载。
谷歌新年大裁员,引硅谷裁员潮!OpenAI正式推出GPT Store,但第一批应用已被像素级抄袭;腾讯服务器深夜崩溃 | Q资讯
微信扫码关注该文公众号作者