首页 » 博客 » CnosDB 涅槃重生:弃用Go, 全面拥抱Rust

CnosDB 涅槃重生:弃用Go, 全面拥抱Rust

CnosDB社区的爱码士们,想必大家最近已经发现了,基于Rust版本的CnosDB Isipho已经切换到GitHub主站,并且社区团队也不再维护与支持Go版本的CnosDB。首先还是给大家致以诚挚的歉意,之前的计划和决策的仓促给大家带来了不必要的麻烦。但是本着对社区负责的态度,在这里也给大家一个详细的解释:为什么我们放弃Go,拥抱Rust去构建一个新的时间序列数据库。

CnosDB 涅槃重生:弃用Go, 全面拥抱Rust

 

CnosDB Isipho是什么

CnosDB Isipho是一个基于Rust研发的时间序列数据库,具有高性能、高压缩比、高可用的特点,并且将来满足分布式云原生。从2022年3月开始,CnosDB团队开始在GitHub上开源了Isipho的源码,并且持续构建系统。CnosDB Isipho致力于解决时间线膨胀问题、具备超大规模时间序列支持以及更好的生态特性。关于CnosDB Isipho的特点及集体功能架构,可以参阅CnosDB Isipho的路线图:github.com/cnosdb/cnosd

相对于Go,Rust是一门更好的数据库开发语言

第一个版本的CnosDB选取了Go作为开发语言,当时认为Go可以很好的处理易用性和系统性能的平衡,但是随着对于Go语言的深入了解,我们也发现Go语言在数据库系统编写,尤其是时序数据库编写中的问题。

Go带来的问题主要有:Go runtime带来的 GC会引起性能抖动,而时序数据库需要在大负载环境下极其稳定;Go对泛型支持也不好,语言表达能力受限,如果需要对资源进行更好的操作,对于开发人员的要求非常高。我们的Go版本的性能测评并没有显著优于已有头部产品。Go版本仍然有很多的问题要去解决,为了应对云原生带来的挑战,更好的服务好企业上云,Go版本需要对原来的版本进行大规模重构,以便:提高分布式扩展性以及实现最终一致性模型;提升免运维的能力;提升存储和查询性能;同时支持多租户,云原生。

在我们困扰于Go语言所带来的的问题时,CnosDB的Isipho团队已经在Rust上开展了近五个月的工作。相对于Go语言,Rust具有以下特性:Rust 无GC,更精确的内存控制,硬件亲和性高;Rust 支持范型 match 表达式,表达能力更加丰富;Rust 有更高的可靠性,可以在编译期发现各种错误。开发者对Rust的喜爱也是溢于言表。

随着Rust 在基础软件领域的应用也蓬勃发展,甚至Linux也开始使用Rust进行系统内核的重构( zdnet.com/article/linus ),而且越来越多的数据库厂商开始尝试使用Rust去实现系统,我们也坚信,使用Rust可以构建更好的服务于客户的时序数据库。

为什么放弃Go版本

对于一个初创团队组织的开源社区,同时维护两个不同技术栈的产品,十分困难;团队也是很难进行有效的沟通和管理。开发团队在技术栈割裂的情况下已经艰难地进行了两个季度的工作,而我们观察到在我们社区上也有了分裂的迹象,有些爱码士倾向于Go版本的学习和使用,而更多的开发者涌入社区是因为我们的Rust版本和它的课程:《使用Rust构建一个TSDB》

如上文所述,时序数据库在朝云原生生态大幅度迈进,在Go版本上去实现诸如多租户、云原生等功能,几乎就是把原来的代码推倒重新来。Rust版本的进展顺利,让我们选择不继续在错误的路上蒙眼狂奔,而是进行了一个艰难的取舍,放弃Go语言版本,并将公司的全部开发力量投入Rust版本的研发,向社区和用户交付更好的下一代时序数据库产品。

现在,CnosDB Isipho版本的存储引擎已经构建完毕,开发团队正在全力开发查询引擎和索引功能,计划将在今年年底之前带来单机版本的CnosDB Isipho。同时ConsDB也竭诚希望对时序数据库、对Rust有兴趣的爱码士们加入CnosDB社区,贡献代码或者成为全职开发者。社区活动不会减少,大家在期待CnosDB Isipho的同时,我们继续推出丰富内容,包括但不限于混沌工程的课程以及Rust的后续课程。

始于万物互联,开源横跨五洲。希望大家继续关注和支持CnosDB!

参与CnosDB社区交流群:

扫描下方二维码,加入CC进入CnosDB社区进入社区交流,CC也会在群内分享直播链接哒