存储 频道

阿里中间件专家论时序存储分析方案挑战

   【IT168 特别报道】2017第八届中国数据库技术大会(DTCC2017)于2017年5月11-13日在北京举办。本届大会以“数据驱动·价值发现”为主题,汇集了来自互联网、电子商务、金融、电信、政府、行业协会等20多个领域的120多位技术专家,共同探讨Oracle、MySQL、NoSQL、云端数据库、智能数据平台、区块链、数据可视化、深度学习等领域的前瞻性热点话题与技术。

  5月13日,在数据存储加速专场上,阿里巴巴中间件高级技术专家钟宇对时序数据存储做了精彩的演讲。


阿里巴巴中间件高级技术专家钟宇

  时序数据是什么?

  什么是时序数据?从定义上来说看,时序数据是指时间序列数据,是指同一统一指标按时间顺序记录的数据列。在同一数据列中的各个数据必须是同口径的,要求具有可比性。时序数据可以是时期数,也可以时点数。

  钟宇举了两个例子:比如你8点钟在餐厅吃早饭,这条记录相当于一个日志,本身不构成时序数据。但是如果当时有50个人也在那个时间、地点用餐,那么人数、时间、地点三个因素就构成了一个时序数据。

  再比如说股票价格,每一个时刻每一支股票都有一个交易的价格,这种就是时序数据。

  另外,时序数据主要具备持续产生大量数据;数据产生率平稳,无明显的波峰谷;近期的数据关注度更高;时间久远的数据,极少被访问,甚至不再访问;数据存在多个维度的标签;展示或使用时往往需要对数据做聚合计算等六大特点。

  其中,钟宇分享了一个应用实例,阿里内部有一个系统“鹰眼”,是由众多服务器组成的集群,有很多机器应用和CPU不够用、内存不足、等服务指标构成。这些服务指标会直接影响时序数据数值的波动,鹰眼系统是内部的系统,使用者是内部的管理人和程序员,每秒大概聚合几百次,这个场景是我们内部比较完整的时间序列的场景。

  时序数据的存储和分析

  演讲中,钟宇重点介绍五种时序数据存储分析方案。

  方案一:直接保存到关系数据库中(例如MySQL 的InnoDB引擎)

  这是一种使用SQL语句进行分的存储分析方案,最通俗的办法是把它存在关系型数据库里,但阿里巴巴内部系统通过多次测试,觉得并不是可靠之选。因为B树索引在持续写入的时候产生大量的随机IO,读写性能下降,存在读写慢的特点,同时,数据量大导致索引数据超过内容容量,即使可以优化,但还是带来了巨大成本的问题。

  方案二:直接保存到基于LSM tree的新型关系数据库引擎中(比如MyRocks)

  同样,使用SQL语句进行分析。即使存储引擎具有压缩功能,压缩率也不高(每个数据点平均需要50字节以上,同时,MyRocks写入性能能大约能达到20万点每秒,但是由于多个索引降低了写入速度,最终的系统大概在5-6万点每秒左右。另外,MyRocks本身的SQL优化不如InnoDB的成熟,在多维查找情况下往往选择不到最优的索引。更重要的是,降精度的SQL子查询很难被SQL优化器优化。

  方案三:直接保存到搜索引擎中,(比如Elastic Search或者Solr)

  这种方法采用的用搜索引擎的倒排索引进行多维查询和分析,这也是业界普遍采用的方案。倒排索引中做任意维度的查询分析很方便而且性能很高,但存储成本较高,使用起来方便灵活,对于很多小规模公来说,这种方案非常适用,速度快且支持开源。

  方案四:使用列式存储的方式来保存时序数据(例如Druid或者InforBright for MySQL)

  这是个非常灵活的方案。在压缩率方面,会比行式高出很多,写入磁盘数不可变,?可以在不使用索引或者使用很节约空间的bitmap索引的情况下,达到比较高的查询/聚合速度。但Druid和inforbright不适用处理阿里内部服务器,列式存储的筛选包并没有成条,没办法迅速的把一包数据文件剔除掉。

  方案五:使用流计算引擎(JStorm, Flink)

  对数据预先做聚合,结果写入NoSQL数据库(HBase),流引擎是计算引擎,具备多维计算能力,但缺点是需要提前设置聚合规则,无法实时获取数据,原始数据不存储,只能查看聚合规则生效之后的数,对于偶尔使用的数据,也需要配置预聚合规则,流计算引擎的计算资源消耗比较大。

  时间顺序数据库

  除上述分析分案,钟宇还介绍了时间序列数据库的方案。以openTSDB为例,时序数据是按照时间长度来存储,优点是存储压缩率较高,降精度好,能够做到每个数据20字节左右。与此同时,它也同时具备一些缺点。比如:它是一个无状态的节点,Meta Data缓存在所有的TSD节点重复出现在,存储空间巨大。同时,以RowScan的方式做多维度查询,当查询条件不满足RowKey的前缀时,会扫过很多无用的RowKey;更重要的是,单点聚合形式,容易出现聚合性能瓶颈(cpu&memory)。因此,阿里团队试图在OpenTSDB中引入倒排索引来优化性能和降精度。

  时序数据库的改进和展望

  综上所述,通过时序数据和流引擎的对比,流引擎的特点是速度快,数据量大导致存储空间不足,且不具备综合性。而时序数据是对原始数据反复计算,对于特有查询来说,某种程度上来说,降低了效率。所以,钟宇认为,将可配置的预聚合功能融合到数据库里即可解决方便使用的问题。另外,还可以考虑将历史数据的文件存在云存储上,可以做长线离线的分析。还可提供基于OSS和打包后的数据/索引文件的离线分析工具,供历史数据离线分析用。

  然而,在这其中,还会有一些难题是亟待解决的,比如发散时间序列问题、定时采样以及高频采样、数据表互操作等问题。

  因此,钟宇表示,未来,阿里团队会考虑引入存储引擎产品,结合事件驱动和定时采样考虑引进一些备存的思路解决数据驱动的模型双引擎。同时,硬件加速(类似FPGA)是适合时间序列场景的流架构的方式,目前正在采用FPGA的方式考虑下一步的硬件加速体系,提供公有云服务。

0
相关文章