与重新用Rust编写的创始人见面

导航到

网络研讨会《与创始人见面:关于使用Rust重写的公开讨论》包括Ockam的CTO和创始人Mrinal Wadhwa与InfluxData的CTO和创始人Paul Dix之间的深入对话。Ockam正在开发中,InfluxData的产品InfluxDB已投入生产,但这两位CTO得出了相同的结论:他们当前的编程语言不足以应对。因此,他们都选择了完全重写。风险与回报并存。

Ockam

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

最终,决定取决于几个因素。Ockam的代码库不易使用或维护。Ockam的核心是加密消息协议。使用加密消息协议时,一个小错误会导致整个系统不安全。这对Ockam来说是无法接受的。他们希望用户能够拥有一个安全、易于使用的库来创建这些安全的通信通道。

InfluxDB

InfluxDB是为时间序列数据量身定制的数据库。在Go语言中开发,InfluxDB 1.x和2.x具有许多优势。与指标数据一起工作是其最强大的用例之一。但与其他许多成功的产品一样,InfluxDB也在不断进化。Dix看到了InfluxDB下一阶段的进化将扩大其最佳用例。分层存储——为客户提供将数据从内存移动到成本更低的本地连接、基于SSD的磁盘支持的对象存储的机会——是这些新功能之一。允许更多高基数元数据和原生SQL支持也是InfluxDB下一版本的高优先级目标。很快,这种进化不仅仅是添加功能。它是一个完整的数据库重写。

重写工作现在被称为 InfluxDB 3.0,始于2019年,当时是一个研究项目。2019年秋季,Rust的异步/等待工具可用于处理异步函数后,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的异步/等待工具是语言的一个加分项。它是一个比JavaScript的异步/等待工具更先进的版本。在JavaScript中,当异步函数在Node.js中执行时,无法控制它们的特定执行顺序。然而,在Rust中,开发者可以使用异步运行时来决定异步函数的执行顺序。异步运行时是不同的运行时,针对特定环境优化执行异步函数。结果是高度运行时控制。

挑战

Rust有很多优点,但也有缺点。Rust是一种很难学习的语言。Rust的设计模式不同。其中一些是借用检查器的直接结果,而其他则是语言本身的产物。

另一个潜在的问题是Rust漫长的编译时间。因此,开发者必须学会编写优化编译时间的代码。但这个艰难的攀登可能值得,因为Dix相信,未来开发者和公司将在Rust中编写更多的高性能服务器软件。

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

迪克斯和瓦德瓦推荐使用诸如免费Rust在线书籍、O'Reilly的书籍《Programming Rust》第二版《Programming Rust》以及借鉴他人的专业知识来帮助过渡。Ockam创建了一个伙伴系统,将Rust专家与在协议设计等方面有专长的人配对。InfluxDB使用了Integer 32咨询服务,该服务提供了培训课程并解答问题。

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

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

了解更多关于InfluxDB云无服务器InfluxDB云专用或现在就注册一个免费云账户