0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

可观测平台如何存储时序曲线?滴滴实践全历程分享

Linux阅码场 来源:Linux阅码场 2023-10-13 16:04 次阅读

滴滴的时序曲线量从 2017 年 到 2023 年增长了几十倍。整个过程中我们不断地调整和改进以应对这样的增长。例如时序数据库的选型从最初的 InfluxDB,到 RRDtool,又开发了内存 TSDB 分担查询压力,再到 2020 年开始使用 VictoriaMetrics。载体也从全公司最高配的物理机型到现在的全容器部署。其中经历了很多的思考和取舍,下文将按时间顺序,为大家讲述这一系列的故事。

2017年 InfluxDB 时代

时序数据库的一哥 InfluxDB,是我们最初选择的时序数据库。但随着时序曲线的规模变大,InfluxDB 的局限性也开始暴露了出来。同时社区中关于 InfluxDB OOM 的讨论也日益增多,其根本原因就在于热点写入和查询,想象一个命中几百万曲线的查询落在了一个 InfluxDB 实例上,OOM 几乎是必然的。大家也可以在 InfluxDB 社区中搜索 OOM,有 400 多个结果“InfluxDB OOM”。

由于这些问题日益突出,我们不得不重新思考时序数据库的选型。下图为当时的可观测系统在 Influxdb 挂掉后,看图功能的表现:

9462bef8-699d-11ee-939d-92fbcf53809c.png

InfluxDBOOM,看图功能的表现

2017~2018 Open-Falcon 时代

InfluxDB 单机性能有限,集群方案又不开放。尽管我们对 InfluxDB 按照业务线做了拆分,但仍面临着单个服务节点曲线量巨大的情况,对于 InfluxDB 来说难以处理。

在经过深入探索和多次试验后,我们决定采用 Open-Falcon 使用的 RRDtool 存储方案,在存储和查询链路,使用相同的一致性哈希算法,将曲线打散到不同的实例中,从而解决了在 InfluxDB 时代因为热点过高而导致 OOM 的难题。

2018~2020 后 Open-Falcon 时代

直至 2018 年 4月,RRDtool 方案都一直在滴滴运行着。但随着曲线量的迅速增长,我们又面临新的问题——成本问题。成本几乎是每家互联网公司在发展到一定阶段都难以回避的问题。特别是作为非赢利产品的可观测平台,成本问题尤为突出。甚至自 2017 年之后的三年里,尽管我们的存储集群内存使用率曾高达 90% 以上,仍无法获取新机器的支援。其中一个原因是,我们需要的机器配置过高,甚至连当时配备的 NVMe 磁盘这种顶配机型的 IO 使用率也超过了 90%。预算委员会完全不相信会有一种服务同时对CPU、内存和 IO 都有如此高的需求。

面对这种困境,我们陷入了两难境地。一方面是用户源源不断的压力,另一方面是无法满足存储所需求机型的要求。

在经过一段时间的思考与调研,我们发现 80% 以上的查询请求都集中在最新的 2 个小时内。因此,我们尝试将存储进行冷热分层,建设一个新服务来分担存储的压力,正好在这个时候,我们了解到了 Facebook Gorilla 的论文,于是一个名为 Cacheserver 服务应运而生。

Cacheserver 的设计灵感来源于 Facebook Gorilla 论文,旨在与原有存储服务共同承担请求,只针对最新 2 小时数据的查询请求,大大减轻了 RRDtool 服务集群的压力。这种冷热分层的架构不仅缓解了存储成本问题,还提升了整体性能和查询效率。

9467ca92-699d-11ee-939d-92fbcf53809c.png

Cacheserver 架构

2020 ~ 今 VictoriaMetrics 时代

随着滴滴容器时代的到来,我们面临着更加艰巨的情况。

首先,随着容器覆盖率的不断提高,时序曲线量疯狂增长。而 2020 年随着容器覆盖率继续提升,曲线增长预计会超过 100%。

此外,成本压力继续增大。尽管 RRDtool 架构可以横向扩展,但可观测自身的成本无法再随业务增长而线性增长。

当前 RRDtool 架构高需低产,必须使用 SSD/NVMe 机型,使用普通磁盘在落盘时会直接 hang 死。而且功能上也仅支持 sum、avg、max、min 等有限的几个函数,无法满足用户日趋丰富的需求。

为节省存储空间,当时仅保留 2 小时原始数据。而用户需要更长时间(例如 15天)的原始数据进行查看和分析,然而,更改降采策略会带来 2 个问题:一是 RRDtool 的降采修改会导致所有数据丢失。二是存储 15 天的原始点会使每条曲线存储空间变为原来的 8.5 倍(120KB → 1MB)。

因此从 2020 年初开始,我们开始着手调研新的方案。需要更高效、灵活的存储架构以应对以上种种问题。

有哪些备选方案?

在选择新的存储方案时,我们考虑了多个备选方案,包括:

Druid

Prometheus

Thanos/Cortex

M3

VictoriaMetrics

Druid?

Druid 是滴滴另一套系统 Woater 的时序存储方案,由大数据团队运维。然而,我们最终不考虑 Druid,主要原因如下:

模型不满足:Woater 的存储模型是预先定义好的 Schema(Dimensions),而我们需要的是动态 Schema,这是 Druid 原生不支持的,虽然大数据团队表示可以开发支持,但有着诸多条件限制。

成本问题:将现有数据存储到 Druid 成本将增长 10 倍。

性能问题:Druid 写入性能还不如 RRDtool,写入能力较差,因为 Druid 要做 Rollup,而 RRDtool 是直接 Append 数据。

“无用”的 Rollup:Druid 的亮点功能 Rollup,对于我们的场景并不适用,因为绝大部分查询都是针对原始值而非 Rollup 结果。

Prometheus?

Prometheus 是可观测领域的事实标准,其存储模型、DSL 以及生态都吸引着众多用户和企业的关注。但在滴滴的场景下,我们也没有选择 Prometheus,主要原因在于:

没有长期存储:Prometheus 主要专注于对短期数据的存储和查询,而我们需要长期保留。

没有集群方案:Prometheus 无内置的集群方案,要实现横向扩展,需要依赖第三方架构如 Thanos、Cortex 等,这无疑增加了复杂性。

没有高可用能力。

尽管针对这些问题,社区提供了一些解决方案,但在滴滴的体量下,这些解决方案都无法满足我们的生产化需求。

Thanos、Cortex?

Thanos 和 Cortex 可以说是 Prometheus 当时唯二的,集群化和长期存储方案。它们的设计目标都是要解决如下问题:

Global View:可以跨多个 Prometheus 实例进行查询以实现全局视图。

LongTerm Storage:实现长期存储以满足长期分析和回溯的需求。

High Availability。

这些特性使得 Thanos 和 Cortex 成为 Prometheus 生态中重要的补充。

946f5d16-699d-11ee-939d-92fbcf53809c.png

Thanos 架构

947afe64-699d-11ee-939d-92fbcf53809c.png

Cortex 架构

但 Thanos/Cortex 也存在一些问题:

Cortex 的存储结构,其内部仍在探索当中,还不够稳定,Blocks 在当时还处于 Experimental 状态。

Thanos 和 Cortex 均需要引入对象存储,可能带来一些额外的管理成本,性能上也要画一个问号。

Thanos Remote Read内存开销太多,例如当时有人提出如下图所示的问题:

9496bf14-699d-11ee-939d-92fbcf53809c.png

Thanos 内存问题

缺乏大规模生产环境的洗礼:Thanos 和 Cortex,这两个看似美好的解决方案,都有他们的硬伤。也缺乏大规模生产环境的实际验证,可靠性和稳定性可能还需更多的验证和优化。

Uber M3?

M3 是 Uber 开源的 TSDB 解决方案,尽管有一些优势,但也存在一些缺点,包括管理成本高(例如引入 etcd)和机器成本没有优势(仍需要高配 SSD)。

94a7fcf2-699d-11ee-939d-92fbcf53809c.png

M3 架构

VictoriaMetrics?

94b0e574-699d-11ee-939d-92fbcf53809c.png

Victoriametrics 架构

VictoriaMetrics 是一个性能高、资源要求和运维成本都比较时序数据库,其主要特色和原理包括:

要求资源低:VictoriaMetrics 可以在普通机型上运行,不需要使用 SSD/NVMe 等高性能硬件

核心存储模型:基于 LSM,类似 Clickhouse。它将数据缓冲在内存中,并每秒钟将其刷写到磁盘上的分区目录中。较小的分区会在后台逐渐合并成更大的分区。

列式存储:VictoriaMetrics 采用列式存储,使得读写性能非常高,1个CPU核心可以扫描 30M points/s。

写入速度强:单实例 760K point/s 的写能力(vs RRDtool 210~260K point/s)。

压缩:采用改进版 Gorilla 结合通用压缩算法(Facebook zstd),平均仅需 1.2~1.5 bytes/point,压缩比达 13%。

集群容易扩展:采用 Share Nothing 设计。扩缩容机器方便。机器损坏时还可以自动 Rerouting。

无降采样:不降采的设计,使得原始数据得以保留。

兼容 Prometheus:在写入、写入方式等都兼容 Prometheues。并针对 PromQL 做了增强(MetricsQL)

乱序时间戳的弱支持。

容量可计算:VictoriaMetrics 的容量是可计算的,我们可以更直观和方便的预估存储需求。

94bdc2e4-699d-11ee-939d-92fbcf53809c.png

VictoriaMetrics Capacity Planning

如上所述,因为 VictoriaMetrics 在性能、压缩率、查询速度和扩展性等方面表现出色。在综合考虑了各个方面的需求和考虑后,我们认为 VictoriaMetrics 是适合我们的时序数据存储方案,能够满足我们的需求。

VictoriaMetrics 的问题及解决方案

尽管 VictoriaMetrics 作为时序数据库解决方案有许多优势,但也存在一些潜在问题,这里列举几点并简要地给出了我们的解决方案:

资源占用问题:磁盘空间占用量与存储点数成正比,存储越多越长的数据,磁盘空间需求越多。为解决这个问题,我们针对不同的业务线,设置了不同的保留时长。

无降采样:VictoriaMetrics 不支持数据降采样,即不会自动对数据进行聚合或丢弃,而是保留原始数据。这在某些场景下可能会导致数据存储需求较高,特别是在存储长期数据时。不过,由于 VictoriaMetrics 查询速度快且压缩率较高,这个问题并没有对成本和系统性能造成显著影响。

活跃度有限、不够主流:相对于其他一些主流的时序存储方案,当时 VictoriaMetrics 的活跃度可能还不够高。然而,通过对代码的深入了解和与作者的多次交流,我们对VictoriaMetrics 的质量和性能表现逐渐建立信心。

多集群 VictoriaMetrics 设计

我们基于 VictoriaMetrics 设计并实现了一个多集群方案,旨在提高系统的可扩展性和可用性。例如下图我们在 region 1 搭建了多套集群,分别处理不同业务线的数据,隔离了各业务线的资源竞争和影响,也缩小了故障域。多个 region 之间也可以选择 mixer 来实现跨区域的数据读取和合并。

94d0376c-699d-11ee-939d-92fbcf53809c.png

VictoriaMetrics 多集群设计

结尾

以上介绍了滴滴可观测的时序存储解决方案的发展历程。希望通过这个分享,能够为其他团队和开发者提供一些有益的经验和启示,也欢迎一起交流和探讨。

限于文章篇幅,无法在这里展开更多。例如 VictoriaMetrics 的容器化部署,故障管理,复制,数据迁移等。这些内容将在后续的文章中为大家介绍,敬请期待!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3690

    浏览量

    63951
  • 架构
    +关注

    关注

    1

    文章

    499

    浏览量

    25366

原文标题:可观测平台如何存储时序曲线?滴滴实践全历程分享

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MPLAB PM3滴滴滴滴滴滴后死机了 无法连接电脑

    MPLAB PM3 滴滴滴滴滴滴后死机了 无法连接电脑 有没有遇到同样问题的朋友
    发表于06-12 09:32

    关于 eBPF 安全可观测性,你需要知道的那些事儿

    安全方面的一些思考和心得,本次分享将从监控和 可观测性、eBPF 安全 可观测性分析、内核安全 可观测性展望三个方面展开。一、eBPF 安全 可观测性的前景展望从下图可以看到,监控只是
    发表于09-08 15:31

    基于拓扑分割的网络可观测性分析方法

    针对电力网络 可观测性分析问题,对量测网络建模、网络拓扑 可观测性分析理论、不 可观测节点的影响范围等方面进行了研究,提出了一种基于拓扑分割的网络 可观测性分析方法,在某42节点系统上对该方法
    发表于03-06 18:03 0次下载
    基于拓扑分割的网络<b class='flag-5'>可观测</b>性分析方法

    如何将可观测性策略与APM工具结合起来

    获悉IBM Instana被Gartner评选为2022年度应用性能监控(APM)和 可观测性(Observbility)魔力象限的领导者,我与我身边同事们都与有荣焉。不仅Instana实现了其领先级企业 可观测平台的愿景,对我们
    的头像 发表于07-27 11:19 1087次阅读

    介绍eBPF针对可观测场景的应用

    随着eBPF推出,由于具有高性能、高扩展、安全性等优势,目前已经在网络、安全、 可观察等领域广泛应用,同时也诞生了许多优秀的开源项目,如Cilium、Pixie等,而iLogtail 作为阿里内外千万实例 可观测数据的采集器,eBPF 网络
    的头像 发表于08-11 09:10 1410次阅读

    eBPF安全可观测性的前景展望

    本次分享将从监控和 可观测性、eBPF安全 可观测性分析、内核安全 可观测性展望三个方面展开。
    的头像 发表于08-17 11:27 1417次阅读

    六大顶级、开源的数据可观测性工具

    企业有很多商业数据 可观测性工具可供选择。商业工具在可伸缩性、自动化和支持方面具有一些关键优势。然而,数据 可观测性的开源工具允许团队在没有前期购买(获得使用许可)成本的情况下试验数据 可观察性功能
    的头像 发表于12-16 11:29 1808次阅读

    云南天文台:基于分布式存储,为天文观测构建新数据底座

    随着天文 观测需求不断提升,天文 观测所产生的 观测数据量也越来越大,这对数据 存储和处理提出了更高的要求。为此,丽江 观测站采用浪潮分布式
    的头像 发表于02-22 13:48 745次阅读

    基调听云携手道客打造云原生智能可观测平台联合解决方案

    ,带来了问题的答案。 近日,上海道客网络科技有限公司(简称:「DaoCloud 道客」)携手北京基调网络股份有限公司(简称:基调听云)推出云原生智能 可观测平台联合解决方案。双方基于 DaoCloud Enterprise 云操作系统与基调听云智能可
    的头像 发表于03-23 11:02 562次阅读

    华为云应用运维管理平台获评中国信通院可观测性评估先进级

    近日,华为云应用运维管理 平台参与了中国信息通信研究院(以下简称“中国信通院”)主办的“稳保行动”的 可观测平台能力评估。经过中国信通院的检验,华为云应用运维管理 平台满足云上软件系统稳定
    的头像 发表于07-01 21:16 422次阅读
    华为云应用运维管理<b class='flag-5'>平台</b>获评中国信通院<b class='flag-5'>可观测</b>性评估先进级

    喜讯!基调听云可观测平台获评中国信通院根因分析评估先进级

    2023年上半年度的可信云评估结果。 值得一提的是,在这次大会上,基调听云 可观测平台凭借其稳定性和卓越的根因分析能力受到了广泛关注。基调听云 可观测平台在中国信通院举办的“稳保行动”
    的头像 发表于07-26 13:10 642次阅读

    从技术到商业价值:基调听云智能可观测平台能力升级,持续满足不断变化的市场需求

    近日,基调听云荣获2023数字化创新突破技术奖项,这是对我们在智能 可观测性领域持续创新和技术提升的认可。自基调听云智能 可观测平台发布上线以来,我们一直致力于为广大用户提供更加智能、稳定、高效的运维
    的头像 发表于08-21 16:56 370次阅读

    使用APM无法实现真正可观测性的原因

    控制理论中的 可观测性是指:系统可以由其外部输出确定其内部状态的程度。在复杂 IT 系统中,具备 可观测性是为了让系统能达到某个预定的稳定性、错误率目标。随着微服务数量的急速膨胀和云原生基础设施的快速演进,建设 可观测性已经成为了保障
    的头像 发表于09-18 10:23 712次阅读
    使用APM无法实现真正<b class='flag-5'>可观测</b>性的原因

    什么是多云? 为什么我们需要多云可观测性 (Observability)?

    什么是多云? 为什么我们需要多云 可观测性 (Observability)?
    的头像 发表于10-12 17:12 504次阅读
    什么是多云? 为什么我们需要多云<b class='flag-5'>可观测</b>性 (Observability)?

    如何构建APISIX基于DeepFlow的统一可观测性能力呢?

    随着应用组件的 可观测性逐渐受到重视,Apache APISIX 引入插件机制丰富了 可观测数据源。
    的头像 发表于01-18 10:11 688次阅读
    如何构建APISIX基于DeepFlow的统一<b class='flag-5'>可观测</b>性能力呢?