最近,Amazon新推出了彻底托管的时间序列数据库Timestream,可见,各大厂商对将来时间序列数据库的重视与日俱增。
阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空数据库,在即将过去的2018年,咱们对TSDB进行了屡次的系统架构改进,引入了倒排索引、无限时间线支持、时序数据高压缩比算法、内存缓存、数据预处理、分布式并行聚合、GPU加速等多项核心技术,而且引入了新的计算引擎层和分布式SQL层,使得引擎核心能力有了质的提高,也基本上统一了集团内部的监控存储业务。2018年双11当天,TSDB稳定运行,0故障,支撑双十一核心业务系统,毫秒级采集能力,具有双十一峰值写入不降级,创造了集群TPS 4000万、QPS 2万的新纪录。同时,面向IOT赛道,推出了时空数据库和边缘计算版本,还会引入面向时序时空场景的智能引擎,将来咱们的目标是把TSDB打形成一款业内领先的“智联网数据库”。node
首先,咱们来看一下TSDB在2018年双十一的答卷:TSDB承受了4000万/秒的峰值写入,2万/秒的峰值查询,与2017年双十一相比均翻倍增加;而写入均值也达到了2600万/秒,查询均值达到了8000次/秒。算法
下面几页Slide是咱们在外部的一些场景和客户案例:docker
为了更好的支持业务的需求,今年咱们在核心引擎层面作了很是多的优化和改进,咱们还引入了新的计算引擎层,分布式SQL引擎,时空引擎以及面向IoT市场的边缘计算版本,极大的提升了TSDB的计算能力和场景。下图就是TSDB的主要架构图,接下来的篇章我会分时序引擎,计算引擎,SQL引擎,时空引擎,边缘计算这5大部分来详细的介绍咱们的核心技术能力。数据库
稳定性、流量翻倍、不降级、低延迟、无限时间线后端
为了支持多维查询和聚合查询,TSDB使用了倒排索引以快速定位到某条时间线。在TSDB现有的实现里,倒排索引是所有存放在内存中的。该方案的好处是根据某个Tag或者Metric查找时间线时会很是高效,可是缺点也很是明显:受限于内存大小,TSDB没法支持大规模的时间线。随着TSDB的客户愈来愈多,这个问题也愈来愈突出:某直播业务要求TSDB可以支撑20亿时间线的规模;某监控业务虽然初始时间线只有上千万,可是天天会新增几十万条时间线,并且时间线规模没有上限。缓存
TSDB在以前全内存倒排索引的基础上,将倒排索引持久化到硬盘,赋予了TSDB支撑无限时间线的能力。同时,经过给予倒排索引时间的概念,咱们将查询的时间过滤算子下推到了索引查询阶段,进一步优化了查询性能。而经过建立时间线索引的BloomFilter,TSDB保证了海量时间线规模下的低延迟索引查询。安全
拿集团内业务举例,原来64G内存的机器只能支持到不到500万的时间线,采用了上面的技术方案后,64G内存的机器就能够支持业务将近7000万以上的时间线,并且时间线数量在原有机器的基础上还能够继续增长。架构
为了加速数据的写入和查询能力,今年咱们为TSDB设计了全内存的分布式高效缓存,具体架构图以下:并发
最终咱们测试效果是:在单个docker下,单机TPS从原来的50W提高到100W+,QPS从原来的1K提高到2K+ ;而且这个改进很好的支持了集团魔兔业务的需求和发展。app
为了更好的解决数据量大的状况下的负载均衡的问题,咱们作了许多工做,主要包括:
- 经过读写分离机制进一步提高写入和查询性能;
- 快慢查询自动分级,让慢查询再也不拖累其余查询;
- 自动限流保护,无需业务方降级,无惧双十一洪峰。
双十一结果证实,新的负载管理策略帮助业务方很是平滑的度过了流量洪峰。
这里须要提到的另一点是,TSDB时序最新架构采用了Lindorm做为存储引擎,可以以更少的机器成本提供更高的吞吐、更低的延迟。下图为采用Lindorm存储引擎先后的TSDB写入延迟。
丰富的流式聚合算子:15+聚合,10+填充策略,支撑大量的adhoc操做:groupby, in,not_literal_or, topN, limit等等;支持不规则时间序列数据的处理,TSDB提供的填值策略,能够很轻松地将不规则的时间序列转换为常规时间序列进行处理;支持top-bottom等聚合方式。
时序数据存储的记录块方式是其查询性能的基石。TSDB既支持基于时间线的存储方式,
同时支持基于窗口的数据记录切分,复用同一套流式聚合,知足不一样业务场景性能需求。
TSDB服务目前已经在阿里云上出售,目前提供小规格版本以及标准规格版本,知足了不少用户的需求,但依然有一些用户但愿提供更小规格的TSDB服务。为了更好知足用户的需求,TSDB提供服务化功能。服务化功能是经过多个用户共享一个TSDB集群的方式来提供更小规格的TSDB服务
时序引擎接下来会继续突破核心技术,包括:自驱动索引TPI,多值数据模型,时序算法,内存计算等等。从功能,性能,成本,生态方面进一步发力,打通K8S指标存储体系,具有兼容Prometheus的能力。
业务接入量快速突破的过程当中, 也带来了数据存储量级与查询复杂度的快速增加, 单TSDB实例 在存储与计算方面的技术挑战也面临跳跃式提高. 为了不查询性能逐渐偏离用户设定的目标, TSDB的架构演进过程也引入相关的创新机制, 并最终延伸出时序产品体系中的新成员 - 时序计算引擎(TimeSeries Computing Engine, TSCE).
时序计算引擎(TSCE) 定位为对TSDB中原生数据进行流式计算的独立组件, 在时序产品体系中与时序数据库(TSDB)紧密结合, 提供诸如时序数据降采样(DownSample), 时间维度预聚合, 时间线降维归档 等涵盖时序数据查询与存储相关的核心计算能力.
同时, 针对应用特定的应用型时序计算场景, 时序计算引擎(TSCE) 亦支持自定义计算规则与函数, 知足各种应用自身的特定业务需求. 常见的应用型时序计算场类型: 时序事件告警, 事件模式匹配, 时序异常分析与检测等.
TSCE的产品形态以下:
时序计算引擎(TSCE)做为独立组件进行部署, 用户须要在TSDB实例的基础上根据成本与应用需求选择是否开启TSCE时序计算处理. 在这种产品形态下, 用户能够独立调整TSDB的存储规格 和 TSCE的计算容量, 作到根据应用特色弹性调整各自组件的实例规模. 在知足应用要求的状况下将TSDB/TSCE实例部署成本控制在合理区间.
TSDB与TSCE结合以后, TSDB引擎会在数据入库过程当中同时让TSCE引擎感知数据流动, TSCE会基于配置的时序计算能力或业务规则对数据流进行计算与分析, 计算后的结果支持三种反馈形式: 1.直接反馈至TSDB存储层,供TSDB查询. 2.做为视图以API或者SQL方式访问. 3.经过Reactive机制投递给其余事件处理渠道.
时序计算引擎TSCE 支持经过 TS-API 或者 Web控制台 进行时序计算能力/自定义规则的配置.
TSDB与TSCE协做工做时, 针对核心的时序计算能力, TSCE会与TSDB的进行无缝集成. 此时核心的时序计算处理对于TSDB终端用户而言是透明,无感知的执行过程. 用户开启并配置TSCE处理后, 原来的数据查询方式与查询格式不变, 整个计算的处理彻底在后台自动执行.
在查询层面上, 经过TSCE提供的时序计算处理, TSDB会在尽量的状况下将查询通过TSCE处理的计算结果.即便是在海量数据场景下, 也能提供时序数据的秒级分析查询与时间维度钻取查询.
而在数据存储层面上, 随着时间线的流逝, TSCE会对原生历史数据进行降维计算, 将细粒度的时间点逐步转化为粗粒度的时间点归档存储(例如秒级数据点转化为分钟级数据点), 进一步控制TSDB中存储空间与资源的使用量, 使得TSDB的稳定性与性能波动处于可控范围. 经过TSDB与TSCE结合, TSDB中管理的数据体量能够控制在合理水平, 提高资源占用率的同时进一步节省产品使用成本.
针对时间线(TimeSeries)的窗口粒度,数值分布等特征关系, 对时间线进行特征值转换的计算过程. 例如降采样(Dowmsampling)运算能够将秒级时间线转化为分钟级时间线, 通过转化后的时间线能够在查询流程上支持时间维度上下钻的即席查询; 而在存储流程上, 能够支持时间线归档存储, 将原始细粒度时间线转化为粗粒度时间线后,清除原始的数据点,释放相关资源.
针对应用特定的应用型时序计算场景, TSCE经过引入自定义计算规则与函数, 来知足各种应用自身的特定业务计算需求. 用户在通过简单的规则配置后, TSCE引擎会负责底层的数据流打通, 流计算拓扑映射, 分布式节点间的Shuffle与结果归并, 计算后结果集的存储与投递等一系列动做细节.
与General-purpose的流计算处理相比, TSCE的时序流处理除了实现下降技术门槛以外,作到底层流计算能力的弹性扩展以外, 也提供几个核心能力:
时序流处理规则
定义一个流处理规则包含了3个元素: 1.数据源(TSDB中的时间线), 2.自定义计算规则, 3.计算结果的输出源;其中数据源来自于TSDB数据库, 业务方能够经过规则匹配1条或多条时间线做为数据输入源. 而计算结果的输出源能够是写会TSDB, 或者转储为Reactive视图.
此外用户也能够经过lambda自定义与业务逻辑处理相关的函数, 加入到总体的规则处理链中.
除了配置TSCE的 时序计算能力 与 自定义时序流处理以外, TSCE也提供一些常见的时序分析与智能处理能力:
时序分析
简单的时序流复琐事件处理(CEP): 提供时间线上数据点之间的关系侦测,模式匹配等.
智能引擎
TSCE支持与时序智能引擎进行联通,让用户具有针对时序数据流进行时序异常探测,故障root-cause分析,流式模型训练等相关高级能力. 技术实现上TSCE以Function,DSL等形式进行智能引擎的规则定义与转换, TSCE在数据流的计算过程当中会基于内存间数据共享/RPC等方式完成与智能引擎的联动与交互
双十一期间, TSCE时序计算引擎支撑的几个典型业务场景:
今年咱们决定在TSDB上设计开发一个分布式的SQL查询引擎,为何要这么作呢?主要有如下几个缘由:
除了海量时序数据带来的挑战外,时序SQL查询引擎还面临和时序场景相关的挑战:
数据table Schema的管理
大多数的数据库在用户写入数据或查询以前,必须先经过DDL建立table schema,这些table schema等元数据又被存放在一个catalog或meta data store, 供数据写入或查询时使用。而时序数据库的业务中,大部分的数据源来自于监控设备的一个agent, 或者IOT物联网的一个sensor, 要求先定义DDL再写入数据会严重影响可用性; 同时,时序metric所对应的tag集合在应用演进过程当中,变化很常见。针对这一的应用特色,时序数据库TSDB,InfluxDB, Prometheus都采用了一种'Schema-on-write'的机制,应用直接写入数据,table schema是隐含在数据中。在'Schema-on-write'的机制下,须要解决没有DDL的状况下SQL查询引擎如何从海量时间线中获取table schema等元数据的问题。
在现有以关系运算为基础的SQL查询引擎中。为支持时序功能扩展,咱们须要一个易于扩展功能的架构,能支持开发时序相关的功能,好比时序Join, 时序相关的用户自定义函数(UDF)。
一个SQL查询引擎,优化器是性能优劣的关键。须要在通用的SQL查询引擎中,引入时序数据统计信息,做为输入提供给优化器;同时,在优化器中,引入时序相关的优化Rule, 好比FilterPushDown/ProjectPushDown规则,这些都是时序SQL查询引擎须要解决的问题。
SQL查询引擎是一个分布式的系统,其特色:
随着TSDB的业务发展,时序数据库TSDB渐渐走出APM与监控领域,在IoT领域也得到普遍应用。 而因为IoT领域的特性,其中采集到的不少数据不光有时间信息,还有空间信息与之关联。所以时序数据库也须要可以识别和处理空间信息,以便于更好地服务IoT场景。
对于传统的时间序列数据库,好比说OpenTSDB,若是用户想要存储和查询地理坐标信息,每每须要将经度和纬度分开存储,生成独立的时间线。可是使用时想要将二者从新关联起来须要用户作额外处理。另一种方式则是须要用户本身将地理位置信息进行编码,常见有的GeoHash或者Google S2。而后将编码信息做为时间线信息进行存储。即便这样,用户依旧须要开发时空过滤功能等等。
在IoT场景中,对于地理坐标信息的采集十分广泛。所以在时序数据库的基础上,咱们添加了对空间信息的存储和处理能力,使之成为时序时空数据库。TSDB的时空引擎让地理位置信息和时序信息完美结合起来,力争解决着一切关于时序和时空相关的查询分析。
最新版本的阿里云TSDB支持地理坐标位置信息的直接写入。用户只须要经过新版本的SDK以及Http Restful APIs能够将地理空间信息(地理经纬度)写入,而且能够对经纬度信息进行读取。下面两个经过Http Restful API接口TSDB多值写入和单纯的轨迹查询示例:(注意:Coordinate是一个关键字,表示地理坐标点写入,不可用于其余监控指标名称(metric)。)
说完TSDB对于地理坐标信息最基本的存储和查询功能,咱们来看一下TSDB所提供的经常使用时空分析功能。
对于写入的地理坐标数据点,TSDB将自动生成时空索引提升查询和分析效率。TSDB的时空索引基于传统空间索引(Google S2和GeoHash都是支持)结合时序数据特征建立的时空索引格式。同时为了提升,用户能够根据本身需求在开始使用时空功能以前提早配置时空索引按照时间分片。偏实时的业务,能够将按照小时或者半小时对时空索引进行分片。对于偏分析的场景,能够按照天进行分片。
时空索引为TSDB提供时空过滤分析功能提供了便捷和提升效率,如今最新版本的TSDB支持一些经常使用的时空过滤功能,好比BBOX查询和DISTANCE_WITHIN查询。
目前TSDB时空功能已经在云上推出了公测版本,你们在官网就能够看到咱们时空功能。
针对万亿级,EB级别的时空数据,全团队在全力研发下一代时空数据库,包括新型分布式列式存储引擎,GPU加速,智能压缩,冷热分离,高效时空索引,分布式时空计算等等;
今年,为了进一步支持外部IoT市场的需求,咱们在TSDB云版的基础上,开发了边缘计算版本(在广州云栖大会工业物联网专场,正式发布阿里云工业物联网边缘计算平台存储类产品 TSDB Edge,TSDB Edge 主要提供物联网边缘端设备相关数据的本地存储,本地分析,数据清洗和云端数据同步能力。);
经测试,该新型压缩算法的压缩率为3-40倍。与Facebook Gorilla算法相比,该算法压缩率提升约20%-50%,压缩性能提升3-5倍,解压性能提升4-6倍。
经过测试,使用GPU之后,查询性能能够达到原来的50倍。
TSDB 提供了强大的数据存储、处理和查询能力。在这个坚实的基础之上,愈来愈多的业务场景须要经过挖掘海量数据驱动业务价值的提高,TSDB 智能引擎就是在这个大趋势之下应运而生的。
TSDB智能引擎专一于时序时空数据的分析、检测、挖掘、预测能力,着力打造从数据到知识再到商业价值的高效引擎,争取达到价值链与数据能力的两个全覆盖。
市场上现有的商业智能与数据科学工具每每只利用数据库的存储查询功能,进行数据挖掘和分析以前须要从数据库中提数,以后的流程也脱离数据库环境进行。TSDB 智能引擎从架构上与数据库存储查询引擎进行深度整合,高效的利用数据库现有关系代数能力,并适当引入线性代数计算能力,天然的造成数据闭环,提供一站式的数据科学能力。相信随着不断地努力打造与突破,智能引擎也会逐步沉淀行业数据模型与智能定制算法,并最终造成端到端的行业智能分析解决方案。
限于篇幅,这里就不详细描述了。
咱们在今年8月份也是参与国家的时间序列标准的制定,而且在与其余厂商的竞争中取得优异的成绩。
2018年,是阿里云TSDB产品成长最快的一年;上文中提到的须要技术和能力目前只是应用在阿里巴巴集团内部的场景;将来,咱们会逐步把这些能力开发给外部用户,让外部客户也能享受到阿里巴巴强大的技术实力带来的价值。
最终,咱们的目标是把TSDB打形成业内领先的“智联网数据库”!