作者 | 蔡芳芳
受访嘉宾 | 陶建辉
编辑 | 陈思
AI 前线导读:数据读取和写入性能碾压 MySQL、Cassandra、InfluxDB、Open TSDB 和 ClickHouse,同时将数据库、消息队列、缓存、流式计算等功能融合一起,应用无需再集成 Kafka/Redis/HBase/Spark 等软件,TDengine 是如何做到的?
近期,IDC 对物联网支出作出预测,2019 年全球物联网支出将达到 7450 亿美元,IDC 报告表明,各行业的物联网解决方案支出占比持续提升,物联网的预期增长仍然很高。物联网的下一章刚刚开始,在 涛思数据 创始人陶建辉看来,未来 5 年内,世界上 90% 的数据都会是物联网采集的数据,于是他们打造了 TDengine。这是一个专为物联网、车联网、工业互联网、IT 运维等设计和优化的大数据平台。除了高性能的核心时序数据库功能,TDengine 还提供缓存、数据订阅、流式计算等功能,旨在最大程度地减少研发和运维的工作量。从 7 月 12 日在 ArchSummit 全球架构师峰会(深圳站)2019 宣布开源至今两周时间,TDengine 开源项目 在 GitHub 上已经收获了超过 6800 个 Star,Fork 数超过 1700,在业内引发热议。
开源地址:https://github.com/taosdata/TDengine
TDengine测试数据和报告详见:https://www.taosdata.com/
InfoQ 记者有幸在 ArchSummit 全球架构师峰会(深圳站)2019 现场采访到了涛思数据创始人陶建辉,听他分享 TDengine 性能做到 Hadoop 十倍背后的技术创新、TDengine 开源的初衷以及未来对 TDengine 商业化推广和开源社区的规划。
InfoQ:您好,非常感谢您参加 ArchSummit 全球架构师峰会(深圳站)2019 的视频采访,首先请您做一下简单的自我介绍,包括您的工作经历和创业经历。
陶建辉: 大家好,我叫陶建辉,我是涛思数据的创始人。今天很高兴来到现场与大家互动。我是 86 年考上大学,94 年到美国留学,97 年开始在芝加哥摩托罗拉工作,后来又到了 3Com 公司。我在 2008 年回到北京创业,前面做过两家创业公司,一个叫和信,做的是手机实时消息推送服务,后来这家公司被联发科收购了;13 年我又重新创业,做了一家做智能硬件的公司,叫快乐妈咪,主要是做母婴健康大数据服务平台,这家公司在 16 年年初被太平洋网络收购了。然后我休息了一年。我觉得物联网一定会发展起来,随着数据量越来越大,需要一个新的方式来处理物联网采集的海量数据,这是一个机会。再结合我前面那家创业公司的经验,我觉得我还没老。那时候,我正好 49 岁,我觉得我可以自己做,而且我认为现在大家的处理物联网数据的方法不太合适,我找到了一种更好的创新方法来存储和处理这些物联网数据,因此我就自己一个人写了两个月代码,来证明我的想法是对的。然后我就开始融资、组建团队,涛思数据就是在 17 年 5 月份正式成立的。
InfoQ:所以 TDengine 这款产品一开始的定位就是专门为物联网而设计的吗?
陶建辉: 物联网是一个很宽泛的概念,包含了车联网、工业互联网、IT 智能运维监测等,只要通过各种机器设备传感器采集数据,都属于这个范畴。因为我上一家创业公司做的是智能硬件,需要采集各种各样的数据送到云端,做健康数据的分析。后来我又了解了很多物联网项目,包括工业互联网、智能硬件、智能家居等项目,这里面共性的东西实际上就是数据的处理,怎么存储、怎么高效地查询计算和分析。涛思数据这两年多的时间,一直在做的就是这样一件事情。
InfoQ:TDengine 是什么时候正式对外推出可用产品的?从 TDengine 开始研发,到推出对外可用的产品,一共花了多长时间?
陶建辉: 我们第一款产品真正可以交给用户使用是在 2018 年 8 月份,从一开始研发到对外推出可用的产品大概花了一年半的时间。
InfoQ:在 TDengine 的研发过程中,团队遇到最大的困难是什么?这背后有什么故事可以跟我们分享吗?
陶建辉: 最大的困难就是技术,技术挑战相当大。我们这款产品看上去很简单,不就是把各种采集的数据存储起来再做查询,实际上因为这属于底层软件,所以它的技术挑战很大。比方说我们经常要做一百亿条记录的插入、查询测试,这一百亿条记录如果中间丢了一条,你要找出丢的是哪一条、为什么丢,涉及的模块很多,技术挑战相当大。
我可以分享一个我们在 TDengine 开发过程中的小故事。因为我自己在做这个产品,它主要强调性能和易用性这两个方面。如果性能不够好,那它就没有代替其他软件的可能,我就举一个性能的例子。有一次我们团队一个工程师,改了一行代码,他改的那行代码还是我写的,大家都没有意识到,这行代码让整个产品的性能下降了一半都不止。整个团队都急死了,花了整整一天时间,回滚代码查看,最后才找出原因并修复了问题。
InfoQ:在性能测试报告中,你们对比了 TDengine 和 MySQL、ClickHouse 等开源数据库产品的读写性能,这是否意味着这些产品是 TDengine 的对标对象?
陶建辉: 虽然 MySQL、ClickHouse 这些是大家更熟悉的开源数据库产品,但我们真正对标的是测试报告上写的 InfluxDB、OpenTSDB,包括阿里的 HiTSDB 等产品,这些才是我们真正对标的产品。但是也不完全公平,因为这些产品只是一个数据库。TDengine 的核心功能也是个数据库,但除了数据库之外,TDengine 还支持很多其他功能,比如说大数据处理所需要的缓存、消息队列、流式计算等一系列功能。我们的性能测试报告针对的是数据库这项功能,因为数据库测试相对标准化,一般看的就是插入速度、查询速度,所以我们基于此做了对比。目前 TDengine 在大数据领域还没有真正完全对标的对象,我们是全球第一个真正做物联网大数据平台的产品。 这也是为什么我们不把自己叫做数据库的原因。
InfoQ:官网上对 TDengine 的介绍中提到了“超融合”,指的是将大数据处理需要的消息队列、缓存、数据库、流式计算、订阅等功能融合在一起。但目前大数据生态中普遍是不同的产品负责不同的功能、各司其职,很少有集大成的产品。能否详细谈谈为什么要做“超融合”?
陶建辉: 为什么要做“超融合”呢?目前通用的大数据平台,往往要集成五六个甚至七八个软件,对于研发者来讲挑战很大,因为你不只要学一个软件、掌握一个工具,而是要同时掌握好多个工具。对于企业管理人员来讲,连招人都很困难。而且每个开源软件,你认真细究都会出问题。如果我们把所有这些功能集成在一起,只需要一个软件就能提供所有功能,就能够把开发的难度大大降低。而且因为我们使用的是标准的 SQL 接口,只要学过计算机的人,几乎没有不会用的,因此我们就让研发和维护都变得极其简单,这点改进是非常重要的。同时,TDengine 也有它特别的地方,它只面向物联网行业。它不适合做舆情分析,不适合做用户画像,不适合好多通用的互联网行业应用场景,我们只能做物联网、车联网、工业互联网、运维监测这些场景,比如风力发电、国家电网物联网的建设等。
InfoQ:能不能再谈一谈怎么实现“超融合”,技术上可以分为哪几块?
陶建辉: 数据库插入数据的时候,一般需要先进入消息队列缓存起来。而物联网的数据很特殊,它实际上非常类似消息队列,因为物联网采集的数据是按照时间顺序源源不断发过来的,它本身就是一个队列。第二点,物联网最重要的特点就是要看实时状态,因此我们会把每个设备的数据都直接缓存在内存里一段时间,缓存的时间会根据它采集的时间长度定。而互联网应用的缓存不是由这个决定的,它的缓存是由用户行为决定的,比如说这条微博点击的人特别多,就要一直缓存着。但物联网数据不是这样的,对于物联网数据,大家最关心的是刚采集到的数据,已经过去几个小时或几天的数据,大家都不在乎。因此我们巧妙地利用了这些特点实现了消息队列和缓存。另外还有流式计算,因为物联网数据本身就是流式的,我们能够顺其自然地推出流式计算,当然最后这些数据也要存起来,数据库也要能做历史数据的分析,这都是数据库本来就擅长的。
InfoQ:从性能测试结果来看,TDengine 在读写性能、集群水平扩展性能等各方面表现都非常惊人。能否谈谈你们在技术上做了哪些创新?
陶建辉: 主要是我们的数据模型不一样。我们的数据模型要求对每个采集点,或者每个采集设备单独建表。比如说你有一千万个智能电表,它就建一千万张表。单独建表的好处是什么?单独建表之后,每个设备采集的数据在内存里或者硬盘上,就会是一块一块连续存放的。当然,不可能完全无限连续,但可以做到 4K、16K、64K 这样连续。这样一来,读数据的时候就会读完整的一块。因为物联网还有一个特点是从来不关心单个点的值,而更多关心的是整个趋势。因此物联网场景下做查找的时候,往往是查 5 分钟的数据。但 5 分钟的数据又包含很多点,因此我们这种设计,就能够让查询速度大大加快。按照我们的数据模型设计,一次读取可能可以读一千条记录出来,而按照以前的数据库设计,如果要读一千条记录可能就要一千次 IO 操作,一定会慢。
那么写操作为什么我们也能够做到很快?对于物联网设备来讲,我们设计成一个设备一张表以后,每写一张表其实就是一个设备在写。因为物联网的数据,比如说车或者智能电表、智能手环,数据一定是某一个设备产生的,一张表对应的数据生产者是唯一的,同时只会有一个设备在写这个表,从技术上来看就很简单了。另一方面,物联网数据是按时间顺序来的,这就意味着它是一个追加操作,所以写操作自然就很快。
但是我们这种数据模型,也有另外一个问题,那就是表的数量太多了,比如说一千万个智能电表,那就一千万张表。这些表如果只是单独看,那我们这个方法已经足够好了。对单个电表或者单个汽车的数据的插入、查询速度,都不可能有比我们快的。但是如果要做聚合,那就很麻烦。因此,我们还有另外一个很重要的创新,叫超级表。超级表指的是将同一类型的设备看作一个表,每个表可以带标签,比如喜来登酒店 11 楼某个房间的电表,聚合的时候只要统计 11 楼的十几个电表,或者整个喜来登酒店一百个电表,查询起来还是很快的。如果没有这个超级表的创新,我们的产品也不太可能受欢迎。
InfoQ:TDengine 在高可靠性方面做了哪些工作?其可靠性可以做到什么程度?
陶建辉: 我们研发 TDengine 的时候是基于一个假设,那就是任何软件、任何硬件都是不可靠的,也就是说任何软件不可能没有 Bug,任何硬件不可能不出问题。基于这个假设,我们就要做一个多副本的分布式系统,数据都可以丢,硬盘都可以换,甚至我们做到了什么程度呢?我们支持热插拔,硬盘坏了可以当场换,甚至 IDC 机房迁移的过程中,数据库仍然可以继续工作,做到了这种程度。
在可靠性方面,我们主要用到了业内公开的一些 NoSQL 分布式数据库的方法。当然我们也充分利用了物联网数据的特点,才能够做得足够好。我们坚信物联网一定会发展起来,可能不到五年或五年左右的时间,世界上 90% 的数据都会是物联网类型的数据。
InfoQ:与现有的时序数据库产品相比,TDengine 的优势是什么?
陶建辉:TDengine 的优势是高性能而且简单易学,它的安装包只有 1.5MB,从下载到安装成功运行不会超过 5 秒钟,这是现在没有任何大数据软件能做到的。但我们跟现有的大数据产品相比当然也有弱点,我们的产品仅仅开发了两年时间,生态还有待完善,而 InfluxDB 数据采集接口和应用软件的接口已经有很多了,这是我们后面要长期努力的目标。
InfoQ:TDengine 做到了高性能和易用性,但技术没有完美的技术,TDengine 是否在其他方面做了平衡和妥协?
陶建辉: 我们做的妥协是什么?第一个,刚才我一直强调,我们是专门做物联网的数据,做不了微博的数据,做不了微信、电商的数据,这些都做不了,我们真正做的是物联网、车联网,这是一个。第二个妥协是,从技术的角度来看,我们是采用结构化方法实现的,这意味着开发者需要自己定义表的结构。而像 InfluxDB、OpenTSDB 是不需要定义表的结构的,因为他们都是 NoSQL,不用定义 Schema,开发者爱怎么写数据就怎么写,如果已经习惯了这种做法可能就会觉得 TDengine 不好用。但如果你历来都只是用 MySQL、Oracle 这种结构化数据库,那就没有问题。但结构化的方法在物联网、车联网行业并不是个问题,这是我们在准备开发之前就决定的。因为物联网数据都是由硬件设备采集的,硬件的数据格式是固定的,一般很少改动,除非固件更新,但固件更新的可能性很小。而互联网应用开发则需要频繁迭代和更新,变化太大,所以它用 Schemaless 这种不需要定义结构的方法就是很合适的。但物联网、车联网、工业互联网的数据格式可能一辈子都不更新,所以结构化就不是很大的障碍。
InfoQ:现阶段大部分企业都已经搭建了自己的大数据平台,让他们整套切换到一个新的大数据平台并不现实,TDengine 是否可以与已有的大数据生态兼容?对于 TDengine 的落地应用和推广,您是怎么考虑的?
陶建辉: 基础软件切换的成本极其高,最终还是要看这个企业有没有遇到真正的难点和痛点,现在我们付费的客户都是已经遇到了难点和痛点,他觉得非得抛弃眼前已有的大数据平台。那么难点和痛点在哪里?第一,我们有一个做车联网的客户,目前已经拥有 PB 级别的数据,查历史数据几乎读都读不出来,他们现在就用 HBase 层的,他们老板找他,无论怎么搞都要查出来,哪怕几秒钟也行,但问题是几秒钟都查不出来,他非得解决这个问题,就成了我们的客户。还有另外一个客户,他们的数据量已经很大了,他们觉得成本太高了,而我们能够把他们的总拥有成本降到原来的 20% 都不到,比如原来需要十台服务器,现在一台就够了。因为 TDengine 的存储做得很好,以前 10 个 T 的数据,到我们这里变成一个 T 了,那这肯定就要换,因为能省很多钱。还有一类是什么?因为大数据系统,尤其是 Hadoop 这个体系已经深入人心了,但其实它在很多场景下数据量并不大,但是 Hadoop 要做一套私有化部署的时候,可能要装 HDFS、HBase、Kafka 等一系列的东西,这个成本真的高,不是机器的成本,而是安装部署维护的成本极其高。那如果我们能够提供一个统一融合的解决方案,只要一个小软件全部搞定,就能大大简化安装部署维护的难度,那么客户就会有足够的动力来换。同时,对于已经自建大数据平台的企业,我们也会提供一些工具,比如数据迁移的工具,甚至我们会兼容一些现有的接口,对于用户来说接口和以前可能一模一样,只要换个 IP 地址就行了。
InfoQ:目前已经有客户在试用或在实际业务中使用 TDengine 了吗?
陶建辉: 我们试用的客户有好几十家了,而最终买单的客户马上就超过十家,包括车联网、电力、数控机床、智慧城市等不同行业场景的客户。
InfoQ:当前 TDegine 还存在哪些问题有待解决?
陶建辉: 应该不算是问题,而是一些需要不断改善的地方。其中一个是我们的流计算做得还不够,比如说我们现在支持简单的滑动窗口,未来需要把它变成事件驱动的流计算,然后我们还要支持用户自定义函数。等我们把用户自定义函数和事件驱动完善后,TDengine 会在物联网领域发挥机器大的作用,数据清洗、规则引擎都可以用一套软件完全搞定,很多工具都不再需要了。
InfoQ:对于 TDengine 接下来的研发重点和推广部署,您还有什么进一步的计划?
陶建辉: 今天我们就是来宣布 TDengine 开源的,开源是我们的一个推广方式。当然我们确实越需要开源,尤其是要把我们最核心的代码开源出来。就像刚才讲的,为什么 TDengine 能够比其他产品快一二十倍?如果你不相信,你可以去看我们开源的源代码,看完之后你就知道,这个代码保证快。在中国,很多用户都不愿意付费,都希望用开源软件,那我们就开源给你用,这是我们的一个推广方式,我们希望把这个社区经营起来,从而打造品牌、扩大影响力。另外一方面,我们也非常欢迎其他开发者加入进来共同为这个项目做贡献,比如说我们需要各种数据采集接口,开源之后可能就会有人参与进来一起贡献代码。
另外一方面,我们除了开源版之外,还会有企业版。企业版是要收费的,它是一个高可靠可扩容升级的版本,并且会提供专业的一对一服务。我们还有第三个版本就是云服务版本,我们会将这个版本放在阿里云、AWS 等不同的云平台上面,企业可以直接购买我们的服务,按照用量和使用时长来收费。
InfoQ:现在 TDengine 已经在 GitHub 正式开源,你们采用的是什么样的开源许可?
陶建辉: 我们采用是 AGPL 许可,这个开源许可意味着,只要你使用了我们的开源软件,你也必须开源。
InfoQ:作为一款开源产品,肯定绕不开开源和商业盈利模式的问题,TDengine 开源之后的盈利模式,您是怎么考虑的?
陶建辉: 我们开源的技术一定会尽最大的努力去维护,但我们还有企业版,就像我们的竞争对手,比如说 InfluexDB,我们的模式几乎跟它一模一样,都是有开源版、企业版和云端版。像 MongoDB 也是这样,有企业版、社区版和云端版本。
InfoQ:但其实现在 MongoDB 跟云厂商之间也存在一些纠葛,那你们未来和云厂商之间的关系是怎么考虑的?
陶建辉:当然,我们希望跟云厂商采取合作的方式,但你完全免费地拿这个东西在云上提供服务,我们的 AGPL 许可是不允许的。不可能我们整个团队辛辛苦苦开发的代码,直接被你拿去赚钱,这是整个开源社区和云厂商之间最大的问题。比如说 MySQL 这么流行,结果云厂商什么贡献都没做却从 MySQL 赚了很多钱。我们所使用的 AGPL 许可和 MongoDB 搞的服务器端公共许可证(SSPL)都是来解决这个问题的,包括 Redis,最近大家修改开源协议的原因都是为了避免这样的情况发生。
InfoQ:目前 TDengine 跟国内云厂商已经有一些合作了吗?
陶建辉: 还没有。但我的信号十分明确,肯定不能让他们免费使用我们的开源代码,他们必须有贡献。等我们的开发者社区和用户群慢慢壮大起来,我相信一定能走到合作的一天。其实开源和云不是天生敌人,而是可以互利互赢的。
InfoQ:那么下一步 TDengine 的开发者社区和生态,您打算怎么去推进?
陶建辉: 这是下一步整个公司的重心,我们新上线的网站里面会有博客,我们会在 GitHub 上、Twitter 上、微博上、Stackoverflow 上,各种技术论坛与开发者互动,我们也会参加比如像 ArchSummit 架构师峰会这样的开发者大会,我们也会自己组织活动,线上线下一起来推动社区的发展。 采访嘉宾介绍:
陶建辉,涛思数据创始人,1986 年考入中国科大,1994 年到美国印第安纳大学攻读天体物理博士,曾在美国芝加哥 Motorola、3Com 等公司从事 2.5G、3G、WiFi 等无线互联网的研发工作,国际顶尖无线数据专家。2008 年回到北京创办和信,专注移动互联网 IP Push 和 IP 实时消息服务,2010 年和信被台湾联发科收购。2013 年再度创业,创办快乐妈咪,专注母婴智能硬件和母婴健康服务,2016 年初快乐妈咪被太平洋网络收购。2017 年 5 月创办涛思数据,专注时序空间大数据的实时高效的处理(存储、查询、计算等),其产品 TDengine 比其他业内标杆能好 10 倍以上,可广泛运用于物联网、车联网、工业大数据、金融等领域。