其他
为什么腾讯QQ的大数据平台选择了这款数据库?
导读:本文带你了解一个开源的、高性能的时序型数据库——InfluxDB。
能否做到实时。实时是种质变的能力,可将一个离线监控平台提升为一个实时决策系统。难点在于能否设计实现高性能的架构,以及能否实现水平扩展等。 分集群后,单个业务的流量大小、标签集多少是关键。流量大,相对容易解决,主要涉及系统性能和水平扩展等。标签集多,海量标签,海量时间序列线,如何做查询优化是挑战,如笔者遇到的一些业务上报的监控数据,有几十个维度的标签,并将QQ号和URL作为标签值,有非常海量的时间序列线。 针对监控数据多写少读、成本敏感的特点,如何设计高效的存储引擎?既能充分发挥硬件性能,又能在高效压缩存储的同时保障查询效率。
首先,我们认为云计算是基建,决定它能否成功的关键在于能否在基础技术上突破,打造出相比开源软件更有成本优势的云原生软件; 其次,虽然现在开源软件非常繁荣,基于开源软件,我们很容易搭建一个基础系统,将功能跑起来,但绝大部分开源软件侧重的是功能,而不是针对海量监控数据的场景进行设计,或多或少都有其局限性,且成本也非常高昂。
抵达的数据几乎总是作为新条目被记录,无更新操作。 数据通常按照时间顺序抵达。 时间是一个主坐标轴。
时序数据的写入:如何支持千万级/秒数据的写入。 时序数据的读取:如何支持千万级/秒数据的聚合和查询。 成本敏感:海量数据存储带来的是成本问题,如何更低成本地存储这些数据,是时序型数据库需要解决的关键问题。
InfluxDB部署简单、使用方便,在技术实现上充分利用了Go语言的特性,无须任何外部依赖即可独立部署; 提供类似于SQL的查询语言,接口友好,使用方便;拥有丰富的聚合运算和采样能力; 提供灵活的数据保留策略(Retention Policy)来设置数据的保留时间和副本数; 在保障数据可靠性的同时,及时删除过期数据,释放存储空间; 提供灵活的连续查询(Continuous Query)来实现对海量数据的采样。 支持多种通信协议,除了HTTP、UDP等原生协议,还兼容CollectD、Graphite、OpenTSDB、Prometheus等组件的通信协议。
专为时序存储和高性能读写而设计:计算机虚拟世界的各种系统和应用,以及物理世界的IoT设备等都在创建海量的时序数据,每秒千万级的数据吞吐量是很常见的,而且这些数据还需要可以以非阻塞方式接收并且可压缩以节省有限的存储资源。 专为实时操作而设计:预测能力和实时决策能力,需要收到数据后,就能实时输出最新的数据分析结果,执行预定义的操作。 专为高可用性而设计:现代软件系统需要全天候可用,除了基本的集群能力,还需要根据需求自动扩容和缩容,支持柔性可用等。
编写代码实现跨集群数据分片功能、聚合运算和采样功能、数据生命周期管理功能等。 实现丰富的API接口。 编写用于数据采集的工具。 实现实时处理模块并编写用于监控和警报的代码。 编写可视化引擎以向用户显示时序数据。
无系统环境依赖,部署方便。 无模式(schema-less)的数据模型,灵活强大。 原生HTTP管理接口,免插件配置和免第三方依赖。 强大的类SQL查询语句,学习成本低,上手快。 丰富的权限管理功能:精细到“表”级别。 丰富的时效管理功能:自动删除过期数据,自定义删除指标数据。 低成本存储,采样时序数据,压缩存储。 丰富的聚合函数,支持AVG、SUM、MAX、MIN等聚合函数。
代码清单1-3 一条CPU利率的时序数据
> insert cpu_usage,host=server01,location=cn-sz user=23.0,system=57.0
> select * from cpu_usage
name: cpu_usage
time host location system user
---- ---- -------- ------ ----
1557834774258860710 server01 cn-sz 55 25
>
时间(Time):如代码清单1-3中的“1557834774258860710”,表示数据生成时的时间戳,与MySQL不同的是,在InfluxDB中,时间几乎可以看作主键的代名词。 表(Measurement):如代码清单1-3中的“cpu_usage”,表示一组有关联的时序数据,类似于MySQL中表(Table)的概念。 标签(Tag):如代码清单1-3中的“host=server01”和“location=cn-sz”,用于创建索引,提升查询性能,一般存放的是标示数据点来源的属性信息,在代码清单1-3中,host和location分别是表中的两个标签键,对应的标签值分别为server01和cn-sz。 指标(Field):如代码清单1-3中的“user=23.0”和“system=57.0”,一般存放的是具体的时序数据,即随着时间戳的变化而变化的数据,与标签不同的是,未对指标数据创建索引,在代码清单1-3中,user和system分别是表中的两个指标键,对应的指标值分别为23.0和57.0。 时序数据记录(Point):如代码清单1-3中的“1557834774258860710 server01 cn-sz 55 25”,表示一条具体的时序数据记录,由时序(Series)和时间戳(Timestamp)唯一标识,类似于MySQL中的一行记录。 保留策略(Retention Policy):定义InfluxDB的数据保留时长和数据存储的副本数,通过设置合理的保存时间(Duration) 和副本数(Replication),在提升数据存储可用性的同时,避免数据爆炸。 时间序列线(Series):表示表名、保留策略、标签集都相同的一组数据。
本文摘编自《InfluxDB原理与实战》,经出版方授权发布。
延伸阅读《InfluxDB原理与实战》
点击上图了解及购买转载请联系微信:DoctorData
推荐语:InfluxDB技术专家基于DB-Engines排名TOP的时序数据库,打造千亿级大数据监控平台经验总结。包含9个企业级案例,100余示例,300余条命令和语法。
更多精彩👇