开源项目巅峰之路:探索“最后一公里”的不断精炼

发表时间: 2024-03-22 17:09

时序数据以其独特性体现了信息随时间脉动的生命力,它广泛存在于工业自动化产线监控、各类设备的实时传感数据中,每刻不停地生成和更新。


20世纪70年代至21世纪初,关系型数据库主导了数据管理领域,但随着互联网时代的信息爆炸式增长及非结构化数据洪流的到来,NoSQL数据库应运而生并迅速崛起,极大地满足了海量、多变数据存储与处理的需求,并在开源社区中涌现了一批卓越的代表作。

与此同时,面对时序数据特有的连续性和时间轴关联特性,专门针对此类数据设计的时序数据库产品开始崭露头角,逐步填补市场空白。这些数据库凭借对时序数据高效压缩、快速检索及分析优化等方面的独特优势,在DB-Engines等业界权威排名中的关注度不断攀升,展现出庞大的市场需求和发展潜力。

本期我们很荣幸邀请到时序数据库专家,乔嘉林。他是一位90后的清华博士,是天谋科技联合创始人及 CTO、Apache 软件基金会 Member、 顶级开源软件项目Apache IoTDB PMC、 Apache TsFile PMC Chair。从 IoTDB 和 TsFile 项目创始之初,他就加入了团队,不但在研发的道路上披荆斩棘,还推动了 IoTDB 在多家大型企业的落地,一直是 IoTDB 开源社区的主要维护者和推广者。在开源社区里,他有一个响亮的名号,铁头乔。不少人通过他的介绍与IoTDB结缘。今天,他将为我们分享有关开源数据库项目成长、开源社区治理、加速赋能企业等方面的观点与主张。


一、开源之路:互联网疆场上“开新局”

Q1:我们知道,开源圈子里,你有个名号是“铁头乔”,若当作一个角色标签,你觉得还会怎么样介绍自己?

我是 2012 级西安交通大学计算机系的本科,2016 年来到了清华大学软件学院读博,师从王建民教授。期间从头参与了时序数据库 IoTDB 的研发和落地实践,包括内部自研期、准备开源、进入 Apache 基金会并孵化为顶级项目,并在各个工业企业进行推广使用。项目经过了多年的发展,受到了较多的关注和应用,为了满足市场的需求,我们成立了公司天谋科技,来更好地服务社区和用户。

这几年的时间里,我完整经历了一个项目从技术原型到试点应用、再到成熟推广的闭环,工作的内容包括多个核心模块的研发、解决方案的设计、项目实施运维、技术和社区推广等。

Q2:基于什么样的状况,清华大学于2015 年启动了 IoTDB 的研制?

清华大学软件学院大数据系统软件长期聚焦工业大数据软件领域,从2011年专注工业时序数据管理领域,到2017年牵头建设了大数据系统软件国家工程研究中心。期间使用过各种开源大数据系统,Cassandra、HBase 等,也对这些系统进行了深度改造和优化,但这些产品的目标场景并不是时序数据管理,目标场景不一致,因此我们的改动难以被社区接纳并长期维护。而且即使做了优化,性能也依然存在不足,与我们理想中的时序数据管理系统架构相差甚远。

目标场景不契合,强扭的瓜不甜。彼时国内外还没有一款针对工业物联网场景的时序数据管理系统,那不如自己做,因此我们就启动了清华 IoTDB 项目,长征也从这里开始。

Q3:Apache IoTDB是目前唯一由我国高校发起的 Apache 基金会顶级项目,也是 Apache 基金会旗下唯一物联网数据管理领域开源项目,你是怎么看待这两个“唯一”的?

能在学校参与到这样一个项目,离不开清华软院对项目长期的投入。研究生通常会经历申请科研项目,进行研究,项目结题这一过程,大多为1-3年。结题通常意味着项目完成了使命,也意味着项目资助的终结。大多科研项目是研究算法,因为算法研究周期与科研项目周期相近,项目资金足以支持整个研究。而基础软件通常需要5-10年的时间来研制,这可能会导致有的软件研发项目到了后期缺少资金支持,而在没有项目资助的时候,你愿不愿意持续投入?软件学院的答案是:愿意——只要做了,就要做出效果,做到最好。

把学校的一项研究成果开源、捐给 Apache 基金会,也是清华软件学院的一项创新性举措,得到了学校领导的全力支持。我们一直说开源影响力,其实之前都是我们参与国外主导的开源项目,大多是国外影响我们。但是在工业物联网方向,国内的体量是要大于国外的,我们有机会做出引领性的产品,我们希望做出中国的开源影响力。

IoTDB项目能做到这两个“唯一”,离不开每一位参与者的贡献。研究生除了上课,还面临大作业、考试、实习、毕业等挑战,教授们要兼顾无数的科研课题,但是大家都不遗余力地推动项目前进。我们每天9点雷打不动开早会,每天过进度、解决问题,促使系统在核心指标上超过国外产品。此外,开源项目不止需要技术,也需要运营社区,大家一起摸索着、宣传着,一对一带社区新人,经过长期坚持,我们终于迎来了曙光,社区也逐渐壮大。

Q4:相比其他领域,做物联网数据管理领域开源项目的难点是什么?

当导师告诉你朝着这个方向挖井,一定能挖到水的时候,你能在见到水之前毫不动摇地一直挖吗?主要难点在树立决心,我们需要在一个注定短期看不到回报的方向上长期投入。

此外还有旁人的质疑。假如有人在这个领域已经做到了80分,在我们决定做类似的软件之前,别人的成绩和我们毫不相干,但在我们从0起步之时,这80分就是差距,我们需要在竞品技术迭代的同时奋起直追,赶上并超越对手。这期间一定会有人质疑:为什么不得过且过、直接用现有的东西,而是要从零开始做这样吃力不讨好的事?这就是我国基础软件发展艰难、被“卡脖子”的一个原因。但是,只要人有了决心,就能克服难点,在质疑中坚定不移、勇往直前

数据库被誉为基础软件“皇冠上的宝珠”,体现其价值的同时也反映了其开发难度,不然为什么有那么多大厂团队都选择基于已有数据库去优化,而不是从头写起?每当我给其他人介绍自己是做数据库的,听众第一反应大多是:基于哪个数据库做的?我会回答,我们是从头自己写的,没有基于任何一个现有的数据库。从零写数据库,动辄数十万行代码才能实现基本功能。对于开源贡献者来说,当你发现践行一个优化思路需要写上千行代码,你还愿意加入吗?

Q5:2022 中国开源先锋 33 人之心尖上的开源人物榜单中提到了一个数据,截至2022年 1 月 3 日你总共贡献 723 commits,位列所有贡献者中的第一位。想听你聊聊是怎么平衡时间跟精力的?

“时间就像海绵里的水”可能是这个问题最合适的答案。当你觉得有一件事值得投入全部精力来做,其他大部分事情就会变得无足轻重。就像在读博时,一想到毕业之后,再也不用写论文、写课程作业,能全身心做 IoTDB 了,就很期待。

此外,直接对接开源用户使我能感受到用户急迫的需求,这都是我国工业信息化领域那些每天被现有软件的低性能、复杂运维折磨着的同事们的真实需求。当我想到我们做的 IoTDB 能解救他们于水火,动力就会更足。因此,能一线对接和服务用户是一件从源头获取动力、以终为始的模式,这也是开源的独特魅力,目前,我已经加了几千名社区用户的微信好友了。

所以,可以说是对IoTDB的热爱和重视令我投入了足够的时间和精力。

Q6:长期一线服务用户、支持 IoTDB 在用户生产现场的使用。我很好奇会不会有觉得麻烦的时候?长期、一线,可并非说说而已。

当你对一个产品全心投入时,就会把产品当做自己的孩子。如果说好的孩子是老师教出来的,那用户就是 IoTDB 的老师,每一次问题反馈、每一次鼓励支持,都能促使我们做的更好。程序员大多是乐观派,我也一样,我相信问题会越来越少。每次发现问题,我会把针对这个场景的处理方案设计到下个版本里,之后就不会再遇到了。

责任感也是一个因素,用户将他们的数据放到我们的系统里,本身就是对我们的信任,这份信任是我们帮助用户解决困难的动力。记得之前帮用户看问题,用户直接把线上系统管理员给我,并且说“信得过你”,这时候就感觉每个用户都是我的战友,我们在并肩作战。每当帮用户解决问题后,能听到用户的一句句“居然还能这样用”、“性能大幅提升啊”、“感谢,没问题了”,也是很有成就感的。


二、项目淬炼背后的格局与定位:“先行者”“追赶者”到“领头羊”

Q1:IoTDB的技术路线是依据什么而定的?

我认为主要还是从用户实际场景和痛点出发,而不是为了炫技去做。很多情况下你会听到又出了一个新的技术词汇,听着很酷炫,但其实在数据库中、在用户场景中没有真实需求。

IoTDB 总体的设计思路是:易使用、易运维。即功能简单易用、设计统一、性能优秀、一键部署、容忍一切硬件故障,这是我们运维过很多重要的线上系统后的一个深刻总结。

我们是从时序数据文件格式 TsFile 起步,可称为“时序领域的 Parquet”。因为看到了用户对时序数据管理的场景,端侧(设备侧)很多是以文件形式进行存储的,但是缺少标准的针对时序数据的文件格式,用户通常自定义文件格式进行管理,技术路线不统一,且效率较低。因此我们选择独立可使用的文件格式作为出发点,来以一种通用的、低成本的方式管理设备上产生的时序数据。此外,文件作为磁盘上数据的组织格式,也是数据库的基础和重中之重。

数据在端侧产生后,也需要传输到边侧(譬如场站)和云侧(譬如集团平台)进行处理。这时候,直接将文件进行传输,就能够避免对数据进行重复处理,同时需要提供多文件的管理系统,也就是数据库。因此,我们继续研究时序数库 IoTDB 及数据高效传输模式,通过一套代码架构,支持多种部署模式(单机、双活、分布式),支持多种同步方式(流式同步、批式同步),场景中可以根据需要自由组合,来适应边侧和云侧的不同计算资源和需求,同时达到端边云数据的协同管理。

这条技术路线整体是与物联网场景中数据的生命周期一致的:端侧生成、边侧传输、云侧汇聚。

此外,对乱序数据处理的技术、高压缩比技术、海量时间线管理技术、树形层级测点管理等,都是根据用户真实场景需求和痛点来进行研究,最终形成解决方案的。

Q2:IoTDB 目前主要应用场景和主要的案例有哪些?

可以说覆盖了天空地海。物联网非常广泛,只要是需要信息化监控的物体,就有时序数据管理的需求。

航天领域,IoTDB 搭载了北邮一号卫星,在太空采集数据,并回传地面,实现了星地协同;航空领域,管理了成飞飞机制造监控数据、商飞飞机试飞过程中产生的大量飞参数据,落地后与地面数据中心进行汇聚和统一分析;地面上的应用最多,服务北京地铁、上海地铁、中国核电、大唐集团、国家电网、石油天然气运输、车联网云平台、中冶赛迪、宝武集团等;海上有船舶监控等应用。

地铁监控运维平台

飞机飞参数据分析

车联网平台

Q3:把一个开源项目做成顶级项目,你觉得需要有哪些具体要求?

顶级项目主要有三个方面的要求,即项目的规范性、产品本身的成熟度、社区的多样化。

Apache 项目需要完全开源合规,如 Apache 协议声明,项目规范的版本发布流程,代码格式检查等,建立起了一套完善的项目协作规范;此外,产品本身已经被很多用户使用了起来,给用户带来了价值,社区也足够活跃;开源社区重要的是参与人员多样,除了学校的参与,还有国内多家公司的参与,华为、阿里、京东、360、中冶赛迪、用友等等,在使用的同时,也参与项目的贡献。

Q4:印象最深的困难是什么?如何解决的?

在学校,每年都会有参与了三年的学生毕业,这对项目的发展影响还比较大。三年的时间刚好成为项目的中坚力量,能够带领几个同学做好一个模块。为了建立一批专注这个项目几年、十几年的骨干团队,就需要存在这样的一个单位,因此,我们在项目发展上做的一个较大的决策就是成立公司,也是开源项目发展到一定程度的自然产物,一个人能够长期专注做一件事是很难得的,因此也是为毕业后想继续参与项目的同学提供一个能够让工作连续的最佳平台。

这是 2017 年发布 0.1 版本的合照,现在其中还有四个人在继续做 IoTDB,我这一级还有两位同学也放弃了大厂的工作,重新回到了 IoTDB 团队。

Q5:回看项目最初的目标,多大程度上符合心理预期,若按百分比大体衡量的话?

80% 以上符合心理预期,整体在快速向我们的目标迈进,这也是在平衡短期需求和长期目标之后的一条适合我们的道路。

一旦做项目交付,就需要满足项目的硬性需求。然而,怎么满足,就是需要好好考虑的。当你发现系统有95%的功能都满足一个项目,只有5%不满足时,会很想把那5%给补上,但是加到哪呢?不是所有需求都适合加到数据库内部。记得有一次和一个用户沟通,对方的技术总监说:“这应该是咱们应用层做的事,别都推给数据库去做,让数据库就把它的部分做好就行了”。

因此,我们要经常做的就是平衡单个项目的需求和产品迭代的需求。


三、开源数据库的一大步:两年、顶级、成功、开源案例

Q1:从进入Apache 孵化器到毕业成为顶级项目,IoTDB只用了两年,实属不易。作为成功的开源案例,你会用哪三个词来总结经验?

千方万计,千言万语,千山万水。

千方万计:当你抱着尝试的心态去做一件事情,遇到困难之后就会很容易说搞不定,没有办法了。但是如果抱着一定要把这个事做成的心态去做,遇到困难之后就会想:真的没有办法了吗?再试一次?

数据库不只是一个软件产品,还需要相应的应用层设计开发,比如对数据库的建模、接口的选择,都会影响用户的使用体验。数据库内核开发者容易出现一个观点“用户没用好”,问怎么解决,可能就是没法解决,需要让用户多看看文档。在用户反应“不好用”时,数据库内核开发者通常会认为是用户的问题,建议用户多看看文档。

我的观点是,如果用户用的不好,很可能是我们的工作没做好,要么是功能设计的不好用、要么是实现的不够智能、要么是用户手册没写清楚、要么是缺少教程。这四个“要么”,每个都是一个解决问题的方向,都值得深入研究,一定有方法让用户体验更好一些。

千言万语:酒香也怕巷子深,开源就要布道,需要做见面会、线上分享、写博客宣传,与人交流。

千山万水:把产品做好,就需要和用户当面交流,了解真实痛点。把项目做好,也需要到用户现场沟通需求,排查问题,和用户面对面交流,比线上交流会更加充分。

如图所示,左图记录了某次去制造业工厂帮客户解决问题,加班加点以后的深夜返程,右图记录了生日当天临时受命出差,在飞机上的小小庆祝。总结下来就是,“一直在路上”。


四、畅想一二:开源社区治理、数据库发展,成色几何?

Q1:社区治理包括了社区的体系,成员激励和成长,以及怎么激励开发者贡献代码,采纳这些代码的标准规范等等,你在社区治理方面经验丰富,有哪些可以分享给大家的?

我觉得相比制定明确的社区头衔晋级和发放小礼物的规则,比如贡献多少个 PR、多少行代码就能成为 committer,我更希望参与社区的人能够用到 IoTDB。只要项目对于他的日常工作有价值,他就会更加专注的投入,而社区头衔和小礼物就真的是附属品了。如果有人是抱着社区头衔和小礼物进行社区贡献,我反而觉得他不是社区需要的贡献者,只会给社区带来虚假繁荣和难以长期维护的代码。

除了有价值,社区还要有人情,社区的意义在于沟通、交流,交到朋友。我以前练过武术,教我们武术的师傅说过一句话,用到这里也很适用:“有个师弟生病了,你们去看望一下他,让他感受到师兄弟的关心”。我们通过开源联系到一起,但是社区的交流不止开源,开源社区归根到底还是社区。

虽然社区晋级没有明确的标准,但是代码协作要有规范。如果想合作做一件大事,必须要成为一个团队,有总指挥、指挥部,要像打仗一样分工明确。IoTDB 的分布式版本就是社区一起参与的。我们一起开的启动会,一起讨论分布式的目标。耗时一年后,我们在2022年底发布了 Apache IoTDB 1.0 版本,这也成为了一项 IoTDB 社区的大事记。

Q2:还想听听你是怎么看待数据库产品未来三年到五年的发展趋势的?

最近也有人问我关于数据库和大模型、机器学习的结合点,我觉得数据库可以结合机器学习来为用户提供一些数据分析方法。我们在2023年IoTDB用户大会上发布了全新内生机器学习框架 AINode。

IoTDB 未来三五年会继续提升稳定性、易用性、性能这三个核心目标。此外,也会继续深挖数据管理全流程生态建设,在做好数据管理的同时,让用户用数据更加方便。


【受访嘉宾】:

乔嘉林 天谋科技联合创始人&CTO

天谋科技联合创始人&CTO、Apache IoTDB PMC 及初创成员、清华大学博士、中国通信学会开源技术专委会委员、学术秘书。从头参与建设物联网时序数据管理领域的首个 Apache 顶级项目 IoTDB,及第二个顶级项目 TsFile。获Apache Member(Apache 基金会委员)、中国开源先锋人物、清华大学水木学者、开放原子基金会银牌讲师,并作为 10 位基础软件的领军人物之一,荣获 2023 优秀软件工程师。相关成果获北京市科技进步奖一等奖。