认识用 Rust 重写产品的创始人

导航至

网络研讨会创始人见面会:关于使用 Rust 重写的公开讨论包括 Mrinal Wadhwa(Ockam 首席技术官兼创始人)和 Paul Dix(InfluxData 首席技术官兼创始人)之间关于他们分别从 C 和 Go 全面重写为 Rust 的深入对话。Ockam 正在开发中,而 InfluxDB(InfluxData 的产品)已在生产中,但两位首席技术官都得出了相同的结论:他们当前的编码语言无法满足需求。因此,他们都选择了全面重写。风险巨大,回报也巨大。

Ockam

Ockam 是一款开源工具,为所有运动中的数据提供端到端加密。开发者可以在每个应用程序中运行 Ockam,以在所有连接的应用程序之间创建安全的通信通道。即使 Ockam 尚未投入生产,但用 Rust 进行全面重写的决定也并非易事。一旦这个想法被提出,又经过了几个月的决策过程,选择才变得清晰。那时,开发者已经投入了大约八个月的工作,并用 C 语言编写了数万行代码。

最终,该决定归结为几件事。Ockam 的代码库使用起来并不简单,也不容易维护。Ockam 的核心由加密消息传递协议组成。对于加密消息传递协议,一个微小的失误就会导致整个系统不安全。这是 Ockam 无法接受的。他们希望用户拥有一个安全、易于使用的库来创建这些安全的通信通道。

InfluxDB

InfluxDB 是一个专为数据库设计的时间序列数据。InfluxDB 1.x 和 2.x 用 Go 语言开发,具有许多优势。处理指标数据是其最强大的用例之一。但与许多其他成功的产品一样,InfluxDB 也在不断发展。Dix 预见到 InfluxDB 的下一次演进将扩大其最佳用例。分层存储——为客户提供将数据从内存移动到本地连接的、更便宜的、SSD 磁盘支持的对象存储的机会——是这些新功能之一。允许更多高基数元数据和原生 SQL 支持也是 InfluxDB 下一次迭代的首要目标。很快就清楚,这种演进不仅仅是添加一个功能。而是一次全面的数据库重写。

这次重写,现在被称为InfluxDB 3.0,始于 2019 年,作为一个研究项目。一旦 Rust 的 async/await 工具(用于处理异步函数)在 2019 年秋季可用,Dix 就支持该语言作为 InfluxDB 3.0 的选择。在 2020 年秋季,重写开始成形。由三名工程师组成的小型研究团队选择并理解了他们将包含在新数据库中的软件工具。

这些工具,之前都是用 Rust 编写的,包括 Apache ArrowApache ParquetDataFusion。Apache Arrow 是一个开源项目,为平面和分层数据提供标准化的列式内存格式。采用 Arrow 的主要好处是性能提升。Apache Parquet 是数据持久化格式。DataFusion 是 SQL 解析器、计划器、优化器和执行器。

即使定义了工具,仍然不清楚重写是否会成为可行的产品。在 2022 年夏天团队扩员之前,InfluxDB 的工程工作只有 10% 用于重写。这次重写的结果,InfluxDB Cloud ServerlessInfluxDB Cloud Dedicated,已于 2023 年初推出,而 InfluxDB 3.0 Clustered 将于今年秋季推出。InfluxDB 3.0 的其余产品将于 2023 年末和 2024 年初推出。

为什么选择 Rust?

优势

Rust 是一种高性能语言。由于应用程序的性质,Ockam 和 InfluxDB 都需要高性能工具。Rust 具有无畏的并发性,这使得开发者可以编写没有细微错误的代码。这也使得应用程序易于重构,而不会引入新的错误。

Rust 的借用检查器会在使用所有变量之前对其进行初始化,这意味着同一个值不会被意外使用两次。Rust 可以与任何与 C 兼容的编程语言一起工作,因为 Rust 库可以导出与 C 调用约定兼容的接口。其他特性,例如包管理器、将错误作为一等公民以及开发者不必处理垃圾回收器,也是两个工程团队选择用 Rust 重写的原因。

Rust 的 async/await 工具是该语言的另一个加分项。它比 JavaScript 的 async/await 工具更高级。在 JavaScript 中,当异步函数在 Node.js 中执行时,无法控制它们的特定执行顺序。然而,在 Rust 中,开发者可以使用异步运行时来确定异步函数的执行顺序。异步运行时是针对在特定环境中执行异步函数而优化的不同运行时。结果是高度的运行时控制。

挑战

Rust 有很多优点,但也存在缺点。Rust 是一种非常难学的语言。Rust 的设计模式是不同的。其中一些是借用检查器的直接结果,另一些则源于该语言本身。

另一个潜在的绊脚石是 Rust 漫长的编译时间。因此,开发者必须学习编写优化编译时间的代码。但这种艰难的攀登可能是值得的,因为 Dix 认为,开发者和公司将越来越多地用 Rust 编写高性能服务器软件。

只有动态编程语言背景(如 Python、Ruby 或 JavaScript)的开发者比具有静态编程背景(如 C++ 或 Swift)的开发者更难学习 Rust。

Dix 和 Wadhwa 建议使用诸如 免费的 Rust 在线书籍、O’Reilly 出版的书籍 Programming Rust 等工具,并借鉴其他人的专业知识来缓解过渡。Ockam 创建了一个伙伴系统,将具有 Rust 专业知识的开发者与在协议设计等方面具有专业知识的其他人配对。InfluxDB 使用了一家咨询服务公司 Integer 32,该公司主持了培训课程并回答了问题。

了解更多关于 Rust 和 InfluxDB 3.0 的信息

人们对 InfluxDB 的重写感到非常兴奋。InfluxDB 社区对其特性和功能感到兴奋。Rust 社区也很兴奋,因为 InfluxDB 推广 Rust 作为社区和一种语言。

了解更多关于 InfluxDB Cloud ServerlessInfluxDB Cloud Dedicated 的信息,或立即开始使用免费云账户