奔跑了五年,就为做一件难而正确的事,继续奔跑!

五年前的今天,我做了一艰难的决定,将开发了两年多的时序大数据处理平台TDengine的核心代码全部开源。没想到的是,TDengine 开源后迅速引起了开发者的高度关注,在GitHub全球趋势排行榜上多次排名第一。截止到今天,TDengine在GitHub上的Star已经超过23k, Fork数超过4.8k, 在全球检测到的安装实例数超过56万,遍布全球60多个国家和地区。

这些数字让我这个年过50但仍然冲在coding第一线的老程序员兴奋不已,因为有人Star、有人用,它说明我们没日没夜开发的代码,给大家带来了价值。海量的用户群,是对一个程序员工作的最大回报。今天借开源五周年之际,回顾一下TDengine的整个发展旅程,与众多的开发者和创业者分享。

选择时序大数据这个细分领域

2016年3月,科技界发生了一件影响深远的大事,谷歌旗下的阿尔法围棋(AlphaGo)对战当时的世界顶尖棋手李世石,最后以4:1获胜。AlphaGo的胜利一下引爆了全球追捧人工智能的热潮。那么,如何将人工智能运用到实际生活中?这其中一大应用就是自动驾驶。实现自动驾驶的关键技术就是需要对汽车采集的各种数据进行实时计算和决策。汽车采集的数据一个显著特征就是都带有时间戳,并且采集频率非常高。因此,我认为自动驾驶将带来数据量的爆炸式增长。在2016年,我们还能看到的就是各种交通工具(如自行车、汽车、卡车等)都已经联网或准备联网,共享出行也已经流行起来。这些交通工具也是时刻都在采集数据,采集的数据也是有明显的特征,那就是时序数据。可以说,整个出行行业,在进入移动互联网、人工智能时代之后,数据量是指数级的增长。

另外一方面,由于技术的创新、政府的推动,光伏、风力、储能等清洁能源逐步流行起来,电网的供电设备的数量在指数级的增长。但这些清洁新能源往往无法提供稳定可预测的发电量,因此对电网的调度提出了很大的技术挑战。解决这个挑战,就是需要在对发电、输电、配电、用电等每个环节进行实时的数据采集,然后进行实时的计算并做出决策,这些数据毫无疑问都是时序数据。另外一方面,传统的一个用电单位可以自己安装光伏等新能源设备,自己用不完的电,可以将其销售给电网,这样一个用电单位还可以是发电单位,催生出了电力实时交易系统。整个电网成为了个分布式能源系统,需要实时采集的数据来做起运营支撑。

2016年由于我从上一家创业公司退出,得以有空闲时间分析这些大的行业变化。我认为出行或更广义的运输行业以及分布式能源系统是两大新的场景,将产生海量的时序数据。数据量的规模不是一般的数据库或大数据平台能高效处理的,一定需要专用的时序数据处理工具。2016年9月起,我便开始研究起时序数据的处理。很快,我就发现了InfluxDB, OpenTSDB, Prometheus等专用的时序数据库软件。研究后,我发现这些工具在处理效率、水平扩展能力或易用性上,还存在问题。凭着我自己前两次的创业经验以及直觉,认为这个细分市场还大有可为,机会还在,而且很适合自己来做。因此2016年10月我便全力以赴投入到时序数据库的研究,12月17日在溪山天使投资年会上,我写下了 TDengine 第一行代码,正式开始了我第三次创业的旅程。

技术创新是产品的根本

时序数据库是一基础软件,在市场已经存在不少产品的情况下,怎么冲杀出来,唯一的招数就是技术创新。我在分析电力、汽车这些场景后,发现时序数据很有特征。比如每个传感器或设备产生的数据都是结构化的、而且是一个数据流,与摄像头一样,这些数据几乎没有更新或删除,只是到期删除,用户关心的更多的是数据变化的趋势,而不是某个时间点的值等等。如果我们将这些特征充分利用起来,就可以开发出极为高效的时序数据处理引擎。

基于每个传感器或设备都在产生一个数据流的这个特征,我认为最佳的建模方式便是一个数据采集点一张表。有一千万智能电表,你就需要建一千万张表。这样写入数据就成为简单的数据追加操作,同时采用列式存储,因为同一个传感器的数据变化总是缓慢的,这样数据压缩率可以很高。一个数据采集点的数据还一块一块存储,这样能提供高效的预计算,而且读取单个采集点数据时将极为高效。

但这个数据模型带来的一个挑战就是表的数量极为庞大,表的管理以及表之间的聚合成为挑战,因此我提出来超级表的概念。同一类设备建一张超级表,对每个具体的设备,使用超级表做模版,同时打上各种标签。标签数据与时序数据分离存储,把数据分析中的维度数据与事实数据概念完全搬到时序数据的处理来,这样完全高效的解决了表的数量过于庞大的问题。

通过独特的”一个数据采集点一张表”以及”超级表”的数据模型,TDengine在读、写、压缩性能上,一下就超越了市场上最流行的InfluxDB与TimeScaleDB。基于全球公认的TSBS时序数据标准数据集,无论是CPU-Only场景还是IoT场景,都显著优于他们(详细的测试报告请查看TDengine官网)。

光性能超越对手之外,我认为还不够,需要在产品功能上有创新。在研究时序数据应用场景之后,我认为需要把缓存、数据订阅、流式计算等功能纳入进来,与时序数据库一起提供一个全栈的时序数据处理平台,大幅简化系统架构的复杂度以及运维成本。为什么我们把产品取名为TDengine, 而不是什么DB,这是根本原因。TDengine的含义是Time-Series Data Engine, 时序数据引擎之意。而且由于我们充分利用时序数据的特点,缓存、数据订阅、流式计算这些功能相比通用的Redis, Kafka, Spark这些软件,性能更高,资源消耗更小,更进一步降低运营成本。

软件的易用性也极为关键。从我写第一行代码起,我就决定采用SQL作为标准的查询语言,而不是像InfluxDB, Prometheus, OpenTSDB等软件一样,采用自己定义的查询语言。安装部署上也追求极致,从下载、到安装、启动,60秒之内一定搞定。我们提供的所有示例代码都是拷贝粘贴就可以工作的。这一切,就是降低学习成本。

奔跑了五年,就为做一件难而正确的事,继续奔跑! - TDengine Database 时序数据库
TDengine开源第一次Meetup后团队合影

开源就要把最核心的代码开源

这么具有创新的产品怎么推广?特别对于数据库这类基础软件而言,用户切换成本很高,没有很特别的理由,很难说服开发者切换到新的数据库上。因此创业之初,我们就在仔细思考,结论就是开源。但我自己以及团队都没有开源的经验,因此直到我们第一个正式版本发布,而且签单了三个大的客户之后,从2019年3月起,就全力以赴投入到开源的准备工作中。

2019年7月12日,在深圳举行的全球架构师大会上,我正式宣布将TDengine单机版程序开源。宣布之后,由于我们产品定位切中了物联网、工业互联网数据平台的刚性需求,核心代码开源,加上它惊艳的性能与出色的用户体验,一下火爆,GitHub的star, fork数天天高涨,好几天都在全球趋势排行榜上排名第一,官网的流量直线上升。开源三个月之后,GitHub上的star数已经超过一万。这一切远超我们的预期。完全没想到我们六个人的小团队,引爆了这个市场。

在作出开源的决定时,我认为开源就一定要将最核心的代码开源,因为只有给用户带来真正的价值,将自己的技术创新、绝招完全展现给大家,才能获得开发者的喜爱。但由于担心开源不一定成功,我们将一核心功能,集群功能,没有开源。在看到单机版开源火爆之后,而且大量的用户反馈需要集群功能,我们便决定要将集群版开源。在做够了准备工作之后,在2020年8月,我们将集群版开源。没想到,这又是一正确的决定。集群版开源后,又是获得开发者社区的热捧,GitHub上的star数又是天天涨,安装量一下就冲到每天200以上,每天clone代码的人次超过1000以上。

看到云原生是未来,我们又积极的开发云原生版,在2021年8月将云原生版开源,又是获得众多开发者的喜爱。到目前为止,TDengine项目在GitHub上已经获得23k+ star,4.6k+ fork, 我们每天统计日均安装实例数已经超过500,总数已经达到56万, 而且遍布全球60多个国家和地区。按照现在的增长趋势,TDengine成为行业的事实标准,成为全球最有影响力的时序数据库,不会是遥远的事情。

作为一个开源时间才5年的项目,能获得这么大的安装量和GitHub Star数,作为一名拥有40年码龄的我,十分的自豪,因为它说明我们没日没夜开发的代码,给大家带来了价值。海量的用户群,是对一个程序员工作的最大回报。TDengine 产品还在演进中,后续我们还会开源一些模块。开源的原则不会改变,那就是把用户最喜爱的功能,把最核心的功能开源。

商业化成功是开源持续成功的保障

一家企业需要生存,就需要盈利。我们无法依靠研发人员的情怀,毫无经济回报的把开源进行到底。因此我们在开源获取成功的同时,在积极的探索如何获取商业成功。做了一些调研之后,我们就准备采取开源软件标准的做法,提供付费企业版。

TDengine 核心代码,包括集群版、云原生的功能都已经开源,企业版到底有什么不同呢?我们决定将企业关心的数据备份、容灾、权限控制、安全、多级存储、各种数据源的无缝接入等辅助性的功能全部纳入到企业版。没有这些辅助性功能,TDengine作为一款时序数据库,功能是完备的,与其他开源的时序数据库相比,在功能和性能上,优势依然是明显的。但这些辅助性功能对于企业的运营又是至关重要的。

TDengine 广泛用于物联网、工业互联网等场景,这些场景中,有各式各样的数据源,比如MQTT,OPC-UA,OPC-DA, 工业场景中,还存在各种传统的实时数据库,比如PI System, Wonderware等。TDengine 企业版中包含了一个组件,能通过简单的配置,无需一行代码,将这些数据源的数据实时的读取并保存到TDengine中。因为每个数据源的命名规则、测量单位、时区都不一致,因此TDengine企业版还具有数据的转换、过滤、清洗的能力,以保证入库数据的质量。这样大幅简化了系统部署的复杂度。

在企业级的应用中,数据库的备份恢复,异地容灾,实时同步至关重要,没有这些功能,数据安全无法得到保证,企业是不敢投入运营的。因此TDengine企业版提供这些功能。另外一方面,边缘计算已经流行起来,各大企业也希望将边缘侧的数据汇聚到云端。因此TDengne 企业版还提供边云协同的功能,通过简单的配置,就能将边缘侧的数据实时的同步到私有云或公有云。

在企业级的应用中,数据访问安全也至关重要。因此TDengine企业版提供数据传输过程的加密、数据库存储的加密、也提供数据库访问权限的设置、IP白名单、操作审计等功能。而且TDengine还提供视图,并对视图进行权限控制,这样数据访问的控制可以精细到表、列、时间段等。数据订阅通过SQL定义可以访问的表、列、时间段,甚至可以对原始数据进行加工或聚合,并配以权限控制。这一切,都是最大程度保证数据访问的安全。

在数据量指数级增长的时代,存储成本一直是企业运营所需要考虑的。因此TDengine企业版提供多级存储,将数据按冷热程度划分,最热的数据在内存,稍热的数据存放在SSD上,冷数据存在普通机械硬盘上,最冷的数据可以保存在S3上,最大程度的降低存储成本。

在提供企业版之外,2023年3月起,TDengine还提供全托管的云服务,我们已经在阿里云、AWS、Azure,  GCP四大云上提供。云服务对于中小企业而言,是能快速上线、享受高质量的专业服务,同时又能控制并降低运营成本的最佳途径。而且我们坚信,开源软件的未来在于云服务。通过开源,我们能迅速打造出市场品牌并建设出开发者社区,这样相当多的用户将直接转发为云服务的用户。

奔跑了五年,就为做一件难而正确的事,继续奔跑! - TDengine Database 时序数据库
仍在奔跑的TDengine七位联合创始人

将数据价值最大化

TDengine 的核心是一个时序数据库,帮助大家把各种数据源采集的时序数据,清洗加工后,高效的存储,并通过SQL提供各种数据的查询分析以及实时数据分发服务。无论是哪种场景,用户采集数据并存储起来的目的是要从数据中挖掘出价值,比如对运营进行实时监测,发现异常立即报警,对未来进行预测,包括对设备进行预测性维护等等。因此TDengine的唯一目标就是帮助用户将数据价值最大化 (Maximize data utilization)。

TDengine自身的查询计算引擎已经提供了相当的数据分析能力,支持标准SQL、嵌套查询、用户自定义函数、并支持众多的时序数据扩展函数等。但为帮助用户最大程度挖掘出数据的价值,TDengine通过标准的JDBC、ODBC接口,能够与众多的BI, AI以及可视化工具,比如Power BI, Tableau, Grafana等,无缝集成。用户可以选择自己最喜欢的工具来分析处理存储在TDengine的数据。

实时数据分析已经越来越重要,因此TDengine自身了提供实时流式计算的能力,支持各种窗口触发机制,包括滑动窗口、状态窗口、事件窗口、会话窗口、计数窗口等等。但为帮助用户能最大程度的进行各种实时计算,TDengine提供了灵活而又安全的实时数据订阅的能力,一旦订阅的数据有更新,第三方工具将立即获得通知,对数据进行实时处理,最大程度挖掘数据的价值。

为便于各类应用程序的开发,TDengine提供了C/C++, Java, Python, Rust, Go, NodeJS等各种主流编程语言的连接器,而且对各种功能提供了可以拷贝黏贴的示范代码。

人类已经步入AI时代,新的算法、模型不停的涌现,新的数据分析和数据处理的工具也不停的涌现,这些新的工具不是任何一家厂商能够全面提供的。TDengine能做到的就是通过开放的接口,保证能够与这些新的工具、平台无缝集成,帮助用户将数据的价值最大化。

奔跑了五年,就为做一件难而正确的事,继续奔跑! - TDengine Database 时序数据库
2023年9月TDengine 团队在朝阳公园团建

写在最后

从我写下TDengine第一行代码,七年已经过去,当年49岁的程序员已是56岁。在我可以游山玩水的年龄,选择了第三次创业,并冲到了coding第一线,一路奔跑,让我用另外一种方式延续了年轻时的活力,能继续追逐年少时的梦想。令我欣慰的是TDengine的日均安装量仍然在增长,产品已经被越来越多的用户所接受所喜爱,而且商业化进程基本顺利,已经拥有200多家付费客户,遍布在电力、新能源、汽车、石油、石化、矿山、智能制造等众多领域。我们的客户不仅在中国,而且已经遍布全球。

继2016年AlphaGo之后,2023年的ChatGTP将人工智能又推向了崭新的高度。AI的发展让每个人更加看到了数据的价值,数据基础设施变的更为重要,而且数据量还会继续指数级的增长。这些增长的数据绝大部分都会是来自机器、设备、传感器采集的时序数据,因此我们相信时序数据处理这个细分市场一定会越来越大。当大家发现传统的数据库以及大数据处理工具无论是性能、水平扩展性、以及运维成本越来越无法满足需求的时候,TDengine就能迎来其巅峰之日。

庆幸我在2016年做出的选择,选择了做一件难而正确的事情,TDengine 是一款具有刚性需求、有技术门槛、需要长期投入而又有巨大发展空间的产品。庆幸我选择了将核心代码开源的方式,让我们仅5年的时间就在全球60多个国家和地区拥有超过56万的安装实例。这是一场马拉松,虽然已经跑了五年,但我现在能做的就是带领团队继续奔跑,让TDengine尽早成为时序大数据平台的事实标准。

做难而正确的事,一生不悔的选择。

陶建辉

涛思数据TDengine 创始人

2024年7月12日写于北京望京