前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWS Lambda 中的 Rust:冷启动速度提升三倍、内存需求降低至 25%

AWS Lambda 中的 Rust:冷启动速度提升三倍、内存需求降低至 25%

作者头像
深度学习与Python
发布2024-01-17 19:08:03
1520
发布2024-01-17 19:08:03
举报

作者 | Tim Anderson

译者 | 赵晓磊

策划 | Tina

最近 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 翻译,未经许可禁止转载。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档