一、背景
随着移动互联网、物联网、大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联网公司的监控数据等。实际上,这些按照时间顺序记录系统、设备状态变化的数据都是时序数据(Time Series),它普遍存在于互联网、物联网、IT基础设施中。
得益于软硬件技术的快速发展,处理如此庞大的时序数据集的成本在持续降低,更多公司开始持续收集、分析数据,用于异常处理、趋势预测、精准营销、风险控制等场景,希望利用数据的潜在价值,提高公司盈利能力和竞争力。这里举两个例子:
1.下图为某共享单车在旧金山某热门区域的车辆借还情况。通过分析该区域车辆的历史借还数据,单车公司可优化热点时间段的车辆补给。
2. 下图为某互联网服务的出入流量历史记录。从图中可以明显看到入流量(蓝色线)在某时间段有毛刺,服务提供商可基于此段时间排查服务有无异常。可以进一步基于流量监控做告警,使运维人员能够及时处理线上问题。
传统的时序数据解决方案及问题如下:
1. MySQL等关系型数据库:
2. Hadoop、Spark等批处理系统
3. HBase
前面介绍了时序数据的场景,也说明了分析时序数据的意义及传统方案。那么时序数据该怎样存储呢?数据的存储要考虑其数学模型和特点,时序数据当然也不例外。这里以一段时序数据为例,介绍下时序数据的数学模型。
下列数据记录了一段时间内某集群里各机器上各端口的出入流量,每半小时记录一个观测值:
时序数据库是管理时序数据的专业化数据库,并针对时序数据的特点对写入、存储、查询等流程进行了优化,从而解决时序数据处理难题:
o 利用维度重复、时间递增、指标平滑变化等特性,合理选择编码压缩算法,提高数据压缩比;
o 通过预降精度,对历史数据做聚合,节省存储空间。
o 数据批量写入,降低网络开销;
o 数据先写入内存,再周期性的dump为不可变的文件存储,提高写入速度。
o 优化常见的查询模式,通过索引等技术降低查询延时;
o 通过缓存、routing等技术提高查询并发。
目前行业内比较流行的开源时序数据库产品有 InfluxDB、OpenTSDB、Prometheus、Graphite等,其产品特性对比如下图所示:
从上表可以看出,开源的时序数据库存在如下问题:
腾讯CTSDB(Cloud Time Series Database)是一种分布式、高性能的时序数据库,针对时序数据的高并发写入、存在明显的冷热数据、IoT用户场景等做了大量优化,同时也支持各行业的日志解析和存储。在腾讯内部支撑腾讯云等每日万亿写入吞吐的场景,经过严苛的压力打磨。其架构如下图所示:
o 支持批量写入、高并发查询,以及强大的分析聚合能力;
o 通过横向扩展,线性提升系统性能;
o 支持sharding、routing,加速查询。
o 分布式系统,支持多副本;
o 机架感知,自动错开机架分配主从副本。
o 丰富的数据类型,REST接口,数据写入查询均使用json格式;
o 原生分布式,弹性可伸缩,数据自动均衡;
o 权限系统:支持用户名密码、机器白名单的权限系统。
o 支持列存储,高压缩比(0.1左右),降低存储成本;
o 支持数据预降精度:降低存储成本的同时,提高查询性能。
o 副本数可按需调整。
o 兼容Kibana/Logstash/Beat等组件,方便数据采集及可视化分析;
o 支持从MySQL、Kafka等开源生态同步数据,方便迁移。
这里选用业界较为流行的InfluxDB来与CTSDB做性能对比测试。
(1) CTSDB单节点集群与InfluxDB单机版写入性能对比
横坐标:并发数(写入线程数) ,纵坐标:QPS(单位:万次/s)
结论: CTSDB单节点写入性能最高在19w,InfluxDB在15w。
(2) CTSDB单节点集群与CTSDB双节点集群写入性能对比
横坐标:并发数(写入线程数) ,纵坐标:QPS(单位:万次/s)
结论:CTSDB单节点集群写入最高可达20w,双节点集群写入性能34w。
(1) CTSDB单节点集群与InfluxDB单机版查询性能对比
横坐标:并发数(查询线程数) ,纵坐标:QPS(单位:次/s)
结论:
(2) CTSDB单节点集群与双节点集群查询性能对比
横坐标:并发数(查询线程数) ,纵坐标:QPS(单位:次/s)
结论:在并发数较高的情况下,双节点集群查询性能较单节点集群有了大幅度提升,呈现了查询性能线性扩展的趋势。
作为腾讯唯一的时序数据库,CTSDB支撑了腾讯内部20多个核心业务(微信彩票、财付通、云监控、云数据库、云负载等)。其中,云监控系统记录了腾讯内部各种软硬件系统的实时状态,CTSDB承载了它所有的数据存储,在每秒千万级数据点的写入压力、每天20TB+数据量的写入场景下稳定运行,足以证明CTSDB可以稳定支撑物联网的海量数据场景。
CTSDB已经在腾讯云正式开始公测,为时序数据处理提供技术服务,我们将在降低存储成本、提升易用性和丰富功能性等方面进一步优化CTSDB!
欢迎对时序数据库和分布式存储感兴趣的同学加入我们!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。