从第一行代码到20万行开源,我已经走过了三年

今天12月17日,对我来说,一特别的日子。因为三年前的今天,我参加溪山天使投资年会,在会场上听着精彩创业故事的同时,在自己的Mac笔记本上,安装了Ubuntu,安装了熟悉的vi, cscope, gdb等开发工具,搭建好了开发环境,正式开始写代码。我得意地告诉参会的朋友们,我不想做天使投资人,而是要重出江湖,亲自操刀,写一个巨牛的专门针对物联网场景的大数据处理引擎,希望今后世界上90%的数据都用我陶建辉开发的软件来存储和查询。 

没想到,一晃三年就过去了。从我的第一行代码起,TDengine整个系统的代码量已经超过二十万行,我自己贡献的代码量早已超过三万行。开心的是,我自己只是开了一个头,凭借物联网数据处理的巨大市场空间,凭借“舍得”,凭借“三顾茅庐”的诚意和决心,吸引了一批顶级的人才加入进来。现有团队的14个人,中国科大本科毕业的就有7位,其中5位还全部在美国留学、工作过,还有两位获得过中国科大最高荣誉的郭沫若奖学金,其他同事都来自清华、上海交大、中科院计算所等学府或科研机构,还有三位在华为工作都超过10年之久,14个人中有3位博士,7位硕士。三年前我一个人的梦想,已经变成了整个团队的梦想和目标。更可喜的是,我一个50岁的程序员,能天天与90后、80后混在一起,讨论问题,解BUG,让我顿觉年轻了20岁。 

在动手写下第一行代码之前,我已经对物联网、工业互联网的数据处理做了几个月的调研,认为大家普遍采用流行的Hadoop系统是完全不合适的,开发效率低,运行效率差,而且运维成本很高。我发现物联网数据具有时序、结构化、不更新等众多特点,如果采取“一个设备一张表”的数据模型,采用“超级表”来解决多设备之间的数据聚合分析问题,一定能设计出一个极为高效的物联网数据处理系统。想到5G的到来,会让联网设备的数量指数级上升,今后世界上90%的数据都将是物联网设备产生的,顿觉热血沸腾。虽我已创业两次,并成功退出,但实在不想错过这巨大的机会,抱着“Leave a dent in the world”的想法,我再次冲向战场,并且冲到了最前线。

虽然我已经很清晰原理、设计思路,并且是研发老炮一个,但直到实现时才发现,技术难度超过预期。我写了一个高效的存储引擎,但“导入历史数据”却是一个坑最多的地方,场景实在太多,用户可能导入的数据在内存,也有可能在硬盘,也有可能跨多个文件,经历了无数的BUG之后,由团队的90后,科大郭沫若奖学金获得者程洪泽重写历史数据处理模块。节点之间的实时数据同步,我重构了三次,才得以让节点进行同步之时,不影响数据的实时插入和查询;客户端驱动,因为同步、异步的各种调用纠缠在一起,我重构了两次,团队的廖博士在我的基础上又做了很多调整。Kill一个正在进行的查询操作,因为分布式、多线程、资源管理的问题,实现的难度也是远远超过了我的预期。但这三年,每次遇到一个难啃的技术问题,我反而很开心,因为它意味着产品的门槛又高了一点,如果我们能把这些难题都完美解决,这才显示出我们团队真正的价值。 

三年已经过去,前面两年在埋头写程序,最近一年我发力在推广上,而且在今年7月份,我们做出了极其正确的决定,宣布将TDengine的核心代码开源。开源还不是我的一时冲动,而是深思熟虑、谋划已久。因为作为底层基础软件,不开源,完全得不到用户的信任,而且市场上已经有相当多开源的同类产品,不开源,推广极其之难。令我兴奋的是,开源后,TDengine获得的反馈远超预期。我曾和团队说,开源后,我们争取一年的时间能在GitHub上获得5000个star就不错了,但没想到,仅仅三个月时间,TDengine的star就超过一万,fork数超过了2800。我们不仅看到了来自中国用户的反馈,还看到了来自美国、印度、西班牙、意大利、捷克等很多国家的程序员的反馈。每天起来后,第一件事就是看GitHub,看是否有人报告新的问题。每当有人报告BUG,我一点的沮丧都没有,反而是开心,因为说明有人在用TDengine,而且在乎我们产品,这是我最希望看到的。哪怕TDengine的商业化不成功,但只要有程序员喜欢这款产品,爱用这款产品,那就是我个人以及整个团队最大的成功。

开源,不仅让TDengine获得了市场的认知,而且让产品的质量得到了前所未有的提升。虽然在开源之前,我们做了大量的测试,而且好几个大的客户已经正式上线,但由于每个用户的场景不一样,开源后,TDengine仍然暴露出了很多问题,在GitHub上递交的问题数量已经超过1000。如果没有开源,这些问题则需要积累更多的客户,需要更长时间的在线运营才能暴露出来。由于开源,整个团队对产品的品质更加关心,像关胜亮、李晖等人,每次递交代码,都是小心翼翼。由于开源,不少外部贡献者参与进来,迫使团队必须建立完善的开发流程。潘方,美国密歇根大学博士毕业,在NASA工作两年后,加入团队,负责起了QA的工作,建立起了产品发布、CI/CD、自动化测试、代码静态检查等全套流程,团队虽小,但已经不再是程序员小作坊,不再局限于北京的办公室。 

从第一行代码到20万行开源,我已经走过了三年 - TDengine Database 时序数据库

这一年,为推广TDengine,我参加了太多的活动。无论规模大小,无论线上线下,在介绍产品时,我总是满怀激情。很多人好奇,问我如何能做到这一点。其实,没有什么“灵丹妙药”,唯一就是要对自己研发的产品特别热爱,对产品有足够的信心。具备足够的热爱和信心后,你每一句话、每一个表情、每一个手势,都能把激情张扬出来。团队的90后江燚、80后李广、以及其他团队成员,甚至我们不爱说话的廖博士,受我的影响,每次介绍产品,也都是激情澎湃,信心满满。三年的努力,我终于成功地将我个人的激情转化为了整个团队的激情,也希望我们团队在扩充到一百人、一千人之后,这股激情依然不减。 

中国2B软件的销售难,底层软件的销售更难。但我们很幸运,从2018年8月发布第一个版本到现在,已经有了几十家付费客户,免费用户至少几百家。而且可喜的是,最近几个月的销售订单完全是依靠两位销售大将拿下的,没有我的任何参与。为什么有人敢用我们软件呢?我细细一想,除我们产品本身的几大优势之外,有几大原因,1:传播方式发生改变,我们通过微博、微信、甚至直播等新媒体做了很多传播,TDengine在开发者社区里有一定的知名度,而且开源后,传播力度更大,让更多的开发者了解到我们;2:产品体验的方式发生了改变,用户可以下载源码自己编译,也可以下载安装包或镜像,安装极其简单,还可以通过云服务的方式,连安装都不需要,可以说,用户体验的门槛几乎没有;3:中国缺少自己的底层软件,因此当我们超强实力的产品推出来之后,受到业界的高度关注;4:中国开发者群体已经很大,而且现在的决策者一般都很了解或很懂技术,有一定数量的人乐意接受新技术或新产品。 

三年过去,TDengine要获得成功,需要做的事情还有太多太多。我们要提供各式各样的连接器,让TDengine与现有技术生态能无缝对接;要提供事件驱动的流计算,完全一站式解决物联网行业的数据处理问题;不仅要解决云端大数据问题,还要解决边缘计算的问题。更重要的是,我们需要100%拥抱云服务。我坚信,开源+云服务才是基础软件的未来,离开两条中的任何一条,都很难让涛思数据成为独角兽。

期望有一天,TDengine的贡献者能遍布全球,一群不同文化背景、不同肤色的程序员,一起协同开发,将TDengine做到极致,为全球90%的数据处理提供一高效、高速、简单易用的引擎。更期望有一天,TDengine的用户遍布全球,任何开发者,只要是处理机器、传感器产生的数据,立马想到的就是TDengine,那一天便是TDengine的成功之日。

陶建辉

2019年12月17日于南京出差途中