关于时序数据库:华为云自研PB级分布式时序数据库揭秘第一期初识GaussDBfor-Influx

63次阅读

共计 4089 个字符,预计需要花费 11 分钟才能阅读完成。

摘要:GaussDB(for Influx)提供了独特的数据存储管理解决方案,云原生的存储与计算架构,可依据业务变动疾速扩容缩容;高效的数据压缩能力和数据冷热拆散设计,可大幅升高数据存储老本;高吞吐的集群,可满足大规模运维监控和物联网场景海量数据写入和查问性能要求。

本文分享自华为云社区《华为自研 PB 级分布式时序数据库揭秘第一期:初识 GaussDB(for Influx)》,原文作者:栖迟於一丘。

前言

随着云计算规模越来越大,以及物联网利用逐步遍及,在物联网(AIoT)以及运维监控(AIOps)畛域,存在海量的时序数据须要存储管理。以华为云监控服务(Cloud Eye Service,CES)为例,单个 Region 须要监控 7000 多万监控指标,每秒须要解决 90 万个上报的监控指标项,假如每个指标 50 个字节,一年的数据将达到 PB 级。另以地震监测零碎为例,数万监测站点 24 小时不间断采集数据,均匀每天要解决的指标数据达到 TB 级,一年的数据同样达到 PB 级,并且数据须要永恒存储。传统的关系型数据库很难撑持这么大的数据量和写入压力,Hadoop 等大数据解决方案以及现有的开源时序数据库也面临十分大的挑战。对时序数据实时交互、存储和剖析的需要,将推动时序数据库在架构、性能和数据压缩等方面一直进行翻新和优化。

GaussDB(for Influx)时序数据库依附华为在数据存储畛域多年的实践经验,整合华为云的计算、存储、服务保障和平安等方面的能力,大胆在架构、性能和数据压缩等方面进行了技术创新,达到了较好的成果,对内撑持了华为云基础设施服务,对外以服务的模式凋谢,帮忙上云企业解决相干业务问题。

云原生存储与计算拆散架构

GaussDB(for Influx)接口齐全兼容 InfluxDB,写入接口兼容 OpenTSDB、Prometheus 和 Graphite。从架构上看,一个时序数据库集群能够分为三大组件。它们别离是:

Shard 节点:节点采纳无状态设计,次要负责数据的写入和查问。在节点内,除了分片和工夫线治理之外,还反对数据预聚合、数据降采样和 TAG 分组查问等专为时序场景而优化的性能。

Config 集群:存储和治理集群元数据,采纳三节点的复制集模式,保障元数据的高可靠性。

分布式存储系统:集中存储长久化的数据和日志,数据采纳三正本形式寄存,对下层利用通明。存储系统为华为自研,通过多年产品实际测验,零碎的高可用和高可靠性都失去了验证。

相比 InfluxDB 等开源时序数据库,采纳存储与计算拆散的云原生数据库设计具备以下劣势:

容忍 N - 1 节点故障,更高可用。存储与计算拆散,能够复用成熟的分布式存储系统,提供零碎的极致可靠性。时序数据通常会继续高性能写入,同时还有大量的查问业务,任何系统故障导致业务中断甚至数据失落都会造成重大的业务影响,而利用通过验证的成熟的分布式存储系统,可能显著的晋升系统可靠性,升高数据失落危险。

分钟级计算节点扩容,秒级存储扩容。解除在传统 Shared Nothing 架构下,数据和节点物理绑定的束缚,数据只是逻辑上归宿于某个节点,使的计算节点无状态化。这样在扩容计算节点时,能够防止在计算节点间迁徙大量数据,只须要逻辑上将局部数据从一个节点移交给另一个节点即可,能够将集群扩容的耗时从以天为单位缩短为分钟级别。

打消多正本冗余,升高存储老本。通过将多正本复制从计算节点卸载到分布式存储节点,能够防止用户以 Cloud Hosting 状态在云上自建数据库时,分布式数据库和分布式存储别离做 3 正本复制导致总共 9 正本的冗余问题,可能显著升高存储老本。

GaussDB(for Influx)采纳云原生存储与计算拆散架构,具备反对亿级工夫线、极致写入性能、低存储老本、高性能多维聚合查问和极致弹性扩缩容等 5 大个性。

反对亿级工夫线

在时序数据库系统中,存在大量并发查问和写入操作,正当管制内存的使用量显得非常重要。开源时序数据库 VictoriaMetrics 和 InfluxDB 在写入数据的工夫线减少到千万级别时,过程会因内存耗尽而 OOM 退出。为了防止写入海量工夫线数据导致内存资源被耗尽,GaussDB(for Influx)做了如下优化:

  • 在内存调配上,大量应用内存池复用技术,缩小长期对象内存申请,升高内存碎片;
  • 在内存回收上,实现算法依据内存负载,动静调整 GC 频率,放慢内存空间回收;
  • 在单查问上,履行 Quota 管制,防止单查问耗尽内存;
  • 在缓存应用上,针对不同节点规格提供不同的最优配置。

通过改良,在海量工夫线下,零碎写入性能保持稳定,大幅超出 InfluxDB 开源实现。对于波及海量工夫线的聚合查问,如高散列聚合查问,查问性能晋升更为显著。

极致写入性能:反对每天万亿条数据写入

相比单机模式,集群模式能够将写入负载扩散到集群中各个计算节点上,从而反对更大规模的数据写入。GaussDB(for Influx)反对每天万亿条数据写入,在工程实现上进行了以下优化:

首先,时序数据依照工夫线做 Hash Partition,利用所有节点并行写入,充分发挥集群劣势。

其次,Shard 节点采纳针对写场景优化的 LSM-Tree 布局,写 WAL 后确保日志长久化,再写入内存 Buffer 即可返回。

最初,数据库多正本复制卸载到分布式存储,升高计算节点到存储节点的网络流量。

在大规模写入场景下,GaussDB(for influx)的写入性能线性扩大度大于 80%。

低存储老本:只需 1 /20 的存储老本

在时序数据库面对的 AIOps 运维监控和 AIoT 物联网两个典型利用场景中,每天会产生数 GB 甚至数 TB 的时序数据。如果无奈对这些时序数据进行很好的治理和压缩,那将会给企业带来十分高的老本压力。

GaussDB(for Influx)对数据采纳列式存储,雷同类型的数据被集中存储,更有利于数据压缩。采纳自研的时序数据自适应压缩算法,在压缩前对数据进行抽样剖析,依据数据量、数据分布以及数据类型抉择最合适的数据压缩算法。在压缩算法上,相比原生的 InfluxDB,重点针对 Float、String、Timestamp 这三种数据类型进行了优化和改良。

Float 数据类型: 对 Gorilla 压缩算法进行了优化,将能够无损转换的数值转为整数,再依据数据特点,抉择最合适的数据压缩算法。

String 数据类型:采纳了压缩效率更好的 ZSTD 压缩算法,并依据待压缩数据的 Length 应用不同 Level 的编码方法。

Timestamp 数据类型:采纳差量压缩办法,最初还针对数据文件内的 Timestamp 进行相似性压缩,进一步升高时序数据存储老本。

下图是别离采纳理论业务场景的事件日志数据(数据集 1)和云服务器监控指标数据 (数据集 2)与 InfluxDB 进行了数据压缩效率的性能比照。

节约存储老本并非只有数据压缩一种方法。针对时序数据越旧的数据被拜访的概率越低的特点,GaussDB(for Influx)提供了时序数据的分级存储,反对用户自定义冷热数据,实现数据的冷热拆散。热数据绝对数据量小,拜访频繁,被存储在性能更好、老本较高的存储介质上;冷数据绝对数据量大,拜访概率低,保留工夫较久,被存储在老本较低的存储介质上,进而达到节约存储老本的目标。依据理论业务数据测算,雷同数据量下存储老本仅有关系型数据库的 1 /20。

高性能多维聚合查问

多维聚合是时序数据库中较为常见,且会定期反复执行的一种查问,例如 AIOps 运维监控场景中查问 CPU、内存在指定工夫范畴内的平均值。

SELECT mean(usage_cpu), mean(usage_mem)
FROM cpu_info 
WHERE time >= '2020-11-01T06:05:27Z' and time < '2020-11-01T18:05:27Z' 
GROUP BY time(1h), hostname

在晋升聚合查问整体性能方面,GaussDB(for Influx) 做了如下优化:

  • 采纳 MPP 架构:一条查问语句能够在多节点及多核并发执行。
  • 向量化查问引擎:在查问后果数据量很大时,传统的火山模型每次迭代返回一条数据,存在过多的开销导致性能瓶颈。GaussDB(for Influx)外部实现了向量化查问引擎,每次迭代批量返回数据,大大减少了额定开销。
  • 增量聚合引擎:基于滑动窗口的聚合查问,大部分从聚合后果缓存中间接命中,仅须要聚合增量数据局部即可。
  • 多维倒排索引:反对多维多条件组合查问,防止大量 Scan 数据。
  • 存储摘要索引,放慢数据查问中过滤无关数据。

雷同节点规格,GaussDB(for Influx)的聚合查问性能是 InfluxDB Enterprise 的 10 倍,是 Timescale 的 2 到 5 倍。

分钟级弹性扩缩容

在时序数据库的运行过程中,随着业务量的减少,经常须要对数据库进行在线扩容,以满足业务的要求。传统数据库中的数据存储在本地,扩容后往往须要迁徙数据。当数据量达到肯定规模时,数据迁徙所消耗的工夫往往按天计算,给运维带来了很大的艰难。

如上图所示,每个 Database 逻辑上由多个 Partition 组成,每个 Partition 独立存储,且都可自描述。所有 Partition 数据都存储在分布式共享存储上,数据库 Shard 节点和数据没有物理绑定关系。扩容时首先 offload 源节点 Partition,再在指标节点 assign 即可。

总结

时序数据应该存储在专门为时序数据进行优化的时序数据库系统中。华为云某业务从 Cassandra 切换到 GaussDB(for Influx)后,计算节点从总共 39 个(热集群 18 个,冷集群 9 个,大数据分析集群 12 个)升高到了 9 个节点,缩减 4 倍计算节点。存储空间耗费从每天 1TB 升高到100G B 以内,缩减 10 倍存储空间耗费。

GaussDB(for Influx)提供了独特的数据存储管理解决方案,云原生的存储与计算架构,可依据业务变动疾速扩容缩容;高效的数据压缩能力和数据冷热拆散设计,可大幅升高数据存储老本;高吞吐的集群,可满足大规模运维监控和物联网场景海量数据写入和查问性能要求。

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0