从宇宙大尺度结构到胎心监测,从手机消息推送到物联网大数据处理 – 跨界是创新的主要源泉
从宇宙大尺度结构到胎心监测
熟悉我的人都知道,我在中国科大学的是天体物理,后去美国印第安纳大学,前后念了近5年的天体物理,方向是宇宙大尺度结构,试图用类星体的观测数据来回答宇宙学的一个基本问题,宇宙是否具有各向同性,是否是有中心的。但当年为了早日过上美国梦的生活,我没有念完PhD,而是在1997年初就加入了芝加哥的Motorola,放弃做科学家的梦想,做软件工程师了。从此以后,与相对论、量子场论、黑洞、宇宙大爆炸这些话题告别,自己再也没有想到所学的天体物理方面的知识能在工作中直接派上用场。
然而人生处处都是意想不到 。
2013年我创办快乐妈咪,专注母婴智能硬件。我们的第一款产品是胎心监测,通过超声波的多普勒效应,用智能手机来测算胎儿的心跳。
从记录的胎儿心跳数据来看,可以很清晰地看到心跳是一个周期性的信号。最初,我认为这是一简单的事情,写个程序就很容易计算心跳周期。但没想到,我们研发同学花了一个多月时间,计算出的心率就是不准。而且深圳的厂商告诉我,全中国只有5个人知道如何计算胎心的算法,很有技术挑战。于是小伙伴们建议我,赶快找清华的老师来解决。
我听了之后哈哈大笑说:“如果这个问题要靠清华老师解决,这公司就不要开了。”
网上搜了几篇胎心监测的技术文章,看完后,我心里很清楚,认为可以用我学天体物理时所学的相关函数方法来解决这个问题。相关函数是一种通用的数字信号的处理方法,被天体物理学界用来分析宇宙大尺度结构,包括类星体空间分布,只是分析的是空间域的周期,是三维的。胎心是一个时间域的分析,而且是一维的,简单很多。
意识到可以用相关函数处理后,我马上动手写程序,先用快速傅里叶变换对胎心信号做滤波,然后通过滑动窗口计算相关函数,从相关函数计算出的最大值对应的滑动窗口大小定出周期,600多行程序,就这样简单。一周后,我给小伙伴们展示可以准确而且快速地在iPhone上计算出胎心的时候,大家都很兴奋。而且与市场上其他产品做对比测试显示,我的程序计算的数字更快、更准,并与卖20多万RMB的惠普专业胎心仪计算出的结果完全一致。
快乐妈咪胎语仪
后来,我回到科大天体物理中心,给我的导师褚耀泉老师及其他同学谈起这个算法,大家既震惊又开心,多普勒效应、相关函数的方法居然用来测胎儿胎心。我自己也感慨,五年的天体物理的专业学习,居然没有白费。
可见,天体物理的研究方法貌似不近人间烟火,但其实与我们日常生活又是密切相关的。世界上很多问题,看似复杂,但在抽象之后,本质上都是一样的。不仅宇宙大尺度结构空间周期的计算、胎心的计算,而且手环记录的步数、跑步机上心率的计算,都是可以用相关函数算法来解决的。
从手机消息推送到物联网大数据处理
2016年初,快乐妈咪被收购。之后,我先是休息了几个月,但闲不住,就开始看各种项目,想尝试做天使投资,但看的最多的是与智能硬件、物联网相关的项目。看完后,我发现大家对物联网大数据处理的方法是极其的复杂,把Kafka, Redis, HBase, Spark, MongoDB等众多的开源软件堆砌在一起来处理数据,不仅研发成本高,而且部署复杂、维护成本很高。从一个受过多年物理专业训练的人看来,万事复杂的时候,一定要分析问题的本质,分析出本质后,解决方法往往很简单。经典力学的牛顿三大定律、电动力学的麦克斯韦方程、量子力学的波动方程,无一不是如此。
于是,我尝试分析物联网大数据,进而发现,这些传感器、机器、设备采集的数据很有特点,仔细分析各种场景,总结出十大特点。1: 数据是时序的,一定带有时间戳;2:数据是结构化的;3:数据源是唯一的;4:数据极少有更新或删除操作;5:数据是有保留期限的;6:相对互联网应用,写多读少;7:流量平稳,可以预测;8:数据的查询分析一定是基于时间段和地理区域的;9:除存储查询外,还往往需要各种统计和实时计算操作;10:数据量巨大。
那么基于这些特点如何更加高效的处理呢?我自己没有大数据处理或数据库的研发背景,一下想不到好方法。但2016年10月的一天,我突然意识到,任何一个传感器或设备产生的数据实际上是一个数据流,这个流送到云端服务器的时候,实际上对数据的处理是类似一个消息队列的处理。我一下就兴奋起来,因为这意味着可以照搬我2008年的和信的体系架构设计,轻车熟路,只是解决的具体问题不一样。
2007年底,基于各种因素,我判断移动互联网的春天已经到来。移动互联网起来后,一定要有一个统一的实时消息推送平台,将各种应用的通知发到手机。因为对网络防火墙打洞技术有深入的研究,我找到了一条高效的省电、省流量的推送方法,因此,2008年初我就辞掉芝加哥Motorola的工作,回到北京,创办了和信。和信除提供推送服务外,还想给所有的移动用户提供免费短信、彩信服务。
我自己动手开发了核心的推送模块,但除推送模块之外,还需要一个很重要的模块,那就是需要将所有未下发的消息进行存储。解决办法很简单,为每台手机建一个inbox, 而且用消息队列的方式,先进先出,每下发一条消息,等收到手机回应后,再下发下一条。后来由于用户不断增长,我们就开发了一个全分布式的、高可靠的、有持久化存储的消息队列。
当意识到传感器、设备的数据本质上是一个流,可以用类似消息队列的方法来处理的时候,我真是兴奋不已,而且马上就想明白了物联网场景下的数据模型,需要对每个传感器或设备单独建表。
于是,一个数据采集点一张表的创新想法就这么出来了。
很多人曾问我,你怎么想到一个采集点一张表的模型,我说,做和信的时候,就是一台手机一个消息队列,这个想法对我而言是太自然的事情了。
现在物联网数据的处理,与我当年的消息队列模块相比,存储架构上,只是一个结构化与非结构化的区别。结构化的目的是为了更高效的做各种计算和查询。而实际应用中,还需要对多个设备之间的数据进行高效聚合,我马上又想到可以用数据分析中的维度表、事实表的模型来解决。
因此接下来,我很快就提出了超级表的概念。
TDengine的GitHub页面
技术解决方法想明白后,真是脑洞大开,对于物联网大数据,我们根本不需要复杂的Kafka、Redis、HBase、Spark、Flink等软件的组合,完全可以用一套极为简单的方法来处理。想到万物互联的时代正在到来,如果能提供一个极为高效而且简单易用的物联网大数据处理工具给全球开发者使用,那是一个很值得骄傲、而且有巨大商业价值的事情,我便在49岁的时候,下定决心进行第三次创业,因此有了现在的涛思数据,有了现在开源的TDengine。
“不识庐山真面目,只缘身在此山中”
很多人质疑过我,你不是一个从Oracle, DB2核心团队出来的人,怎么能做数据库?但细挖我的历史,明白消息队列与时序数据之间的相似之处后,我想就不会奇怪了。而且正是由于我是跨界过来的,更容易想到创新甚至是颠覆式的方法来处理物联网的大数据问题。
我见过也面试过国内很多做数据库内核开发的,基本上就是在开源代码的基础上,做点修修补补、或者是包一层壳,来做自主可控的产品,这里面很难看到颠覆性的创新。我不会选择这样的方式来研发产品,更不会用它来做创业的方向。找不到真正的创新,我还不如退休过休闲的日子。
“横看成岭侧成峰,远近高低各不同。不识庐山真面目,只缘身在此山中”,当任何一个问题从不同角度看时,会是完全不一样的。在一个行业呆的过久的人往往难有创新,因为眼光已经固定。同样是物联网数据的处理,与业内人士相比,我这个曾学过流体力学、天体物理、计算机等专业,还在高分子物理实验室泡过几年,在美国做过手机软件、核心网络设备研发,更是在消息推送、智能硬件上创业过的老兵,看待的角度和发现的问题,自然不一样,甚至是截然不同。
因此,创新对我而言便是一件很自然的事情。
TDengine已经开发了四年时间,而且从2019年7月开源之后,特别是去年8月集群版开源之后,获得了开发者社区的巨大反响,每天GitHub上克隆的用户数都是好几百,每天上线的运行实例数都在100以上,几乎成了物联网行业数据处理的事实标准。每天看到这些数字时,我都是很激动,觉得自己贡献的五万多行代码没有白写。
但更让我激动的是,TDengine有可能在我曾热爱的天体物理领域发挥作用。
现在全世界,包括中国,甚至中国科大,都在建巡天望远镜。这些望远镜每天记录数百亿颗星星的亮度、光谱等信息,根据长时间的观测,来找到有异常变化的星星,然后对其做专门的观测。这样产生的数据量极其巨大,而且诞生了天文学新的分支,时域天文学。其实,这些观测的数据,就是标准的时序数据,完全可以用TDengine来高效处理。对于天体物理专业出身的我而言,非常乐意协助中国天文学界,尽自己最大的努力来给全球天文研究机构提供一开源的、高效的天文大数据处理平台,
如果实现,这将是我个人最大的荣耀。
1993年天体物理硕士论文目录
仔细研究,你会发现,无论是巡天望远镜产生的数据、地震波的数据,还是发电机组的数据、智能电表的数据、车联网的数据,亦或是新零售的数据、IT运维的数据,甚至是股票交易的数据,一定的抽象之后,本质上都是一样的。大家都是希望基于这些数据做预测,做实时预警,连分析算法都没有什么区别。
世界本来就是简单的,没有那么复杂。
陶建辉
2021年3月14日于北京望京