为什么腾讯QQ的大数据平台选择了InfluxDB数据库?( 二 )


有些团队在对InfluxDB进行了多年的学习和研究后 , 最终考虑到基于时序分片的复杂度而放弃了基于InfluxDB开发集群能力 , 转而选择基于RocksDB、Zookeeper等开源软件进行自建 。
笔者在3个月内快速开发出了CP和AP架构分离、时序分片、水平扩展等基本集群能力 , 另外 , 根据业务的特点 , 在索引引擎、冷热分离、查询实现、第三方协议、高可用性、可运营性等方面也做了大量的工作 。
最终的效果也是符合预期的 , 如从替换现有监控系统后台的实施对比来看 , 我们用了不到10%的机器成本就支撑起原监控后台所支撑的海量监控数据 , 成本优势突出 。
InfluxDB是一款非常优秀的软件 , 直接推动监控技术进入了实时、纳秒级的新时代 , 除了类SQL查询语言、RESTful API等现代特性外 , 还具有读写性能高、存储压缩率高、生态丰富、功能强大等特性 。
为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
本文插图
01 什么是InfluxDB
InfluxDB是一个开源的、高性能的时序型数据库 , 在时序型数据库DB-Engines Ranking上排名第一 。
在介绍InfluxDB之前 , 先来介绍下时序数据 。 按照时间顺序记录系统、设备状态变化的数据被称为时序数据(Time Series Data) , 如CPU利用率、某一时间的环境温度等 。
时序数据以时间作为主要的查询纬度 , 通常会将连续的多个时序数据绘制成线 , 制作基于时间的多纬度报表 , 用于揭示数据背后的趋势、规律、异常 , 进行实时在线预测和预警 , 时序数据普遍存在于IT基础设施、运维监控系统和物联网中 。
时序数据主要有如下3个特点:

  • 抵达的数据几乎总是作为新条目被记录 , 无更新操作 。
  • 数据通常按照时间顺序抵达 。
  • 时间是一个主坐标轴 。
时序型数据库是存放时序数据的专用型数据库 , 并且支持时序数据的快速写入、持久化、多纬度的实时聚合运算等功能 。
传统数据库通常记录数据的当前值 , 时序型数据库则记录所有的历史数据 , 在处理当前时序数据时又要不断接收新的时序数据 , 同时时序数据的查询也总是以时间为基础查询条件 , 并专注于解决以下海量数据场景的问题:
  • 时序数据的写入:如何支持千万级/秒数据的写入 。
  • 时序数据的读取:如何支持千万级/秒数据的聚合和查询 。
  • 成本敏感:海量数据存储带来的是成本问题 , 如何更低成本地存储这些数据 , 是时序型数据库需要解决的关键问题 。
InfluxDB是一个由InfluxData公司开发的开源时序型数据库 , 专注于海量时序数据的高性能读、高性能写、高效存储与实时分析 , 在DB-Engines Ranking时序型数据库排行榜上位列榜首 , 广泛应用于DevOps监控、IoT监控、实时分析等场景 。
具体的DB-Engines Ranking时序型数据库的排行榜(源自2019年5月的DB-Engines Ranking数据)如图1-1所示 。
  • InfluxDB部署简单、使用方便 , 在技术实现上充分利用了Go语言的特性 , 无须任何外部依赖即可独立部署;
  • 提供类似于SQL的查询语言 , 接口友好 , 使用方便;拥有丰富的聚合运算和采样能力;
  • 提供灵活的数据保留策略(Retention Policy)来设置数据的保留时间和副本数;
  • 在保障数据可靠性的同时 , 及时删除过期数据 , 释放存储空间;
  • 提供灵活的连续查询(Continuous Query)来实现对海量数据的采样 。
  • 支持多种通信协议 , 除了HTTP、UDP等原生协议 , 还兼容CollectD、Graphite、OpenTSDB、Prometheus等组件的通信协议 。

为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
本文插图
▲图1-1 时序型数据库DB-Engines Ranking排名