每个人都喜欢 Rust:Rust 如何在生产中使用
如果您还没有听说过,Rust 是目前最有前途和最受欢迎的编程语言之一。它最初是在 Mozilla 中创建的,后来被 Dropbox、微软、Facebook 等公司采用。Rust 的主要好处是它可以实现类似 C 的性能,同时仍然保持我们在使用 JavaScript 和 Python 等语言进行开发时所习惯的内存安全性。
在本文中,我将研究九家使用 Rust 的大公司,并深入探讨他们选择的原因。
9 个 Rust 成功案例
Redox OS
Redox 是一个用纯Rust编写的通用操作系统。目标是提供一个功能齐全的类 Unix 微内核,既安全又免费。
我们与POSIX有适度的兼容性,允许 Redox 无需移植即可运行许多程序。
我们从Plan9、Minix、Linux和BSD中获得灵感。Redox 旨在将多年的研究和来之不易的经验整合到一个感觉现代和熟悉的系统中。
目前,Redox 支持:
- 所有 x86-64 CPU。
- 支持 VBE 的显卡(过去十年的所有 Nvidia、Intel 和 AMD 卡都有这个)。
- AHCI 磁盘。
- E1000 或 RTL8168 网卡。
- 英特尔 HDA 音频控制器。
- 带有 PS/2 仿真的鼠标和键盘。
作者自述项目来龙去脉上下文:
我第一次开始学习Rust是在2015年初。我一直被驱使去做低层次的事情,并且很快就认识到Rust在操作系统内核、驱动和服务方面可以有什么作用。
当时,在这么低的层次上,用Rust做的事情非常少。
在一个为裸机编译Rust的项目的帮助下,我用Rust重写了一个我一直在研究的X86电脑的内核(这些东西早就被整合到Rust中了,但在当时是很神秘的魔法)。它不仅仅是单一的,包括图形堆栈、磁盘驱动、文件系统,以及内核内的所有东西。
不久之后,我建立了这个内核,我称之为 “redox”,并最终将这些部分分解到了用户空间。我没有停止,所以它变得更像是一个微内核。
Dropbox
Dropbox 的部分文件同步引擎使用 Rust。由于引擎是高度并发的,因此编写、测试和调试都很困难。因此,团队选择用 Rust 重写它。当您需要处理复杂的代码库和并发代码时,Rust 的静态类型和繁重的编译时检查使其优于 Python 等动态类型语言。
Rust 一直是我们团队的力量倍增器,押注 Rust 是我们做出的最佳决定之一。不仅仅是性能,它的人体工程学和对正确性的关注帮助我们驯服了同步的复杂性。我们可以在类型系统中编码关于我们系统的复杂不变量,并让编译器为我们检查它们。
在他们的技术博客上阅读更多关于 Dropbox 使用 Rust的信息。
Coursera
Coursera 将 Rust 用于他们的编程作业功能,学生需要编写和运行计算机程序来解决问题。这些程序在 Docker 容器中运行、测试和分级。出于安全原因,开发团队需要在部分代码中使用像 Rust 这样的低级语言,他们认为 Rust 比 C 更安全。
尽管 C 是默认的低级完全控制编程语言,但这些二进制文件具有严格的安全性和正确性要求。相反,我们选择了 Rust,一种来自 Mozilla 的现代本地语言。由于其强大的类型系统,Rust 的常见卖点之一是对某些类别的安全漏洞完全免疫,使其成为安全关键功能的绝佳选择。
你可以在他们的博客上获得更多关于他们使用 Rust 进行编程作业的详细信息。
Figma
Figma 是一个基于 Web 的协作设计工具,用于矢量图形和界面原型设计。他们选择用 Rust(以前是 TypeScript)重写他们的多人同步引擎以提高性能,因为他们的服务器无法跟上用户增长的速度。
我们选择 Rust 进行这次重写,因为它结合了一流的速度和低资源使用率,同时仍提供标准服务器语言的安全性。低资源使用对我们来说尤其重要,因为旧服务器的一些性能问题是由垃圾收集器引起的。
在他们的博客上了解有关 Figma 使用 Rust 的更多信息。
npm
npm 是 JavaScript 的包管理器。它的工程团队选择用 Rust 重写他们的主要服务,因为他们看到如果用户增长跟上,服务的性能很快就会成为瓶颈。他们拒绝了 C 和 C++ 等技术,因为他们不相信自己能够处理 Web 公开服务的内存管理。Java 被拒绝了,因为它涉及在他们的服务器上部署 JVM。?
npm 面临的挑战需要高效且可扩展的解决方案。当一项服务可以部署后忘记时,这可以节省宝贵的运营时间并让他们专注于其他问题。npm 员工还重视围绕他们使用的任何技术建立一个有用的社区。Rust 符合所有这些标准,目前作为 npm 堆栈的一部分使用。
要了解更多信息,请阅读他们在 Rust 主页上的案例研究。
微软
微软最近一直在尝试将 Rust 集成到其大型 C/C++ 代码库中。
在微软采用 Rust 的主要论据是 Rust 提供的内存安全性。在过去的 12 年中,微软发现的大约 70% 的 CVE(常见漏洞和暴露)与内存安全有关。Microsoft 已经尝试了各种选项来解决此问题,例如广泛的开发人员培训和静态分析工具。但是,似乎唯一的出路是使这些漏洞无法实现。
Cloudflare
Cloudflare 在其核心边缘逻辑中使用 Rust 并作为 C 的替代品,后者是内存不安全的。他们的GitHub展示了 18 个使用 Rust 的开源存储库,在他们的博客上,他们记录了将其用于Firewall Rules的文档,这是一个非常可定制的防火墙工具。
由于对性能、内存安全、低内存使用以及成为我们正在开发的其他产品(如 Spectrum)的一部分的能力的混合要求,Rust 脱颖而出,成为最强大的选择。(资源)
Facebook 使用 Rust 重写其源代码控制后端,该后端是用 Python 编写的。他们正在寻找一种编译语言来重写它,并因为它的安全优势而被 Rust 所吸引。从那时起,Rust 就被源代码控制团队采用。作为采用的原因,他们提到了 Facebook 的巨大错误成本和编译器反馈循环的简易性,这与静态分析和代码审查形成鲜明对比。
Rust 在编译时检测到大量严重的错误。编译时出现错误的成本比生产时低几个数量级。
亚马逊
AWS 已将 Rust 用于 Lambda、EC2 和 S3 等服务的性能敏感组件。此外,该公司公开支持和赞助该语言及其生态系统的发展。
亚马逊还开源了一项完全用 Rust 编写的服务。Firecracker VMM是为 AWS Lambda 和 AWS Fargate 等服务构建的虚拟机监视器。
Discord
Discord 在其代码库的多个位置使用 Rust,包括客户端和服务器端。
例如,该团队使用 Rust 和Elixir通过使用 Elixir NIF(本机实现函数)将并发用户扩展到 1100 万。在这种情况下,Rust 使他们能够加速现有的 Elixir 代码库,同时保证所有内存安全。
他们还用 Rust(最初是在 Go 中)重写了他们的 Read States 服务。虽然 Go 版本的服务在大多数情况下都足够快,但由于 Go 的内存模型和垃圾收集器,有时会出现较大的延迟峰值。
为了解决这个问题,Discord 改用 Rust,它提供了一个独特的内存分配系统,不需要垃圾收集。
除了性能,Rust 对于工程团队来说还有很多优势。例如,它的类型安全和借用检查器使得在产品需求变化或发现有关语言的新知识时重构代码变得非常容易。此外,生态系统和工具非常出色,并且背后有很大的动力。
要了解更多关于他们使用 Rust 的信息,请查看他们博客上的这篇文章。
Rust 的未来
在大多数这些公司中,Rust 是 C 的严格替代品——你可以看到在 Rust 中为了避免性能下降而进行的重写的可见模式。当团队需要额外的性能但想要避免与 C 相关的内存问题时,他们会使用它。
但是 Rust 有更多的好处:它使底层编程更容易访问,对 WASM 有很好的支持,并且非常适合并发性。我什至不会开始谈论社区。❤️
未来,随着越来越多的公司发现 Rust 如何改进他们的代码库,预计 Rust 的使用会增加。