撰稿 | 云昭
出品 | 51CTO技术栈(微信号:blog51cto)
一种神奇的组合出现了!Rust和无服务器搭配,可能比使用Python要省下一大笔钱!
众所周知,Lambda函数和大型运行时是一个糟糕的组合,因为跟本机代码相比,冷启动速度较慢,内存需求更高。另一方面,许多开发人员使用Java和Python比使用Rust等系统语言开发起来会更有效率。
然而现在,不需要用Rust重写整个Lambda函数(Python),就可以真正的“降本增效”。
1、基于Python的AWS太复杂,改用Rust解决后,成本降为1/4!
一位云咨询公司CloudEX的工程主管,Merdler Kravitz举了一个Lambda函数的例子,该函数使用Python列出S3(简单存储服务)存储桶。事实证明,用于Python的AWS SDK Boto3过于膨胀,通过用Rust替换需要Boto3的函数,可以在成本和性能方面获得巨大收益——即使Python仍在用于其他代码。
用Rust替换Python代码的关键是PyO3,它为Python提供了Rust绑定。Rust代码中的属性将函数公开为标准Python接口。
结果,在Merdler Kravitz提出的例子中,冷启动速度快了三倍,对内存的要求也低得多。对于1GB的RAM,Rust和Boto3代码具有相似的性能,但对于256MB的RAM,增强版Rust仍然表现良好,而另一个则不然。
在Lambda中使用Rust的成本效益:re:Invent上的一个例子
尤其是在无服务器平台上,减少所需的计算资源可以降低成本。“Rust平均比Python更便宜,大概是后者的1/3到1/4,”他声称。
在re:Invent会上,AWS同时宣布了其用于Rust的SDK已准备好生产。 去年11月早些时候,这家云巨头基于“最小容器映像”为Lambda添加了对亚马逊Linux 2023的支持,并表示其关键用途之一是“在使用编译为本地代码的语言时,如Go或Rust。”
2、亚马逊与Rust结缘已久
至少自2015年以来,Rust对AWS服务的非官方支持就一直存在,当时Matthew Mayer和Anthony DiMarco在Rust 1.0发布后不久启动了一个名为Rusoto的独立项目,目标包括学习Rust。根据Rust crate 存储库crates.io的统计数据,Rusoto的下载量已超过1100万次。
AWS Rust SDK的第一个alpha是由当时在AWS的iliana etaoin于2021年推出的,她是Rusoto的共同维护者。
根据介绍,官方的Rust SDK现在支持300多项AWS服务,并“支持异步/等待、非阻塞IO和构建器等现代Rust语言功能”。
AWS Lambda还有一个实验性的Rust运行时,它简化了Rust中的运行功能,并包括支持Lambda事件、扩展和Lambda runtime API的crate 。一个名为Cargo Lambda的相关项目支持使用Lambda模拟器进行本地开发和测试,以及在Windows或macOS上开发时为Linux进行交叉编译,无论开发人员的PC上运行的是什么,都可以选择ARM64和x86-64。使用Rust构建Lambda,亚马逊官方也给出了详细的文档。
图片
当然,实验性代码不用于生产,因此在Lambda上使用Rust还为时过早。不过现在,可以看出回报将会很大。
榜样的力量是无穷的。据某职场社交平台上亚马逊内部员工反馈,“这里人人都用Rust”,有网友还指出,Rust编译器团队的leader Jon Gjergeset,也在亚马逊任职。
图片
这位员工甚至做出了判断:Rust 早晚会替代C++。
3、AGI时代,Rust为什么比Python吃香
都有哪些场景使用Rust?一个简单的回答就是所有使用C/C++的场景。
但与此次亚马逊宣布的部分替换Python而言,还有一个场景Python越来越有被替代的风险。
就是进入到“大模型应用开发”语境后,原来的“Python+Docker”的机器学习开发框架正在面临严重的挑战。
构建机器学习应用时,更多人会想到Python+Docker,然而当时间来到“大模型时代”,再基于这一组合构建大模型应用似乎就会不合时宜,Python的性能和Docker的冷启动问题都注定了这一事实:当处理需要大量计算的大型数据集或复杂模型时,不太可能会成为这一领域的主流选择。
一方面,Python是解释性语言,编译速度较慢,维护方面的问题也较为严重;另一方面,Docker越发暴露出磁盘空间消耗、硬件加速器支持、可移植性、安全依赖等问题。
基于此,有业界人士认为:Rust+WASM更有希望取代Python+Docker,成为LLM生态构建基础设施的主要场景。这不得不让人想到马斯克那句“AGI会建立在Rust上”的猜测。
图片
单讲Rust,Rust为什么会被追捧为AGI时代的编程语言?
首先,编译极快:Rust 是一种编译语言,以其极快的性能而闻名。当与基于堆栈的虚拟机的二进制指令格式 WebAssembly 结合使用时,这两个组合有望提供无与伦比的执行速度。
其次,内存安全:Rust 的突出特点之一是它强调内存安全而不牺牲性能。这确保了应用程序既快速又安全。
然后,并发性:Rust 的并发性方法是独一无二的。它确保在编译时捕获数据竞争(并发系统中最常见和最具挑战性的错误之一)。这意味着开发者可以编写并发代码,而不必担心引入难以检测的运行时错误。
此外,富有表现力的类型系统:Rust 拥有强大且富有表现力的类型系统。该系统不仅有助于在编译时捕获错误,而且还允许开发者以清晰简洁的方式表达他们的意图。
同时,现代包管理:Cargo,Rust 的包管理器,简化了管理依赖项、构建项目甚至发布库的过程。因其易用性和高效性而受到赞誉的工具。
最后,快速增长的生态:Rust 的生态正在蓬勃发展。像“ndarray”、“llm”、“candle”和“burn”这样的库证明了大模型相关的社区积极参与扩展 Rust 的LLM应用开发的能力。
那么为什么还需要WebAssembly?
与绝大部分 “现代编程语言” 不同,Rust 的一个亮点是它可以直接编译成机器码,不需要一个中间的 “运行时”。然而,许多场景诸如浏览器、云原生、边缘设备等,直接运行机器码是不被允许的。即便熟练Rust也缺少一个与之相匹配的运行时才能跑得通。
在实践中,人们会发现 WebAssembly 就成为了 Rust 运行时的首选之一。细心的人也可能注意到:Rust 编译器也添加了 Wasm 平台的 target。两者简直天作之合。
4、新的开发语境到来国内和国外,Rust采用差距
国内开发跟国外开发有个很显然的不同。
国内软件行业的大型底层项目相对国外来说少的多,开发方向主要在需求不断更迭的上层逻辑。
过去三四十年,开发者更多专注于业务应用层上,做功能模块的排序与堆叠,而底层代码的研究更多像一个个毛线团,想要条分缕析,并非一日之功,只能说这并不适合当时快速扩张的主旋律。
图片
然而,我们也慢慢看到新的开发主题正在到来:业务侧更关注安全、可靠,更关心供应链的依赖是否可持续,更关心会不会被卡脖子。比如:去年微软Azure的首席技术官 Mark Russinovich 的一条推文上了技术圈的热搜,他想要弃用C++,搬家到Rust上的意图非常强烈。
图片
据说有意思的是,微软所有70%的常见漏洞和暴露都与内存安全问题有关。而且,尽管人们花了很多努力来修复这些问题,但它们仍在飙升。
为此,微软安全响应中心已经启动了安全系统编程语言计划,打算将他们的项目迁移到Rust项目中。甚至后来大家都知道的Windows内核,也开始用Rust来重写。
所以我们看到众多知名企业也在大力投入 Rust,比如国外的企业如微软、谷歌成为了 Rust 基金会白金赞助商之一,AWS 更是直接将 Rust 官方团队的成员招入麾下开启了抢人大战,Meta(原 Facebook)正式宣布 Rust 作为其服务端支持的语言等等。
再比如,国内科技公司如华为、字节跳动等公司均在内部培养了 Rust 团队并推动 Rust 的落地,PingCAP 采用了 Rust 实现 TiKV,以及众多明星初创企业如达坦科技和海致星图直接选择 Rust 作为其产品的主力语言。
图片
根据字节跳动Volo负责人吴迪的演讲内容整理,有增删
然而,有一种观点认为:国内不会大规模使用 Rust,即便要用 Rust,应该会从各大云厂商开始,而且是各种底层项目,目前云厂商更主流的语言是 Golang,因为 Golang 的开发效率相当的高,这很符合国内云厂商的商业逻辑。幸运的是,字节跳动正在从 Golang 转向 Rust。
写在最后:时代选择了Rust
一个语言的兴起,往往是它解决了所处时代的痛点问题。PHP解决了门户网站快速搭建的问题,Python降低了编程的门槛,Java解决了移动时代的应用开发需求,C/C++则很早在系统底层做出了40多年前的贡献。
Rust也是如此。与绝大部分 “现代编程语言” 不同,在一个强调底层安全、快速、可靠的新背景下,Rust被选中了。从15年稳定版算起,Rust的确走过的时间还很短。它已经连续8年成为开发者中最受尊敬的语言!
2023年StackOverflow开发人员调查显示,85%使用Rust的开发人员希望明年再次使用它。
图片
最后来个小花絮,2023过去,那些在日常中应用和开发Rust,是怎么样一种感觉?
我们选取了这四种有态度的看法,全当一窥国内Rust开发者的现状,可以看出也是一个升级打怪的过程,以此共勉吧——
全职Rust的开发者:「一开始做Rust全职还是挺开心的,但是没两个月激情就没了,天天写真的够呛,现在也变成天天吐槽“垃圾Rust”了。」
带队Rust项目的leader:「建议自己培养,别听网上瞎扯 Rust 入门有多么难。只要公司里有一个很懂 Rust 的,其他人就都可以快速上手。」
上岸者:「自己不去作死搞复杂的带三四个 lifetime 的 generic,一般不会出问题。Rust 上手写业务只要一个月,想写花里胡哨的东西才需要经验。」
使用Rust8年以上的大牛:「我带的新人大都有Java或C等语言基础, 基本上一个月都能上手, 算法, 异步和多线程都没问题, 甚至还有文科生转过来写rust的, 他们都觉得不难。」
参考链接:
Rust in AWS Lambda: a magic ingredient to reduce cost and increase performance?
https://zhuanlan.zhihu.com/p/624525824
https://juejin.cn/post/7181794889238052901
https://www.zhihu.com/question/537491737/answer/2527548502
https://zhuanlan.zhihu.com/p/667210058