序言
5年前,我做出了一个艰难的决定:将我投入两年多心血开发的时序大数据平台TDengine的核心代码开源。出乎意料的是,TDengine开源后迅速吸引了开发者的广泛关注,并在GitHub网站全球趋势排行榜上多次荣登榜首。至今,TDengine在GitHub网站上已积累近2.3万颗星,Fork超过4800次,安装实例超过53万个,覆盖60多个国家和地区。
这些数字让我这个拥有40多年码龄的开发者感到无比激动,因为人们标的每一颗星和每一次使用,都证明了研发团队不分昼夜开发的代码为人们带来了实实在在的价值。庞大的用户群体,是对开发者工作的最高奖赏。在TDengine开源5周年之际,我借此机会回顾了Dengine的发展历程,希望与广大开发者共享这一旅程。
选择时序大数据这个细分领域
2016年3月,科技界迎来了一件具有深远影响的事情:谷歌的AlphaGo与世界顶尖棋手李世石进行了一场对决,并以4∶1的比分获胜。AlphaGo的胜利迅速点燃了全球对人工智能(Artif icial Intelligence,AI)的热情。那么,AI如何实际应用于日常生活呢?自动驾驶是其重要的应用领域之一。实现自动驾驶的关键在于对汽车采集的各类数据进行实时处理和决策制定。这些数据具有一个显著特点:它们都带有时间戳,并且采集频率极高。因此,我认为自动驾驶将引发数据量的爆炸式增长。
回顾2016年,我们可以看到各种交通工具,如自行车、汽车等,已经或正准备联网,共享出行日益流行。这些交通工具持续采集数据,而它们采集的数据具有明显的时序特征。可以说,随着出行行业步入移动互联网和AI时代,数据量正在经历指数级增长。
另外,技术创新和政府推动使得光伏、风力等新能源逐渐流行,电网的供电设备数量呈指数级增长。然而,这些新能源通常无法提供稳定且可预测的发电量,这对电网调度构成了重大的技术挑战。应对这一挑战的关键在于实时采集发电、输电、配电、用电各环节的数据,随后进行实时计算和决策,而这些数据无疑都是时序数据。
同时,传统的用电单位现在可以自行安装光伏等新能源设备。当用电单位的自产电力超出自身需求时,可以将剩余电力出售给电网。这使得用电单位同时具备了发电能力,催生出电力实时交易系统。整个电网转变为一个分布式能源系统,依赖实时采集的数据来支撑其运营。
2016年,我退出了一家创业公司,这让我有了空闲时间来分析行业的重大变化。我观察到,无论是出行行业还是更广义的运输行业,以及分布式能源系统,都将产生海量的时序数据。这些数据的规模超出了传统数据库或大数据平台的高效处理能力,迫切需要专用的时序数据处理工具。
自2016年9月起,我开始深入研究时序数据处理技术。不久后,我接触到InfluxDB、OpenTSDB、Prometheus等时序数据库软件。经过研究,我发现这些工具在处理效率、水平扩展性或易用性方面仍有不足。凭借之前两次创业的经验以及直觉,我坚信这个细分市场潜力巨大,机会尚存,且非常适合我投身其中。
因此,2016年10月,我全身心投入到时序数据库的研究之中。同年12月17日,在溪山天使投资年会上,我编写了TDengine的第一行代码,这标志着我的第三次创业之旅正式开启。
技术创新是产品的根本
时序数据库作为一种基础软件,要从产品众多的市场中脱颖而出,关键在于技术创新。通过分析电力、汽车等行业场景,我注意到时序数据具有明显的特征。例如,每台传感器或设备生成的数据都是结构化的,形成连续的数据流,类似于摄像头捕获的图像流。这些数据通常不需要更新或删除操作,仅需要在数据过期时进行清理。用户更关注的是时序数据变化的趋势,而非某一特定时间点的数值等细节。如果我们能够充分利用这些特征,就能够开发出极为高效的时序数据处理引擎。
鉴于每台传感器或设备都产生独立的数据流,我坚信最理想的建模方式是“一个数据采集点一张表”。例如,如果有1000万块智能电表,就需要建立1000万张表。这种方式将数据写入简化为直接的数据追加操作,并采用列式存储。由于同一传感器的数据变化通常较为缓慢,这可以显著提高数据压缩率。此外,将一个数据采集点的数据集中存储,不仅能优化预计算效率,还能在读取单个采集点的数据时实现极高的读取性能。
然而,这种数据模型也带来了挑战:表的数量可能非常庞大,这使得表的管理以及表间的聚合变得复杂。为了解决这个问题,我提出了“超级表”的概念。对于同类设备,可以创建一张超级表作为模板,为每台具体设备应用这张超级表,并附加各种标签。标签数据与时序数据分别存储,将数据分析中的维度数据与事实数据的概念完全应用到时序数据处理中,从而高效地解决表数量过多的问题。
TDengine通过独特的“一个数据采集点一张表”和“超级表”的设计策略,在读写和压缩性能上显著超越了市场上流行的InfluxDB和TimescaleDB等。根据全球公认的时序数据标准测试集,无论是仅CPU还是物联网场景,TDengine都表现出显著的优势(更多详细测试报告,请访问TDengine官方网站)。
在性能上超越竞争对手,我认为这还不够,还应在产品功能上进行创新。在深入研究时序数据的应用场景后,我意识到需要将缓存、数据订阅、流计算等功能整合进来,与时序数据库结合,形成一个全栈的时序大数据平台。这样的整合可以大幅降低系统架构的复杂性和运维成本。我们选择将产品命名为TDengine,而非简单的DB,这是有其根本原因的。TDengine代表的是Time-Series Data Engine,即时序数据引擎。由于我们充分利用了时序数据的特征,这些功能在性能上超越通用的Redis、Kafka、Spark等软件,同时资源消耗更少,进一步降低了运营成本。
软件的易用性也极为关键。自编写第1行代码之初,我就决定采用SQL作为标准查询语言,而不是像InfluxDB、Prometheus、OpenTSDB等软件那样,使用它们自己定义的查询语言。在安装部署方面也追求极致的便捷性,确保从下载、安装到启动,整个过程能在60s内完成。示例代码都是即拷即用的。所有这些努力,旨在降低用户的学习成本。
开源就是要把核心代码开源
在数据库这类基础软件领域,用户的迁移成本极高。没有充分的理由,很难说服开发者转向新的数据库系统。因此,自创业之初,我们就深入思考并得出结论:开源是关键。尽管我自己和团队都缺乏开源经验,但我们在发布第一个正式版本并签约3个重要客户后,从2019年3月开始,便全力以赴地准备开源工作。
2019年7月12日,在全球架构师峰会深圳站上,我正式宣布TDengine单机版开源。由于我们的产品精准定位于物联网、工业互联网数据平台的核心需求,加之核心代码的开源,以及其卓越的性能和用户体验,我们的产品迅速走红。GitHub网站上的星数和Fork次数持续攀升,连续多日在全球趋势排行榜上占据首位,TDengine官方网站的访问量也急剧增加。开源3个月后,GitHub网站上的星数已突破1万。这一切成绩远超我们的预期。我们6人的小团队竟然点燃了整个市场的热情。
在决定开源时,我坚信必须将最核心的代码开源,因为只有真正为用户提供价值,将自己的技术创新和优势完全展示出来,才能赢得开发者的青睐。然而,由于担心开源可能不会成功,我们最初并没有将一个核心功能——集群功能开源。但在单机版开源后,我们看到市场的热烈反响,以及大量用户对集群功能的迫切需求,这促使我们决定将集群版也开源。经过充分准备,2020年8月,我们正式发布集群版的开源代码。事实证明,这一决策同样正确。集群版开源后,再次受到开发者社区的热烈欢迎,GitHub网站上的星数持续上升,实例的安装数量迅速增长至每天超过200,每日克隆代码的人数超过1000。
认识到云原生技术是未来发展的关键,我们积极开发了云原生版,并在2021年8月将其开源,同样赢得了众多开发者的喜爱。
TDengine产品仍在不断演进之中,未来我们计划开源更多模块。我们对开源的承诺始终如一,那就是将用户最喜爱的、最核心的功能开源。
商业化成功是开源持续成功的保障
企业的生存和发展需要盈利作为支撑。我们不能仅依赖研发团队的热情,而不考虑经济回报地持续推进开源项目。因此,在开源项目取得成功的同时,我们正积极探索实现商业成功的途径。经过一系列的市场调研,我们决定遵循开源软件的常见模式,推出付费的企业版。
TDengine的核心代码,包括集群版和云原生版,已经全面开源。那么,企业版与之相比有何独特之处呢?我们决定将企业特别关注的功能,如数据备份、容灾、权限控制、安全、多级存储及各种数据源的无缝接入等辅助功能,全部集成到企业版中。即便没有这些辅助功能,TDengine作为一个时序数据库,在功能和性能上也已经十分完备,并且与其他开源时序数据库相比,其优势依然显著。然而,这些辅助功能对企业的日常运营至关重要。
TDengine广泛应用于物联网、工业互联网等场景,这些场景涉及多种数据源,例如MQTT、OPC-UA、OPC-DA等。在工业场景中,也存在许多传统的实时数据库,如AVEVA PI System、Wonderware等。TDengine企业版包含一个专门的组件,通过简单配置,无须编写任何代码,即可通过该组件实时读取这些数据源的数据并保存到TDengine中。鉴于不同数据源在命名规则、测量单位、时区等方面存在差异,TDengine企业版还具备数据转换、过滤和清洗的功能,确保入库数据的质量。这大大简化了系统部署的复杂性。
在企业级应用中,数据库的备份与恢复、异地容灾、实时同步等功能至关重要。缺少这些功能,数据安全将无法得到保障,企业也不敢轻易投入运营。因此,TDengine企业版提供了这些关键功能。此外,随着边缘计算的兴起,众多企业期望将边缘侧的数据汇集至云端。为此,TDengine企业版还提供了边云协同功能,仅须简单配置,即可实现边缘侧数据向私有云或公有云实时同步。
在企业级应用中,确保数据访问安全同样至关重要。因此,TDengine企业版提供了数据传输加密、数据库存储加密,并设置了数据库访问权限、IP白名单和操作审计等功能。此外,TDengine还支持视图功能,并对视图实施了精细的权限控制,允许数据访问控制精确到具体的表、列和时间段等。通过SQL定义的数据订阅能够指定可访问的表、列和时间段,甚至可以对原始数据执行加工或聚合操作,并结合权限进行控制。这一切都是为了最大程度地保证数据访问的安全性。
在数据量呈指数级增长的当下,存储成本始终是企业运营中必须考量的因素。因此,TDengine企业版引入了多级存储机制,根据数据的访问频率,即冷热程度进行分层存储。最常访问的热数据存储在内存中,较热的数据则存放于固定硬盘上。对于访问频率较低的冷数据,存储在普通的机械硬盘上,而最不常访问的冷数据则可以存储在S3等更经济的存储服务上,从而最大程度地降低存储成本。
除了提供企业版以外,自2023年3月起,TDengine还推出了全托管云服务,并已在阿里云、AWS、Azure、GCP四大云平台上部署。对于中小企业来说,云服务是实现快速部署、享受高标准专业服务的同时,有效控制和降低运营成本的优选方案。我们深信,开源软件的发展前景与云服务紧密相连。通过开源模式,我们能够快速建立市场品牌和开发者社区,进而促使大量用户转化为云服务的使用者。
将数据价值最大化
TDengine的核心是一个时序数据库,它致力于高效地采集、清洗、加工和存储时序数据,并通过SQL提供强大的数据查询、分析以及实时数据分发服务。无论应用场景如何,用户采集并存储数据的根本目的是挖掘其内在价值,如实现运营的实时监控、异常检测及时报警、未来趋势预测,以及设备预测性维护等。因此,TDengine的核心目标是助力用户最大化数据的价值。
TDengine的查询计算引擎本身已具备强大的数据分析功能,支持标准SQL、嵌套查询、用户自定义函数,以及众多专为时序数据设计的扩展函数。为了助力用户最大程度地挖掘数据价值,TDengine通过标准的JDBC和ODBC接口,实现了与多种BI、AI及可视化工具的无缝集成,如Power BI、Tableau、Grafana等。用户可以根据自己的偏好选择最合适的工具来分析和处理存储在TDengine中的数据。
实时数据分析的重要性日益凸显。TDengine内置实时流计算功能,支持多样化的窗口触发机制,如时间窗口、状态窗口、会话窗口、事件窗口、计数窗口等。为了帮助用户最大程度地执行各类实时计算,TDengine还提供灵活且安全的实时数据订阅功能。一旦订阅的数据发生更新,第三方工具将即刻收到通知,从而能够对数据进行及时处理。
为了简化各类应用的开发流程,TDengine提供了支持C/C++、Java、Python、Rust、Go、Node.js等多种主流编程语言的连接器,并为各种功能提供了即拷即用的示例代码。
随着人类社会步入AI时代,新的算法和模型层出不穷,数据分析和处理工具也在不断更新。面对这一趋势,没有单一厂商能够提供全部所需工具。TDengine致力于通过其开放接口,确保与这些新兴工具和平台的无缝集成,助力用户充分挖掘数据的潜在价值。
写在最后
自我写下TDengine的第1行代码以来,已经过去了7年。当年49岁的我,现在已经56岁。尽管开发之路充满挑战,但令人鼓舞的是,TDengine的日均安装量持续增长,产品正被越来越多的用户接受并喜爱。TDengine的商业化进程也进展顺利,我们已拥有200多个付费客户,他们来自电力、新能源、汽车、石油、化工、矿山、智能制造等多个行业。我们的客户群体不仅遍布中国,而且已经扩展到全球各地。
为了帮助广大用户快速掌握并有效使用TDengine,我们团队决定编写这本《时序大数据平台TDengine核心原理与实战》。在本书的编写过程中,有十余名研发团队成员参与。在编辑的指导下,我们努力确保内容的全面性和准确性。书中不仅介绍了TDengine的数据模型、数据写入、数据查询、数据订阅、流计算等一系列核心功能,还包括运营和维护TDengine所必需的知识。
作为开源承诺的一部分,我们对TDengine的内核设计进行了详尽的阐述,从分布式架构到存储、查询计算、流计算、数据订阅等。研发爱好者可以通过这些章节与我们发布在GitHub网站上的源代码对照学习,深入理解TDengine的设计和工程实现。此外,我们还精选了一些典型的应用场景并对其进行了深入介绍。
继2016年AlphaGo的突破之后,2023年ChatGPT再次将AI推向了崭新的高度。AI的飞速发展使人们更加意识到数据的价值,数据基础设施的重要性随之日益凸显,且数据量将持续呈指数级增长。由于这些增长的数据大多来自机器、设备和传感器采集的时序数据,因此我们坚信时序数据处理这一细分市场必将不断扩大。当传统数据库和大数据处理工具在性能、水平扩展性和运维成本方面越来越难以满足需求时,TDengine将迎来其发展的黄金时期。
我深感庆幸自己在2016年做出的决定,选择研发一款既有迫切市场需求和技术壁垒,又须长期投入且具有巨大发展潜力的产品。我同样庆幸我们选择将核心代码开源。现在,我们所能做的是继续在开源的道路上奋力前行,力争使TDengine成为时序大数据平台的业界标准。坚持做难而正确的事情,这是我一生中永不后悔的选择。
Leave a dent in the world!(为世界留痕!)
陶建辉
涛思数据TDengine创始人
2024年7月12日,写于TDengine开源5周年之际