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

程序员的店小二 程序员的店小二     2022-12-07     408

关键词:

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

程序员离职删代码被判10个月,京东到家说恢复数据库花了3万,网友:这是真有仇啊...

...上热搜,浏览量过亿。不过,这一次删掉的不是数据库,而是自己亲手写下的代码!当事人是一名29岁的程序员,给京东到家平台开发了3个月的代码。离职当天,他删掉了自己写的一系列代码,包括平... 查看详情

花2个月面过华为测开岗,拿个30k不过分吧?

...较短(小于两个月),于是找的实习是在一家初创公司里面做全栈。本人面试的是测试开发岗,在2022年初进行申请,最终在4月份拿到 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

年前花2个月面过阿里测开岗,拿个27k也不过分吧?

...较短(小于两个月),于是找的实习是在一家初创公司里面做全栈。本人面试的是测试开发岗,在2022年初进行申请,最终在4月份拿到oc。期间经历了笔试->性格测试->技术一面->技术二面->总监面->OC... 查看详情

年前花2个月面过阿里测开岗,拿个27k也不过分吧?

...较短(小于两个月),于是找的实习是在一家初创公司里面做全栈。本人面试的是测试开发岗,在2022年初进行申请,最终在4月份拿到oc。期间经历了笔试->性格测试->技术一面->技术二面->总监面->OC... 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

flutter2020春季更新,你还不来看看?是不是又变了!

...人员使用macOS,13%的人员使用Linux。有35%的开发人员为初创公司工作,26%的开发者为企业开发人员,19%则是个体经营者,还有7%的用户为设计机构工作。78%的Flutter开发人员使用稳定版渠道,11%的用户使用Beta版,11%的用... 查看详情

偷偷爆料下各公司年终奖!(27日最新版)(代码片段)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

偷偷爆料下各公司年终奖!(27日最新版)(代码片段)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

初创公司的运营思考

初创品牌,就像新生儿做手术一样,你一刀下去,稍微不小心,它就死了。创始人和投资人会组队砍你全家的。所以大部分广告公司遇到初创品牌都是躲着走的,又没什么钱,也不怎么会合作,要求又奇怪,付款还不稳定,搞不... 查看详情

云计算正在改变着初创企业

初创企业为了更快的在市场中竞争,那么就要考虑到云计算的实施方案。如果企业没有想出一个合理的方案,那么必将弱后于其他竞争对手。 那么云计算能为初创企业带来什么。基于云计算的数据在规模上可以负担基于云意味... 查看详情

偷偷爆料下各个大厂的年终奖,看完直接自闭!

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

又一家初创公司获得数千万融资进军边缘计算赛道!

近日,边缘计算社区从36Kr获悉北京云枢讯联科技有限公司(CloudHub)连续融资融了两轮数千万元,一起了解一下这个公司及背后的股东。1.云枢讯联是一家什么样的公司?云枢讯联是一家总部位于北京的技术能... 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

偷偷爆料下各公司年终奖!(最新版)

...果有求职、跳槽的打算,也可以作为参考信息。一些公司还没有发年终奖,但是也有领导的预沟通,属于提前爆料信息,也是有一定的参考价值。1、字节、北京、抖音、前端、年终奖总额40万(8个月年终)... 查看详情

创业公司的技术选型

...停下业务花几个月时间去重构整个系统。 可以说,对初创团队的技术leader,最重要的事情就是选择正确 查看详情