## 视频
<video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video>
## 导读
Rust 以其性能和安全性而闻名,为 Amazon Lambda 应用带来了相当大的好处。在本论坛中,了解如何使用 Amazon SAM 和 cargo-lambda 部署 Rust 函数,从而促进从本地机器进行平滑的开发过程。探索如何使用 PyO3 和 maturin 等工具以及 Amazon SDK for Rust 轻松地将 Rust 集成到 Python Lambda 函数。揭示 Rust 如何优化 Lambda 函数,包括 Lambda 扩展的开发,所有这些都不需要完全重写现有的代码库。
## 演讲精华
<font color = "grey">以下是小编为您整理的本次演讲的精华,共900字,阅读时间大约是4分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font>
艾菲,一位资深的云计算架构师,在云X公司工作,同时也是亚马逊云科技的Serverless英雄。她在re:Invent的会议上欢迎观众的到来。尽管她是第一次在这样的大型会议上发表演讲,但她仍然感到紧张。艾菲简要介绍了她的讲座的技术要求,强调她将介绍如何使用Rust策略来优化亚马逊云科技Lambda性能。尽管她希望与会者具备一定的Lambda经验,但她明确表示无需任何关于Rust的预先知识。艾菲承诺将在讲座中解释重要的Rust代码概念,并在讲座结束后提供完整代码库的访问链接。
艾菲首先分享了一个来自她在Mitt Gomery Gamma公司的客户案例研究。这是一家虚构的公司,专门开发亚马逊云科技工具。几年前,由于客户需求,团队使用Python和Lambda构建了一个新的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)产品来管理S3存储桶。最初的发布受到了热烈的好评,但随着时间的推移,性能问题开始出现。客户报告了缓慢的界面,而首席财务官则批评了飙升的亚马逊云科技成本。
在进行了大量重构但仅取得了适度的改进之后,艾菲的团队确定Python运行时和Boto3等包是主要的瓶颈。这使得他们开始考虑替代语言,最终选择了性能和并发能力更强的Rust。然而,对于他们的大型且盈利主要来源的应用程序,完全用Rust重写是不切实际的。
艾菲概述了Mitt Gomery Gamma公司采用的一些逐步引入Rust的策略:
1. Rust绑定 - 使用PyO3和Maturin仓库将目标较慢的Python代码替换为Rust。
2. 从头开始重写Lambda - 使用亚马逊云科技SAM和cargo-lambda完全用Rust重写一个简单的但关键性的Lambda。
3. Lambda扩展 - 通过将工作卸载到Rust Lambda扩展,共享跨lambdas的通用逻辑。
她提到每种方法在性能提升、实施努力和影响范围方面都有不同的权衡。
在第一种策略中,Effi详细地解释了她是如何在应用程序的客户控制面板中利用ListBuckets lambda的。这种改进对其整体的性能有着积极的影响。经过分析后发现,Boto3桶检索逻辑是性能瓶颈所在。尽管Effi并不愿意完全用Rust重写这个复杂的lambda函数,但是针对目标绑定的证明已经证明了这种方法的有效性。
Effi展示了一些技巧,如何通过PyO3库将Rust代码作为Python模块和类接口进行访问。相比于Boto3,Rust SDK能够提供更好的性能提升,同时保持最低限度的编程工作量。借助Maturin构建工具,将Rust库无缝地集成到Python lambda中变得更加容易。
基准测试结果表明,相较于原始的Python版本,Rust在内存占用较少的情况下能够将性能提升3至4倍,并且保持相当的性能。此外,Rust还能够将冷启动速度提高3倍,这对于面向客户的API来说非常重要。Effi猜测,大部分的加速效果来自于将"臃肿"的botocore依赖替代为高效的Rust SDK。
在第二种策略中,Effi将Authorizer lambda识别为另一个可以优化的对象。这个lambda函数负责验证所有的请求,但它只包含了简单的令牌验证逻辑。这使得它成为了用Rust进行全面重写的理想选择。Effi还解释了如何需要一个新的运行时间来桥接Lambda Runtime API和Rust处理程序代码。幸运的是,亚马逊云科技-lambda-rust-runtime crate提供了一个现成的解决方案。
Effi分享了一些关于如何在Rust二进制文件中实现运行时间和处理程序逻辑的技巧。使用亚马逊云科技的SAM CLI和cargo-lambda,重新编写lambd的构建和部署过程变得非常简单。
再一次,Rust展现出了卓越的成果——相较于原始的Python版本,性能提高了4倍,成本降低了4倍。最引人注目的是,冷启动速度提高了6-7倍。Effi强调,尽管Rust的语言复杂性增加了,但其显著的性能提升使得在一些应用场景中对Rust的投资是值得的。
最后,Effi概述了第三种策略,即使用Rust lambda扩展。随着应用程序的发展,新的团队开始引入Node.js和Java lambda。然而,在所有这些lambda中都出现了一个共同的需求,那就是向SQS发送分析事件。为了避免在每个语言中重新实现SQS逻辑,Effi的团队开发了一个可重用的Rust扩展来解决这个问题。
她解释道,扩展通过支持长期运行的后台任务带来了独特的并发优势。这种能够返回响应并在扩展继续处理的同时使得与分析报告解耦合成为可能。由于Rust的高效性和较小的运行时占用,它非常适合用于与主处理器共享资源的扩展。
Effi展示了如何使用cargo-lambda编译扩展并将其作为层上传的过程。扩展运行时模板可以从亚马逊云科技-lambda-rust-runtime库中复制。测试结果表明,使用Rust扩展方法将延迟降低到了原来的100-200毫秒,相较于等待SQS调用完成有所改善。
最后,Effi再次强调了实用性上应用Rust(通过绑定、重写和扩展)的优势。她概括了一个学习路径,以便获得优化Lambda工作负载所需的基本Rust技能。Effi鼓励与会者利用所提供的资源开始学习Rust,以提高其[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用程序的性能。
**下面是一些演讲现场的精彩瞬间:**
领导者们探讨了将现有的Python应用程序逐步迁移到Rust的过程,而无需完全重写所有内容。
![](https://d1trpeugzwbig5.cloudfront.net/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust/images/rebranded/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust_0.png)
Rust是一种注重安全性、性能和并行性的编程语言。
![](https://d1trpeugzwbig5.cloudfront.net/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust/images/rebranded/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust_1.png)
通过架构图可以清晰地看到,API网关如何利用Lambda授权器对请求进行验证,然后调用ListBuckets Lambda来获取桶列表。
![](https://d1trpeugzwbig5.cloudfront.net/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust/images/rebranded/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust_2.png)
为了在Python应用程序中利用Rust代码,领导者们建议采用PyO3技术,将Rust代码包装成可供Python使用的接口。
![](https://d1trpeugzwbig5.cloudfront.net/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust/images/rebranded/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust_3.png)
由于Rust编译成的本机二进制文件性能优越,因此可以利用Maturin将其封装成适用于Python应用程序的Python轮子。
![](https://d1trpeugzwbig5.cloudfront.net/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust/images/rebranded/COM306-_Rustifying__serverless__Boost_AWS_Lambda_performance_with_Rust_4.png)
## 总结
本次演讲的主题是关于如何在现有的Python应用程序中运用Rust技术以提高亚马逊云科技Lambda的性能。演讲者提出了三种主要策略:使用Rust绑定替换慢速的Python代码,用Rust从头开始重写简单的Lambda函数,以及通过Rust扩展实现跨Lambda函数的共享行为。
一个明显的优势是将缓慢的Boto3代码替换为Rust绑定,这将带来显著的性能提升。演讲者展示了一个例子,仅通过将botocore替换为Rust SDK,就能实现3-4倍的性能提升和更低的成本。Rust的减少膨胀和优化性特征带来了巨大益处。
另外,用Rust完全重新编写简单的Lambda函数,甚至开发一个Rust运行时。对一个基本的授权器Lambda函数来说,这导致6-7倍的更快冷启动速度,并且比Python便宜3-4倍。虽然Rust的性能提升可能看起来复杂,但对于特定用途来说,这种提升是值得的。
最后,演讲者推荐使用Rust扩展在不同的Lambda函数间共享通用逻辑。将分析任务交给扩展可以降低延迟,而Rust作为原生二进制的效率使它成为了扩展的理想选择。
总的来说,演讲者成功地证明了将Rust技术应用到亚马逊云科技Lambda应用程序中的实际价值,展现了显著的性能提升和经济效益。只需一点Rust知识,就能带来巨大的成果。
## 演讲原文
## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!
[2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站")
[点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯!
[点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯!
## 即刻注册亚马逊云科技账户,开启云端之旅!
[【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“")
[【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")