### **引言**
今年 [Amazon Lambda](https://aws.amazon.com/cn/lambda/?nc2=h_ql_prod_serv_lbd&trk=cndc-detail) 迎来了它的第一个十周年。在过去的十年里,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构改变了软件开发的方式,简化了应用程序的部署和扩展,成为云计算的新引擎。而在众多支持[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术的编程语言中,Rust 以其卓越的安全性和高性能成为了开发者的宠儿。在这篇博客中,我们将探讨 Rust 如何在[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构中发挥关键作用,并展望未来[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术的发展方向。
![image.png](https://dev-media.amazoncloud.cn/90d44337317041e18e92791b5ceb8aac_image.png "image.png")
### **无服务器架构的演变**
Amazon Lambda 于 2014 年正式面向 Amazon Web Services 上的构建者提供服务,标志着[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算的开始。[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构允许开发者无需管理服务器即可运行代码,从而专注于业务逻辑的开发。这种模式极大地提高了开发效率,并降低了运营成本。
![image.png](https://dev-media.amazoncloud.cn/cf83a38cf92c4c90bb3f5ec285788919_image.png "image.png")
在过去的十年中,[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构经历了显著的发展,从简单的事件驱动计算扩展到复杂的分布式系统。随着需求的不断增长,开发者对性能和安全性的要求也越来越高。这就是为什么 Rust 在[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术中脱颖而出。
### **什么是 Rust**
Rust 作为一门编程语言,一直以来,都有一群忠实的开发者粉丝群。他们选择 Rust 的原因在于 Rust 的安全性,高性能以及高效并发。尤其云计算蓬勃发展的近些年,Rust 凭借其独特的技术优势,逐渐成为了构建云基础设施的“香饽饽”。亚马逊云科技作为一家云供应商也对 Rust 这门编程语言情有独钟。
### **Rust 的安全性优势**
Rust 的设计初衷就是解决内存安全问题。传统语言如 C 和 C++,尽管性能出色,但容易引发内存泄漏和数据竞争等问题。Rust 通过其独特的所有权系统和编译时检查,彻底消除了这些隐患。
在 Amazon Lambda 等[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)环境中,安全性至关重要。应用程序可能会处理敏感数据,或在公共网络上运行。Rust 的内存安全特性确保了在编译时就能检测到潜在的安全漏洞,减少了运行时错误的可能性。这使得开发者在部署时更加安心。
Rust 的内存安全机制是基于“所有权”和“借用”两个核心概念。每个值都有一个“所有者”,而“所有者”负责在合适的时候释放内存。同时,Rust 通过“借用”机制,允许多个引用同时访问一个值,但不会出现数据竞争的问题。这种精妙的设计,确保了 Rust 程序在运行时不会出现空指针、内存泄漏等非常常见的内存问题。统计数据显示,高达 70% 的关键安全漏洞都源自内存错误,所以 Rust 无疑是一股强大的“免疫细胞”,为云服务筑起了坚实的防线。[Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 就是用 Rust 构建的,Rust 的安全性对 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail) 这系统的可靠性起着重要作用。
除了内存安全机制,Rust 强类型系统减少了运行时错误,增加了代码的可靠性和可维护性。
### **Rust 的高性能表现**
除了安全,Rust 在性能方面也有着出色的表现。作为一门无垃圾回收的系统级语言,它可以直接编译为原生机器码,没有任何运行时开销。这使得 Rust 具有接近 C/C++ 的性能,在某些场景下甚至可以超越。
[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构要求快速的启动时间和高效的资源利用。Rust 的无运行时架构使其在性能上具有显著优势。在 Amazon Lambda 的冷启动测试中,Rust 的启动时间几乎是瞬时的,这在需要快速响应和高并发的应用程序中尤为重要。
此外,Rust 的编译器优化和零开销抽象使得它在执行效率上优于许多其他语言。开发者可以利用 Rust 的并行处理能力,在不牺牲安全性的前提下,最大化地利用计算资源。
一位 Amazon Web Services Hero 做了一项测试,他使用不同 Amazon Lambda 运行时运行同等工作负载 25 亿次,结果如下图所示。Rust 的表现非常出色。事实上,它使用了大约四分之一的内存,但性能仍然优于其他实现。
![image.png](https://dev-media.amazoncloud.cn/c8be0e48f548493bae0c225676535c95_image.png "image.png")
因为高性能的表现,Rust 在[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)环境中被广泛应用。举个例子,一个简单且典型的数据库应用。通过 Lambda 函数调用 DynamoDB 数据库,实现列举,选择,生成并删除产品信息。亚马逊云科技的架构师同学分别用 TypeScrip,Java,Go,Rust 以及 Kotlin 多种语言实现了这个应用程序。在他们共同努力运行了几万次后有了以下的运行结果:
![image.png](https://dev-media.amazoncloud.cn/2cb79b2811b24412b91eeafc73a41f8d_image.png "image.png")
首先很自豪的是,就热启动的响应时间来说,对大多数工作负载 Lambda 的运行速度非常快。无论哪个运行时,在稳定的状态下,都能获得高性能。另外 Rust 相对其他语言在性能助力上更胜一筹。有个小插曲是 Kotlin 好像表现更棒。究其原因,其实源于一个测试时将 Kotlin 变现的应用程序的 Lambda RAM 分配成了 2GB,其他语言包括 Rust 编写的应用程序 Lambda RAM 都给了 128MB。大家知道 Lambda 调用 CPU 时会给更多 RAM 的函数提供更多的计算量。我就奇怪,Rust 没有垃圾回收器,也没有运行时怎么可能比其他语言的性能差?!
![image.png](https://dev-media.amazoncloud.cn/9df2603f4728472ea2f9f84cebb12e5d_image.png "image.png")
再来看看 Lambda 在冷启动过程中,不同语言对于响应时间性能影响的比较。Lambda 冷启动是指函数第一次被调用时,需要启动一个新的运行环境,这个过程通常比较慢,因为需要完成一大堆的工作。比如:初始化 Lambda 运行时环境,包括加载必要的依赖库。设置 Lambda 函数的配置信息,如内存大小,超时时间等。再比如下载 Lambda 函数的代码包,反序列化代码包,并将其加载到新的运行中去。以及初始化 Lambda 函数上下文等等。这些步骤为请求做好准备,让这些运行时的托管环境就绪,以便交付响应。对 Go 而言,需要运行一个垃圾收集器,让它与应用程序一起启动,这无疑增加了冷启动的响应时间。TypeScript 也是如此,因为它有一个解释器需要一起启动。Java 更夸张,它甚至需要本地代码实现,即使在本地运行 Java 的 Lambda 函数,仍需要加载 JVM 和大量的依赖库,初始化开销特别大。
### **Rust 助力无服务器成为云计算的新引擎**
我们认为,Lambda 是[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算,而[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)不仅仅是 Lambda。亚马逊云科技为云上构建者运行和构建现代应用程序提供最广泛的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)服务组合。
![image.png](https://dev-media.amazoncloud.cn/eefefb004c3949cdb781eb177e60c3b3_image.png "image.png")
而亚马逊云科技一些明星云服务,如 S3 和 Fargate,都在使用 Rust 进行性能优化和安全强化。不仅如此,Amazon Web Services 还广泛采用 Rust 来开发关键的底层组件,比如,Bottlerocket 是一个基于 Rust 的容器优化操作系统,为 [Amazon EKS](https://aws.amazon.com/cn/eks/?trk=cndc-detail) 提供支撑。Firecracker 是支撑 Lambda 和 Fargate 的虚拟化引擎,同样采用了 Rust 进行开发。可以说,Rust 已经深入到 Amazon 云计算的“脊梁”之中,成为构建下一代云基础设施的关键力量。
除了这些基础设施级的服务和应用,Rust 在 Amazon Web Services 服务开发中也扮演着重要角色。Amazon SDK for Rust 就是一个很好的例子。利用这个 SDK,开发者可以轻松地与 Amazon Web Services 提供的各项云服务集成,构建复杂的分布式系统。
值得一提的是,Amazon Web Services 不仅积极使用 Rust,也在大力支持 Rust 生态系统的发展。Amazon Web Services 是 Rust 基金会的董事会成员,并为 Rust 基金会提供基础设施和技术支持。同时,Amazon Web Services 也雇佣了多名 Rust 项目的核心贡献者,协助改进 Rust 语言和重要库,如 tokio。这些努力无疑将推动 Rust 在云计算领域的进一步应用和普及。
* 查看更多基于 [Rust 的开源项目](https://dzone.com/articles/17-open-source-projects-at-aws-written-in-rust?trk=cndc-detail)
![image.png](https://dev-media.amazoncloud.cn/e13c1cac50e4420c8899468cc442a4d5_image.png "image.png")
### **展望未来:Rust 与无服务器技术的结合**
在 Amazon Lambda 十周年之际,我们回顾过去的成就,同时展望未来的创新。Rust 作为 Amazon Lambda 的动力与安全保障,正在引领[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术的新方向。有了 Rust 为[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术在安全性和高性能打下坚实基础,未来的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)架构将更加强调资源效率和可持续发展,而 Rust 的低能耗特性也正好契合这一趋势。
我们可以看到 Rust 正在成为 Amazon Web Services 为代表的云计算服务的重要“引擎”。它出色的性能、安全性和可持续性,使其成为构建可靠、高效云基础设施的理想选择。同时可靠高效的云也为开发者的专注创新提供了更多的可能性。
让我们一起在云上开心构建吧!
![Build on cloud.gif](https://dev-media.amazoncloud.cn/0a8002fd24d94e15bb0718da8b987cbe_Build%20on%20cloud.gif "Build on cloud.gif")