就在昨天(2020年8月3日),涛思数据团队正式宣布,物联网大数据平台TDengine集群版开源。此次开源,我们在GitHub上传了23.9万行源代码,1198个源文件,包含我自己疫情期间写的一万余行C代码,终于又了却我一个心愿,不用再纠结。我们一个18人的团队,通过三年的努力,为全球物联网、工业互联网、车联网行业奉献了一个开源的、具有超强性能和分布式集群功能的专业大数据平台。
TDengine在去年7月开源单机版之后,获得了极大的反响,下载量已经超过百万,每天clone代码的超过一百,正式上线的系统已有数百个。除了中国用户之外,还有来自美国、德国、法国、意大利、西班牙等全球各地的开发者。而这一年这些开发者们给我们最大的反馈是“TDengine性能超强,确实比Hadoop快的太多太多,安装部署也很简单,但我们需要集群,我们需要高可靠,我们需要有应对大数据量的处理方案”。
其实,TDengine的设计从一开始就是集群的,是基于硬件、软件系统不可靠,一定会有故障的假设进行设计的,是基于任何单台计算机都无足够能力处理海量数据的假设进行设计的。只是作为一家商业公司,我们需要考虑如何盈利,业内其他类似产品都是只开源单机版,将集群功能纳入企业版,需要付费才能使用。因此在一年前宣布开源时,遵照惯例,我们也只开源了单机版。但一直以来,我都在思考:开源,就应该把最核心的代码开源,就应该把市场刚需的那部分代码开源,就应该将自己最美、最有吸引力的地方展现出来,否则开发者为什么要用你的?核心痛点问题不解决,那可替代方案就很多,产品本身的推广就会大打折扣,开源的价值就大为下降。
单机版开源后的市场的反馈更是坚定了我的想法:集群是刚需,是真正的痛点。我动了集群版开源的心思。但是,集群作为刚需也一直是我们销售的一个亮点,如果开源,我们怎么赢利?这一问题令我纠结了很久,而团队小伙伴、尤其是销售团队,也在我提出要在业内率先将集群版开源时,直接提出质疑和反对。
2019年底,我彻底想明白了,一定要将集群的代码开源。基于以下几点,1:对于大数据平台,没有集群,就相当于一个玩具,一个演示而已,谁也不会当真;2:开源是基础软件行业大势所趋,谁先真正拥抱开源,而不是假开源,谁就抢占先机;3:只要全球超过30%以上的物联网平台都在使用TDengine,只要能给用户创造真正的价值,公司一定能找到生存的途径,一定能成功。
除开源集群版的呼声之外,我们还收到了无数开发者给我们的反馈:BUG、性能问题、功能问题等等,GitHub上TDengine的issue已经超过2800个。看到这么多issue,一方面为自己脸红,因为自己都没想到居然有这么多问题,但另外一方面,又很开心,因为这说明很多开发者在真正用我们的产品,喜爱我们的产品,我们找对了市场,我们的产品是有价值的。
这样,2019年底,除了集群版开源外,我们还决定对TDengine的一些模块,包括存储引擎、计算引擎以及集群模块等进行重构。这两大决定都需要大量工作,因此,除创业之初的几位大将,胜亮、小廖、洪泽之外,团队新鲜血液博民、李珲、怡豪等同学也加入进来参与核心代码的研发。而且为保证质量,大幅提升产品稳定性,我们引入了研发大牛树多、肖平,让他们搭建CI/CD, 负责自动化测试,写下五万多行Python程序,近千个测试例。我自己这个68年生的程序员,虽已大龄,但像以往一样,又冲到了第一线,重构了RPC、WAL以及SYNC模块,新写的C代码超过一万行,GitHub递交的PR超过155个。
我的搭档,另外一位50岁的程序员,20多年前就是NASDAQ上市公司CTO,曾任亚马逊、思科全球高级副总裁,此时也挽起袖子,写起程序。而且从零开始学Python,写下了专门做并发、做系统破坏性测试的crash_gen.py (2800行)。这个程序让每位研发同学都胆战心惊,因为是专门找茬的,暴露的问题往往毫无头绪,却一定是程序问题。最开始30步都无法跑过,现在终于能无限的跑下去了。而这位搭档,在我一年多前最初游说他加盟时其实兴趣不大,不过,我和他谈到今后世界上90%的数据都是时序空间的数据,而如果大家都在用TDengine来进行存储、查询,即使我们公司不赢利,那也是一件人生最值得自豪的事情,是可以在人类信息技术史上留下痕迹的事情。他终于义无反顾的加入,和大家一起,细细打磨产品,目标只有一个,就是做一款有品位、能占领全球市场的产品。
今年的新冠疫情给全球经济重创,我们这个小小的团队却恰恰在此时静下心来,重构代码,8个月的时间,牺牲了所有的周末,我们终于推出了2.0集群版。虽没见过凌晨四点的洛杉矶,但我们经常见凌晨四点的GitHub。如果去年开源的版本能打60分,那我给2.0版本打80分。不仅因为开源了集群,代码重构后,逻辑更加清晰、模块划分更加合理,便于维护、扩展。更重要的是,我们开源了测试框架以及近千个测试例,而且将完整的设计文档分享出来。我自己编写的整体架构设计、数据复制模块设计等等文档,都已经在官网上公开,供大家浏览指正。
做一个60分的产品不难,有个不错的主意,能动手写点程序,立马就能做出来。但要做到80分,就要付出更多的努力。而我的目标是做一个能打99分的产品,因为做到99分时,就天下无敌,而且技术生涯才会画一完美的句号。不过,从80分到99分,比从60分到80分,要多付出超10倍的努力。幸运的是,我们已经有了一支很不错的产品队伍,而且有GGV、红杉、明势资本等机构超过2000万美元的投资,相信只要能坚持静心做产品,专注下去,我们一定能做到99分。
我总感慨自己幸运,在90年代初去美国留学工作,赶上美国互联网行业大爆发,正值中国经济腾飞之时,我又回到北京创业。如今,在接近退休的年龄,居然又发现了一个崭新的机会,而且是一个特别适合程序员老司机的机会——做底层软件的开发。不仅做整体架构的设计,还要动手写代码、debug、写文档,天天和团队80后、90后同学们一起战斗,乐此不疲。每每想到这里,我都会庆幸自己3年前的选择,也庆幸自己选择了开源的道路。如果没有这个选择,我和太太应该正在世界各地旅行,品尝美食,陪她流连于美术馆博物馆,过着人人羡慕的日子,但我想,那才是真正的随时光老去,因为世界已经不需要我的存在。
集群版都开源了,也许付费用户真的会变少,但那就随他去吧。我绝不会像有些厂商一样,先开源,然后闭源。只要有人用,而且用的人多,就是对我、对我们团队最大的奖励。哪怕是大家开喷,指出各种问题,我也会特别开心,因为只要有问题,我们就会好好地去改进,用心地去做。即使真有一天,我们连一个18人团队都无法养活,我也会继续做下去,会每天把产品细细地打磨,直到我无法动弹的一天,因为这是我最大的乐趣,我把TDengine当作我人生最后一幅作品,而且是一幅可以让我持续打磨到老的作品。
一年前开源时,我曾说过:“钱再多,也难让人在历史上留下痕迹,但一幅好的作品却可以传承,让后人好好的品味。愿我领头开发的TDengine成为传世之作,Leave a dent in the world!”, 今天再将这一段“初心”写一遍,希望这次集群版的开源,能够让TDengine离传世之作更近一步。