本文最初发表于 https://serokell.io/(《9 Companies That Use Rust in Production》),经原作者授权,由 InfoQ 翻译并分享。
你可能还不知道,Rust 已经是目前最有前途且最受欢迎的编程语言之一了。
它最初由 Mozilla 创建,后来被 Dropbox、 Microsoft、Facebook 等公司采用。Rust 的主要优点是,它在保持使用 JavaScript 和 Python 等语言进行开发时所拥有的内存安全性的同时,还能够实现不亚于 C 的性能。
在这篇文章中,我将介绍 9 家使用 Rust 的大公司,并探究他们选择 Rust 的原因。
Dropbox 使用 Rust 作为其部分文件同步引擎。由于文件同步引擎是高度并发的,所以编写、测试和调试都很困难。因此,团队选择用 Rust 将这部分进行了重写。当需要处理复杂的代码库和并发时,Rust 的静态类型和编译时检查使它比 Python 等动态类型语言更具有优势。
Rust 是我们团队的力量倍增器,使用 Rust 是我们做出的最正确的决定之一。除了性能,它的人机工程学和对准确性的保证帮助我们降低了同步的复杂性。我们可以在类型系统中对系统的复数不变量进行编码,并让编译器为我们检查它们。(原文)
Dropbox 的技术博客上有更多关于 Rust 的使用信息。
Coursera 在他们的编程作业功能中使用了 Rust,学生需要编写并运行一个计算机程序来解决一个问题。程序在 Docker 容器中运行、测试和分级。出于安全原因,开发团队需要对某些代码使用像 Rust 这样的低级语言,他们认为 Rust 比 C 更安全。
尽管 C 是大家默认的低级控制编程语言,但是它对二进制文件有严格的安全性和正确性要求。我们选择了 Rust,一种来自 Mozilla 的现代原生语言。Rust 的一个重要的特点是其强大的类型系统,它完全不受某些类型安全漏洞的影响,这使它成为实现关键安全功能的极佳选择。(原文)
你可以到他们的博客上获得更多关于他们在编程任务中使用 Rust 的详细信息。
Figma 是一个基于 web 的矢量图形和界面原型设计工具。他们选择在 Rust(以前用的是 TypeScript) 中重写他们的多人同步引擎以提高性能,因为他们的服务器能力已经无法满足用户的增长速度需求了。
我们选择用 Rust 进行重写,因为它在同类语言中有着最好的速度和较低的资源使用率,同时还具有标准服务器语言的安全性。低资源使用率对我们来说特别重要,因为旧服务器的一些性能问题是由垃圾回收器导致的,而 Rust 不会有这个问题。(原文)
Figma 的博客上有更多关于 Rust 的使用文章。
npm 是一个 JavaScript 的包管理器。之所以它的工程师团队选择用 Rust 重写他们的主要服务,是因为他们意识到,如果用户继续增长,服务器的性能很快就会成为瓶颈。他们拒绝使用像 C 和 C++ 这样的技术,因为他们觉得 C 和 C++ 处理不好 web 公共服务的内存管理问题。npm 不使用 Java 的原因,是因为 java 需要在服务器上部署 JVM。
npm 面临的挑战只有高效和可伸缩的解决方案才能解决。假如一个服务部署后就不用关心它的存在,便可以节省工程师宝贵的研发时间,让他们关注其他问题。npm 员工也很重视一种技术生态中是否有对其提供帮助的技术社区。Rust 符合所有这些标准,所以 Rust 现在是 npm 的技术堆栈之一。(原文)
想要了解更多的话,请阅读 Rust 主页上的案例研究。
Microsoft 最近开始尝试将 Rust 集成到其大型 C/ C++ 代码工程中。
Microsoft 采用 Rust 的主要原因是其提供的内存安全性。过去的 12 年里,在 Microsoft 发现的 CVEs(常见的漏洞和缺陷) 中大约有 70% 与内存安全有关。Microsoft 已经尝试了各种方法来解决这个问题,例如对开发人员进行大量的培训、使用静态分析工具等。然而,最终发现想要解决这个问题的办法只能是在内存安全上下功夫,把这条路堵上。
Cloudflare 在其核心边缘逻辑中使用了 Rust,并将其作为内存不安全的 C 的替代方案。
他们在 GitHub 上展示了 18 个使用 Rust 的开源仓库,在他们的博客上记录了使用 Rust 开发防火墙规则的文档,这是一个可灵活定制的防火墙工具。
通过对性能、内存安全、低内存的需求评估,综合我们正在开发的其他产品 (如 Spectrum) 的能力需求,Rust 脱颖而出,成为了最佳的方案选择。(原文)
Facebook 使用 Rust 重写了之前用 Python 编写的源码控制后端。他们曾经一直在寻找一种编译语言来重写它,Rust 的安全性吸引力还是很足的,之后 Rust 就被源代码控制团队使用了。让 Facebook 采用 Rust 的原因,主要是编译器反馈循环的易用性可以帮助降低 bug 造成的经济损失,而不是静态分析和代码审查。
Rust 在编译时可检测出大量的严重错误,一个错误在编译时造成的损失要比在生产时少几个数量级。
AWS 已经在 Lambda、EC2 和 S3 等对性能敏感的服务组件上使用了 Rust。此外,该公司公开支持和赞助该语言及其生态系统的开发。
亚马逊也有一个完全用 Rust 编写的开源服务 Firecracker VMM。它是一个虚拟机监视器,最初目的是为 AWS Lambda 和 AWS Fargate 服务构建的。
Discord 在其多个工程中使用了 Rust,包括客户端和服务器端。
例如,通过使用 Elixir NIFs(原生实现的功能),团队基于 Rust 和 Elixir 将并发用户量扩展到了 1100 万。在这种情况下,Rust 使他们能够在保证内存安全的同时提升现有 Elixir 代码的效率。
他们还在 Rust(原来是 Go)中重写了 Read state 服务。虽然 Go 版本的服务在大多数情况下性能已经足够快了,但由于 Go 的内存模型和垃圾收集器缺陷,它有时会出现较大的延迟峰值。
为了解决这个问题,不得不切换使用 Rust,它提供了一种独特的内存分配系统,不再使用垃圾收集器。
除了性能之外,Rust 对工程团队还有许多优势。例如, 它的类型安全性和 borrow checker 特性,使得在产品需求发生变化或语言功能调整升级时,重构代码变得非常容易。此外,其生态系统和工具都非常优秀,并且发展状态良好。(原文)
想了解更多关于 Discord 使用 Rust 的信息,请查看他们博客上的这篇文章。
以上提到的大多数公司,Rust 都作为了 C 语言的一个更好的替代方案,用 Rust 进行重写,可以避免性能下降。当团队需要更优的性能,但又想避免与 C 相关的内存问题时,他们就会选择使用 Rust。
但是 Rust 的优势还不止这些:它使底层编程更容易,对 WASM 有出色的支持,并且对并发性支持更好,有着活跃的技术社区。
在未来,随着越来越多的公司发现 Rust 可以对自己现有的工程进行优化,预计 Rust 的使用量将会增加更多。
如果你想了解更多关于 Rust 的知识,可以到我们的博客上查看快速入门。
原文链接:
9 Companies That Use Rust in Production
https://serokell.io/blog/rust-companies
点击下方图片即可阅读
摁住巨头:腾讯阿里们要小心了?
InfoQ 写作平台欢迎所有热爱技术、热爱创作、热爱分享的内容创作者入驻!
还有更多超值活动等你来!
扫描下方二维码
填写申请,成为作者
点个在看少个 bug 👇