一、Rust语言简介
Rust作为一种新兴底层语言,已经悄然成为了最受欢迎的编程语言之一。Rust 拥有良好的内存安全性机制、不亚于 C 语言的性能优势、出色的开发者社区等等。
Rust语言的特点
高性能 – Rust速度惊人且内存利用率极高。由于没有运行时和垃圾回收,它能够胜任对性能要求特别高的服务,比如在嵌入式设备上运行,还能轻松和其他语言集成。
可靠性 – Rust丰富的类型系统和所有权模型保证了内存安全和线程安全,让您在编译期就能够消除各种各样的错误。
生产力 – Rust具有出色的文档、友好的编译器和清晰的错误提示信息。并且还集成了一流的工具 —— 包管理器和构建工具,智能地自动补全和类型检验的多编辑器支持, 以及自动格式化代码等等。
Rust的应用
Rust 语言可以用于开发以下类型的应用:
传统命令行程序 – Rust编译器可以直接生成目标可执行程序,不需要任何解释程序。
Web 应用 – Rust可以被编译成 WebAssembly,WebAssembly 是一种JavaScript 的高效替代品。
网络服务器 – Rust用极低的资源消耗做到安全高效,且具备很强的大规模并发处理能力,十分适合开发普通或极端的服务器程序。
嵌入式设备 – Rust同时具有JavaScript类似的高效开发语法,并且同时具有C语言的执行效率,支持底层平台的开发。
二、大厂选择Rust的理由
当前已经有多个著名公司选择 Rust作为核心关键模块的编程语言。以下甄选了9个Rust 成功应用的案例。
1、DropBox
Dropbox 使用 Rust 作为其部分文件同步引擎。由于文件同步引擎是高度并发的,所以编写、测试和调试都很困难。因此,团队选择用 Rust 将这部分进行了重写。
2、Coursera
Coursera 在他们的编程作业功能中使用了 Rust,学生需要编写并运行一个计算机程序来解决一个问题。程序在 Docker 容器中运行、测试和分级。出于安全原因,开发团队需要对某些代码使用像 Rust 这样的低级语言,他们认为 Rust 比 C 更安全。
3、Figma
Figma 是一个基于 web 的矢量图形和界面原型设计工具。他们选择在 Rust(以前用的是 Type) 中重写他们的多人同步引擎以提高性能,因为他们的服务器能力已经无法满足用户的增长速度需求了。
我们选择用 Rust 进行重写,因为它在同类语言中有着最好的速度和较低的资源使用率,同时还具有标准服务器语言的安全性。
4、npm
npm 是一个 Java 的包管理器。之所以它的工程师团队选择用 Rust 重写他们的主要服务,是因为他们意识到,如果用户继续增长,服务器的性能很快就会成为瓶颈。他们拒绝使用像 C 和 C++ 这样的技术,因为他们觉得 C 和 C++ 处理不好 web 公共服务的内存管理问题。npm 不使用 Java 的原因,是因为 java 需要在服务器上部署 JVM。
npm 面临的挑战只有高效和可伸缩的解决方案才能解决。假如一个服务部署后就不用关心它的存在,便可以节省工程师宝贵的研发时间,让他们关注其他问题。npm 员工也很重视一种技术生态中是否有对其提供帮助的技术社区。Rust 符合所有这些标准,所以 Rust 现在是 npm 的技术堆栈之一。
5、Microsoft
Microsoft 最近开始尝试将 Rust 集成到其大型 C/ C++ 代码工程中。Microsoft 采用 Rust 的主要原因是其提供的内存安全性。过去的 12 年里,在 Microsoft 发现的 CVEs(常见的漏洞和缺陷) 中大约有 70% 与内存安全有关。
6、Cloudflare
Cloudflare 在其核心边缘逻辑中使用了 Rust,并将其作为内存不安全的 C 的替代方案。
他们在 GitHub 上展示了 18 个使用 Rust 的开源仓库,在他们的博客上记录了使用 Rust 开发防火墙规则的文档,这是一个可灵活定制的防火墙工具。
7、Facebook(现在改名叫Meta Platforms了)
Facebook 使用 Rust 重写了之前用 Python 编写的源码控制后端。他们曾经一直在寻找一种编译语言来重写它,Rust 的安全性吸引力还是很足的,之后 Rust 就被源代码控制团队使用了。让 Facebook 采用 Rust 的原因,主要是编译器反馈循环的易用性可以帮助降低 bug 造成的经济损失,而不是静态分析和代码审查。
8、Amazon
AWS 已经在 Lambda、EC2 和 S3 等对性能敏感的服务组件上使用了 Rust。此外,该公司公开支持和赞助该语言及其生态系统的开发。亚马逊也有一个完全用 Rust 编写的开源服务 Firecracker VMM。它是一个虚拟机监视器,最初目的是为 AWS Lambda 和 AWS Fargate 服务构建的。
9、Discord
Discord 在其多个工程中使用了 Rust,包括客户端和服务器端。例如,通过使用 Elixir NIFs(原生实现的功能),团队基于 Rust 和 Elixir 将并发用户量扩展到了 1100 万。在这种情况下,Rust 使他们能够在保证内存安全的同时提升现有 Elixir 代码的效率。他们还在 Rust(原来是 Go)中重写了 Read state 服务。虽然 Go 版本的服务在大多数情况下性能已经足够快了,但由于 Go 的内存模型和垃圾收集器缺陷,它有时会出现较大的延迟峰值。为了解决这个问题,不得不切换使用 Rust,它提供了一种独特的内存分配系统,不再使用垃圾收集器。
本文的9个案例最初发表于 https://serokell.io/(《9Companies That Use Rust in Production》),并由 InfoQ 翻译并分享。 |