【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

初创数据库公司的疯狂行为:删掉花 7 个月开发的 27 万行 C++ 代码,用 Rust 全部重写一遍

  • 2022-05-25
  • 本文字数:2488 字

    阅读完需:约 8 分钟

初创数据库公司的疯狂行为:删掉花7个月开发的27万行C++代码,用Rust全部重写一遍

C++编程语言已经不是用来构建数据库的最佳选择了吗?

 

数据库初创企业 Singularity Data Inc.(中文简称奇点无限)最近发表了一篇博客文章,宣布他们完全删除掉了 RisingWave 的 27 万行 C++代码库,并用 Rust 语言从头开始重写了一遍系统。

 

RisingWave 于 2021 年初开始创建,决定重写时,他们已经花了 7 个月的时间进行开发。按创始人的话说,用 Rust 重写也意味着“七个月的努力都白费了。对于早期创业公司来说,这是一个疯狂的决定。特别是在竞争激烈的环境中,对科技初创公司来说,时间几乎就是一切。”

 

C/C++ 是用来构建数据库系统的最流行的编程语言之一。大多数知名的数据库系统,包括 MySQL、PostgreSQL、Oracle 和 IBM Db2,都是用 C/C++ 创建的。对于现在的数据库创业企业来说,选择使用 C++已经不是一个最佳的选择了吗?

 

RisingWave 是什么?

 

RisingWave 是初创企业“奇点无限”开发的云原生流式数据库,主要服务于需要超低延迟实时数据分析应用。

 

创始人 &CEO 吴英骏博士认为,因为 Flink 有几个关键特性,比如,作为流计算引擎,不提供数据持久化能力;计算和存储耦合,虽有极高的可扩展性,但弹性难以管理和实现,使用 Flink 来支持流式应用程序可能会非常昂贵等等......所以在云时代,“Flink 可能不再是流处理的最佳答案”。

 

为了简化流处理,他们重新审视了一个古老的研究方向:流式数据库。流式数据库的思想可以追溯到数据流管理系统 (DSMS)的早期提议,它用与数据库中的数据管理相同的方式管理数据流。与许多其他数据库一样,RisingWave 被设计为可以提取数据、存储数据并回应来自最终用户的并发访问请求,所有这些请求都可以用 PostgreSQL 风格的 SQL 来表达。

 

因此,RisingWave 的定位不仅是一个 SQL 数据库系统,还提供流处理能力:使用流数据,执行连续查询,并以物化视图的形式动态维护结果。另外,它还采用分层架构,建立在现代云基础架构之上,利用云资源为用户提供对成本和性能的细粒度控制。与传统的 SQL 数据库相比,RisingWave 最终目标是给用户提供以低延迟处理流数据的能力,如在大数据场景下实现亚秒级商业分析。

 

据国内媒体报道,“奇点无限”于 2021 年 7 月宣布获种子轮近千万美元融资,由云启资本领投,融资用于产品开发和团队组建。该公司在北京、上海、旧金山湾区设有办公室,媒体报道将之定位为“一家国际化的数据库初创公司”。

 

2022 年 4 月,“奇点无限”开源了 Rust 编写的 RisingWave :https://github.com/singularity-data/risingwave

 

其博客文章显示,RisingWave 开源后就很快成为了“使用 Rust 编写的第一大热门项目”。

 

为什么换掉 C++?

 

2021 年初开始构建该数据库时,RisingWave 团队选择了用 C++ 来实现自己的新一代的流式数据库。当时的创始团队由多位具有 10 年以上相关经验的资深 C++ 工程师组成。

 

随着公司规模扩大,工程师人员的增加,他们开始被 C++的“缺点”所困扰:代码可读性差、存在内存泄露和 segmentation fault 等。于是,经过约 7 个月的开发阶段后,团队开始有了质疑:“C++ 语言是编写新数据库系统的正确选择吗?”

 

C/C++ 无疑是用于构建数据库系统的最流行的编程语言之一,大多数著名的数据库系统都是用 C/C++ 创建的。因此对于这么一家从零开始构建大规模数据库系统的早期创业公司来说,既然大量的数据库是用 C/C++ 构建的,那么它就已被证明是一种可行的系统编程语言;除此之外,C++ 还为开发人员提供了开发高性能程序的机会,提供了对内存和计算的细粒度控制。

 

但坏处是:

 

  • 虽然 C++ 为程序员提供了很大的灵活性,但它是有代价的。非常容易写出 bug,还极其难以调试,尤其是并发编程。

  • 依赖管理可能很麻烦。虽然如 CMake 工具可以自动配置 C++ 项目的编译,但开发者仍然需要手动配置和安装依赖库。

 

更为麻烦的是:

 

  • STL 库缺乏对一些现代编程工具的支持,依赖的社区项目大多数还都缺乏长期支持。

  • 质量保证具有挑战性。C++ 支持的特性如此之多,以至于不同的开发人员可以以截然不同的风格编写 C++。不同背景的开发人员在一个团队中,保持代码可读性有困难。此外,C++ 代码中的 bug 很难识别,因此审查代码会变得令人生畏。

 

另外,流式数据库通常用于对延迟非常敏感的关键任务。因此只能使用以下语言构建 RisingWave:保证零成本抽象,不会有性能上限;不需要运行时垃圾收集,可以控制可能由内存管理引起的延迟峰值。

 

考虑到这两个性能目标,经过一个月的讨论之后,RisingWave 做出了从 C++ 迁移到 Rust 的决定。

 


(截图来自网络)

 

虽然 Rust 也含有不好的一面,比如“碎片化的异步生态系统、繁琐的错误处理”等,但出于“安全、易于使用、易于学习、易于管理”四大原因,所以 RisingWave 认为 Rust 是一个更好的选择,可以减轻开发人员的精神负担,为高效的大规模协作铺平道路。

 


(图片来源:https://singularity-data.com/blog/building-a-cloud-database-from-scratch-why-we-moved-from-cpp-to-rust

 

作出决定后,RisingWave 团队花了约两个月的时间完全删除之前的 C++ 代码库,并用 Rust 重写了一遍系统,总共删除了 276,406 行代码。

 

写在最后

 

尽管 Rust 带来了明显的好处,但重写整个代码库并不是一件好玩的事情,而且这件事也不代表“每个数据库团队都可以放弃 C++转而选择用 Rust”。

 

吴英骏博士在文中表示,其实还有些关键因素存在:一是当时他们正在重构代码库以适应新的系统架构,重写(至少一部分)代码库是不可避免的事情;二是团队中有一些 Rust 爱好者不断向其他工程师宣传 Rust,并说服整个团队用 Rust 重写是一个实用的选择;三是 2021 年夏天后工程团队迅速扩大,大大加快了代码库的重写速度。如果缺少这些因素,就不会让他们作出迁移到 Rust 的决定。

 

Rust 是很酷的编程语言,值得每个人都尝试一下,但是重写项目却要认真考虑,“Rust(或任何其他语言)永远不会决定项目的命运,但做出明智的选择可能会为你节省数百甚至数千人月”。

 

参考链接:

https://singularity-data.com/blog/building-a-cloud-database-from-scratch-why-we-moved-from-cpp-to-rust

https://singularity-data.com/blog/is-risingwave-the-next-apache-flink/

https://mp.weixin.qq.com/s/lfqH3rJjMpRPKpIp-9__kw

 

2022-05-25 14:577830

评论 3 条评论

发布
用户头像
暴露了公司缺乏能解决内存泄露和segmentation fault问题的人才。比如说我这样的。(^_^)
2022-06-01 09:52
回复
用户头像
推倒重写,秀到飞起!
2022-05-27 13:15
回复
用户头像
测试驱动开发不香吗?
2022-05-27 08:51
回复
没有更多了
发现更多内容

性能优化(文件、数据结构、算法、网络IO)

ABS

第8周作业

paul

第八周作业

详解快速开发平台与工作流通用组件的设计规范

Philips

敏捷开发 快速开发 企业应用

springboot+java+redis 简单实用的搜索栏热搜,个人历史记录,文字过滤

灰尘子

架构师 01 期,第八周课后作业

子文

架构师训练营第八周课程笔记及心得

Airs

week4-一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

未来已来

虽然世界给我们变化,但让我们的人生更向幸福靠近一点点,而入门票就是自学这回事

叶小鍵

第八周总结

不可思议,竟然还有人不会查看GC垃圾回收日志?

田维常

垃圾回收 GC

【架构师训练营 1 期】第八周作业

诺乐

【架构师训练营 1 期】第八周学习总结

诺乐

找出两个链表中合并的元素

将减少阻力的香蕉法则,运用在软件开发上会产生什么效果?

Philips

敏捷开发 快速开发 企业应用

架构师训练营 2 期 Week04 总结

week4-作业二:根据当周学习情况,完成一篇学习总结

未来已来

第八周

等燕归

Week4 系统架构

贺志鹏

极客大学架构师训练营

第四周作业

jizhi7

极客大学架构师训练营

架构师训练营第一期 - 第八周课后作业

卖猪肉的大叔

极客大学架构师训练营

浅谈软件研发管理体系建设

大黄蜂

架构师训练营 - 第 8 周课后作业(1 期)

Pudding

架构训练营 - 第8周课后作业 - 学习总结

Pudding

第四周总结

jizhi7

架构师训练营第一期 - 第八周学习总结

卖猪肉的大叔

极客大学架构师训练营

面试重灾区——Synchronized深度解析

执墨

并发编程 synchronized 内存布局 CAS 锁升级

架构师训练营第 1 期第 8 周作业

owl

极客大学架构师训练营

极客大学 - 架构师训练营 第九周

9527

互联网应用架构目标及技术方案

《Java程序员修炼之道》.pdf

田维常

初创数据库公司的疯狂行为:删掉花7个月开发的27万行C++代码,用Rust全部重写一遍_语言 & 开发_Tina_InfoQ精选文章