Rust 助力无服务器构筑云计算新引擎

news2024/9/19 12:53:59

引言

今年 Amazon Lambda 迎来了它的第一个十周年。在过去的十年里,无服务器架构改变了软件开发的方式,简化了应用程序的部署和扩展,成为云计算的新引擎。而在众多支持无服务器技术的编程语言中,Rust 以其卓越的安全性和高性能成为了开发者的宠儿。在这篇博客中,我们将探讨 Rust 如何在无服务器架构中发挥关键作用,并展望未来无服务器技术的发展方向。

image.png

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

无服务器架构的演变

Amazon Lambda 于 2014 年正式面向 Amazon Web Services 上的构建者提供服务,标志着无服务器计算的开始。无服务器架构允许开发者无需管理服务器即可运行代码,从而专注于业务逻辑的开发。这种模式极大地提高了开发效率,并降低了运营成本。

image.png

在过去的十年中,无服务器架构经历了显著的发展,从简单的事件驱动计算扩展到复杂的分布式系统。随着需求的不断增长,开发者对性能和安全性的要求也越来越高。这就是为什么 Rust 在无服务器技术中脱颖而出。

什么是 Rust

Rust 作为一门编程语言,一直以来,都有一群忠实的开发者粉丝群。他们选择 Rust 的原因在于 Rust 的安全性,高性能以及高效并发。尤其云计算蓬勃发展的近些年,Rust 凭借其独特的技术优势,逐渐成为了构建云基础设施的“香饽饽”。亚马逊云科技作为一家云供应商也对 Rust 这门编程语言情有独钟。

Rust 的安全性优势

Rust 的设计初衷就是解决内存安全问题。传统语言如 C 和 C++,尽管性能出色,但容易引发内存泄漏和数据竞争等问题。Rust 通过其独特的所有权系统和编译时检查,彻底消除了这些隐患。

在 Amazon Lambda 等无服务器环境中,安全性至关重要。应用程序可能会处理敏感数据,或在公共网络上运行。Rust 的内存安全特性确保了在编译时就能检测到潜在的安全漏洞,减少了运行时错误的可能性。这使得开发者在部署时更加安心。

Rust 的内存安全机制是基于“所有权”和“借用”两个核心概念。每个值都有一个“所有者”,而“所有者”负责在合适的时候释放内存。同时,Rust 通过“借用”机制,允许多个引用同时访问一个值,但不会出现数据竞争的问题。这种精妙的设计,确保了 Rust 程序在运行时不会出现空指针、内存泄漏等非常常见的内存问题。统计数据显示,高达 70% 的关键安全漏洞都源自内存错误,所以 Rust 无疑是一股强大的“免疫细胞”,为云服务筑起了坚实的防线。Amazon S3 就是用 Rust 构建的,Rust 的安全性对 Amazon S3 这系统的可靠性起着重要作用。

除了内存安全机制,Rust 强类型系统减少了运行时错误,增加了代码的可靠性和可维护性。

Rust 的高性能表现

除了安全,Rust 在性能方面也有着出色的表现。作为一门无垃圾回收的系统级语言,它可以直接编译为原生机器码,没有任何运行时开销。这使得 Rust 具有接近 C/C++ 的性能,在某些场景下甚至可以超越。

无服务器架构要求快速的启动时间和高效的资源利用。Rust 的无运行时架构使其在性能上具有显著优势。在 Amazon Lambda 的冷启动测试中,Rust 的启动时间几乎是瞬时的,这在需要快速响应和高并发的应用程序中尤为重要。

此外,Rust 的编译器优化和零开销抽象使得它在执行效率上优于许多其他语言。开发者可以利用 Rust 的并行处理能力,在不牺牲安全性的前提下,最大化地利用计算资源。

一位 Amazon Web Services Hero 做了一项测试,他使用不同 Amazon Lambda 运行时运行同等工作负载 25 亿次,结果如下图所示。Rust 的表现非常出色。事实上,它使用了大约四分之一的内存,但性能仍然优于其他实现。

image.png

因为高性能的表现,Rust 在无服务器环境中被广泛应用。举个例子,一个简单且典型的数据库应用。通过 Lambda 函数调用 DynamoDB 数据库,实现列举,选择,生成并删除产品信息。亚马逊云科技的架构师同学分别用 TypeScrip,Java,Go,Rust 以及 Kotlin 多种语言实现了这个应用程序。在他们共同努力运行了几万次后有了以下的运行结果:

image.png

首先很自豪的是,就热启动的响应时间来说,对大多数工作负载 Lambda 的运行速度非常快。无论哪个运行时,在稳定的状态下,都能获得高性能。另外 Rust 相对其他语言在性能助力上更胜一筹。有个小插曲是 Kotlin 好像表现更棒。究其原因,其实源于一个测试时将 Kotlin 变现的应用程序的 Lambda RAM 分配成了 2GB,其他语言包括 Rust 编写的应用程序 Lambda RAM 都给了 128MB。大家知道 Lambda 调用 CPU 时会给更多 RAM 的函数提供更多的计算量。我就奇怪,Rust 没有垃圾回收器,也没有运行时怎么可能比其他语言的性能差?!

image.png

再来看看 Lambda 在冷启动过程中,不同语言对于响应时间性能影响的比较。Lambda 冷启动是指函数第一次被调用时,需要启动一个新的运行环境,这个过程通常比较慢,因为需要完成一大堆的工作。比如:初始化 Lambda 运行时环境,包括加载必要的依赖库。设置 Lambda 函数的配置信息,如内存大小,超时时间等。再比如下载 Lambda 函数的代码包,反序列化代码包,并将其加载到新的运行中去。以及初始化 Lambda 函数上下文等等。这些步骤为请求做好准备,让这些运行时的托管环境就绪,以便交付响应。对 Go 而言,需要运行一个垃圾收集器,让它与应用程序一起启动,这无疑增加了冷启动的响应时间。TypeScript 也是如此,因为它有一个解释器需要一起启动。Java 更夸张,它甚至需要本地代码实现,即使在本地运行 Java 的 Lambda 函数,仍需要加载 JVM 和大量的依赖库,初始化开销特别大。

Rust 助力无服务器成为云计算的新引擎

我们认为,Lambda 是无服务器计算,而无服务器不仅仅是 Lambda。亚马逊云科技为云上构建者运行和构建现代应用程序提供最广泛的无服务器服务组合。

而亚马逊云科技一些明星云服务,如 S3 和 Fargate,都在使用 Rust 进行性能优化和安全强化。不仅如此,Amazon Web Services 还广泛采用 Rust 来开发关键的底层组件,比如,Bottlerocket 是一个基于 Rust 的容器优化操作系统,为 Amazon EKS 提供支撑。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 的开源项目

展望未来:Rust 与无服务器技术的结合

在 Amazon Lambda 十周年之际,我们回顾过去的成就,同时展望未来的创新。Rust 作为 Amazon Lambda 的动力与安全保障,正在引领无服务器技术的新方向。有了 Rust 为无服务器技术在安全性和高性能打下坚实基础,未来的无服务器架构将更加强调资源效率和可持续发展,而 Rust 的低能耗特性也正好契合这一趋势。

我们可以看到 Rust 正在成为 Amazon Web Services 为代表的云计算服务的重要“引擎”。它出色的性能、安全性和可持续性,使其成为构建可靠、高效云基础设施的理想选择。同时可靠高效的云也为开发者的专注创新提供了更多的可能性。

让我们一起在云上开心构建吧!

文章来源:Rust 助力无服务器构筑云计算新引擎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2125727.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目管理工作流是什么?项目管理工作流管理实战技巧!

项目管理工作流是指在协作过程中通过限制任务状态的流转进行流程控制的一种方式。项目从启动到完成所经历的一系列有序、可控的步骤和流程,它详细描述了项目执行过程中各项任务和活动的顺序、依赖关系、责任人以及完成标准等,是项目成功执行的重要保障。…

java设计模式 桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,旨在将抽象部分与其实现部分分离,使它们都可以独立地变化。桥接模式通过将继承改为组合,实现了在不修改现有类的情况下,动态地切换和扩展抽象类与其具体实现…

Windows 平台安装 Nacos 2.x

环境准备 64 位操作系统,Windows 10 / Linux Centos 7JDK 1.8 安装包下载 安装包下载官方地址:https://github.com/alibaba/nacos/releases 启动 将安装包解压到安装的目录下,改名为 nacos-2.0.4。然后进行到 bin 目录下,打开…

数据集 Look into Person (LIP) 是最流行的单人人体语义分割 >> DataBall

开源数据集 Look into Person (LIP) 是最流行的单人人体语义分割 深度学习 Look into Person (LIP) 是最流行的单人人体分割数据集,它使用像素级注释进行注释,具有19个语义人体部分标签和一个背景标签。LIP包含50,462个带注释的图像,分为30,4…

CAN集线器(工业级、隔离式)

型号: MS-HUB-C 概述 MS-HUB 是一款可通过一路 CAN ,一路 RS-232为主口扩展出 7 路 CAN 从口的工业级光电隔离型 CAN 分配器。可以有效的实现 CAN 网络的中继、扩展与隔离。采用先进的自动流控技术自动侦测CAN 信号流向。MS-HUB 具备光电隔离功能&#x…

UEFI学习笔记(二):edk2构建编译流程

UEFI入门(二):edk2项目编译流程 一、Build流程框架Build的三个阶段:1、Autogen2、Make3、ImageGen 二、编译构建步骤:1. 安装依赖工具2. 初始化构建环境3. 配置工具链和目标4. 定义平台配置5. 构建并编译 三、uefi-too…

怎么通过Java实现和数据库的连接???(附带练习)

JDBC 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的…

STL-stack/queue/deque(容器适配器)

目录 ​编辑 STL-stack 150. 逆波兰表达式求值 stack queue std::stack deque 性能测试 结构 STL-stack 栈的压入、弹出序列_牛客题霸_牛客网输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假。题目…

TESSY创建以及设计一个测试用例

我们以tessy5.1 IDE为例,给大家展示编写一个测试用例的过程。 还不会创建工程的,可以参考以下这篇文章: TESSY创建单元测试或集成测试工程_tessy 集成测试-CSDN博客 接下来我们以这个作为开始状态进行介绍 1、添加源文件 2、添加头文件路径…

存储型XSS漏洞

1.介绍 存储型XSS攻击是一种常见的网络攻击,也称为持久型XSS攻击。与反射型XSS攻击不同,存储型XSS攻击将恶意代码存储在服务器端或数据库中,当其他用户访问该网页时,恶意代码会被执行,导致用户的信息被窃取或造成其他…

Redis相关命令详解

目录 一、认识Redis 二、string 1、重要知识 2、基础命令 3、Key值的设置 三、list 1、重要知识 2、存储结构 3、基础命令 4、list的应用场景 四、hash 1、重要知识 2、基础命令 五、set 1、重要知识 2、基础命令 3、具体应用 六、zset 1、重要知识 2、…

“禁塑行动·我先行”广州绿葆网络发展有限公司与辽宁省慈善联合总会共谱环保新篇章

2024年9月9日,在国家大力推进生态文明建设、全面实施禁塑令政策的大背景下,农工同心公益基金“禁塑行动我先行”公益捐赠辽宁省启动仪式在辽宁省成功举办。此次活动由辽宁省慈善联合总会、农工党辽宁省委会主办,辽宁省慈善联合总会农工同心公…

MUR2060CT-ASEMI快恢复二极管MUR2060CT

编辑:ll MUR2060CT-ASEMI快恢复二极管MUR2060CT 型号:MUR2060CT 品牌:ASEMI 封装:TO-220AB 安装方式:插件 批号:最新 恢复时间:35ns 最大平均正向电流(IF)&#…

噪声的消除

开关电源的干扰一般是几十K到几百K: 【电源噪声查不出来?不用上板子,滤波器仿真就能搞定】https://www.bilibili.com/video/BV12v411r798?vd_source3cc3c07b09206097d0d8b0aefdf07958 村田消除噪声的仿真软件: SimSurfing - 村…

Kafka原理剖析之「Topic创建」

一、前言 Kafka提供了高性能的读写,而这些读写操作均是操作在Topic上的,Topic的创建就尤为关键,其中涉及分区分配策略、状态流转等,而Topic的新建语句非常简单 bash kafka-topics.sh \ --bootstrap-server localhost:9092 \ // …

QT设置闹钟超时播报

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTimerEvent> #include<QTime> #include<QTextToSpeech>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic…

mysql 之 information_schema

information_schema 是 MySQL 中的一个特殊数据库&#xff0c;它提供了关于 MySQL 服务器中所有数据库、表、列、索引、存储过程、函数、触发器等对象的元数据信息。information_schema 是一个只读数据库&#xff0c;主要用于查询数据库的结构信息&#xff0c;而不是存储用户数…

【Unity踩坑】创建新项目后提示编译错误要进入安全模式

在创建了新项目后&#xff08;比如URP&#xff0c;AR&#xff0c;VR&#xff09;&#xff0c;首次打开时提示有编译错误&#xff0c;要进入安全模式。 脚本是项目模板自带的&#xff0c;不会有问题。这时需要先选择进入安全模式&#xff0c;然后关闭项目&#xff0c;重新打开就…

C++之函数进阶

函数默认参数 注意事项&#xff1a; 1. 如果从某个位置开始&#xff0c;有了默认参数&#xff0c;那么从这个位置往后&#xff0c;都必须有默认参数 2. 函数声明和函数定义只能有一个进行默认参数设置 函数占位参数 函数重载 函数名相同void fun()&#xff0c;功能实现不同 提高…

arxiv 首次投稿注意事项记录

文章目录 注册用教育邮箱&#xff0c;不用背书latex&#xff1a; 主tex和bib文件放在最外层&#xff0c;重命名为arxiv.tex和arxiv.bib &#xff08;没测试过不重命名会怎么样&#xff09;在overleaf右上方点submmit&#xff0c;选arxiv&#xff08;这样会自动生成一个bbl文件&…