3

Facebook 是如何引入并使用 Rust 的?

 3 years ago
source link: https://www.techug.com/post/how-did-facebook-introduce-and-use-rust.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Facebook 正在拥抱当今最受欢迎 、发展最快的一门编程语言——Rust。当前,Facebook 除了为公司内部的 Rust 团队引进人才,还正式加入了 Rust 基金会,与 Mozilla(Rust 的创造者)、AWS、微软和谷歌等其他成员一起,致力于维持和发展 Rust 的开源生态系统。

Rust 为开发者提供了类似 C++ 之类的老编程语言的性能,并更注重代码的安全性。如今,在 Facebook 有数百名开发者在编写数百万行 Rust 代码。很明显, Facebook 未来在这门语言上的投入会越来越大。在分享未来的具体投入举措之前,有必要先了解下 Facebook 早期是如何引入并使用 Rust 的。

2016~2017 年:早期用于源代码控制

我们最古老的 Rust 代码库可以追溯到 2016 年。当时,Facebook 单体仓库中的源代码变化率开始“侵占” Mercurial 源代码控制管理工具所能跟上的最大提交率。对此,Facebook 的源代码控制团队发起了一项名为 Mononoke 的重写项目,旨在将 Mercurial 的提交率再提高一些数量级,从而满足 Facebook 成千上万的开发者和自动化流程。

起初,使用 C++ 开发 Mononoke 显然是个选择。在那时,Facebook 的后端代码库对 C++ 非常重视,这意味着 Mononoke 默认会使用 C++ 实现。但是,源代码控制团队需要考虑源代码控制管理后端的可靠性需求,如果服务因停机或损坏而造成停顿时,那么可靠性就成了首要的考虑因素。因此,团队选择使用 Rust 代替了 C++。

Mononoke 是一款优秀的测试平台,因为它和其他 Facebook 系统有着天然的隔阂。如果 Mononoke 能够使用 Mercurial 协议与客户端服务进行对话,并使用 Thrift 协议与某些存储系统进行通信,那么选择 Rust 不会影响源代码控制团队工作之外的任何事情。

源代码控制团队愿意采用并且能够支持他们自己使用任何 Rust 特定的工具和基础设施。从 2019 年开始,Mononoke 就已经成为我们单体仓库的生产后端,并在过去几年里成功地扩大了规模。

2017~2019 年:采用曲线

Mononoke 足以证明采用 Rust 是可行的,随着时间的推移,其他项目也开始考虑和采用 Rust。一开始,这些项目通常是开发者的工具项目,它们不需要与更广泛的服务基础设施进行集成,也不需要小型服务 / 守护进程,只需围绕一些 C++ 客户端库使用几个手写的包装器就能完成工作。

在 Facebook 的 Rust 工程师中,有许多人具有 Python 和 JavaScript 的背景,他们很欣赏 Rust 结合了高性能与编译时错误检测这一特性。随着越来越多的成功案例(例如性能提升了 2 到 4 个数量级等)在公司内部流传,人们对使用 Rust 实现后端服务代码,以及探索其在移动应用程序中的应用的兴趣越来越浓。

2019~2020 年:Rust 得到了一些专门支持

2017 年到 2019 年,源代码控制团队成为 Facebook 内的非官方 Rust 支持团队。到了 2019 年,Facebook 的 Rust 开发者数量成倍增长,达到 100 多人。

增长背后的原因之一是,Rust 是开发 Diem(原 Libra)区块链的主要语言,由独立的 Diem 协会监督,而 Facebook 的数字钱包 Novi 就是 Diem 协会的成员。Diem 区块链主要是由 Rust 编写的,并涵盖了 94% 的开源代码库

考虑到需求的增加,源代码控制团队的兼职协助并不足以支持受益的团队数量。因此,我们创建了一个小型的 Rust 开发者体验团队,该团队致力于解决工具和集成方面的挑战,比如在生产非 cargo 构建中使用语言的开源包注册表生态系统的机制。该团队为整个公司的 Rust 开发者建立了一个中央连接点以解锁用例,优先考虑短期的开发者体验问题,改进核心库,并在刚刚起步的 Rust 代码库通过百万行大关时为其成功奠定基础。

未来(2021 年及以后)

2020 年底,我们在编程语言组织中成立了一个 Rust 团队,以重申我们的承诺,该团队还负责 Facebook 的 C++ 标准工作和工具链。

从近期来看,这个新团队主要关注四个方面:

  • 从语言和工具链的角度支持内部用户:这包括工具链的推出、横切迁移、代码审查 / 审计、最佳实践,以及作为语言和工具链问题的连接点。

  • 在 Facebook 以外的社区作出积极的贡献:该团队对标准库和编译器进行代码审查,并为 Rust 社区的优先事项提供开发者资源。

  • Rust 与 C++ 的轻松、安全的互操作性:我们拥有大量的 C++ 代码,用于与服务所建立的后端系统的通信。在不牺牲 Rust 的优点的情况下,我们需要开发者能够安全、轻松地使用这些库。相反,如果我们希望看到 Rust 组件与更大的 C++ 二进制文件集成,我们就需要智能运行时的异步代码互操作性。Facebook 的服务器是高度分布式的,并且有大量线程。Rust 任务需要在 C++ 的线程池中良好运行,并且能够安全地共享同步原语和 I/O 资源。为了提高异步性,支持并迅速采用了 C++20 的协程,我们在 C++ 方面做了很多工作。把 Rust 带到游戏中就是它的扩展,它将建立在 Rust 在异步库栈中已经完成的出色工作的基础上。

  • 积极支持并参与 Rust 基金会的工作:自 2016 年以来,Facebook 一直致力于 Rust 社区并扩大其与 Rust 的发展。通过加入 Rust 基金会,我们成为白金会员,进一步履行这一承诺,并希望以一种积极和有影响力的方式帮助 Rust 继续取得进展并得到应用。

Facebook 的 Rust 之旅远没有结束。这支团队虽小,但随着支持需求的增加,会不断壮大。Rust 在 Facebook 和整个行业的发展轨迹让我们感到兴奋和乐观,Facebook 内部的工作日程安排、开源贡献和更多面向社区的工作都将在 2021 年展开。

原文链接:

https://engineering.fb.com/2021/04/29/developer-tools/rust/

本文文字及图片出自 InfoQ


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK