暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Gorilla数据压缩(1)

原创 手机用户2895 2024-08-28
249

Gorilla及论文简介

关于TSDB gorrilla: facebook团队结合实时分析时序数据的业务需求和现有的业务系统,将gorilla设计为数据系统ODS的write-throught cache部分(ODS是facebook用于分析监控和告警的数据系统, gorrilla作为in memory database部分)。论文提出了针对业务数据的压缩算法,达到10倍压缩比,因此得以把数据放在内存里,相比baseline,时延减少73x,吞吐提升10x。
文章发表时(2015),gorrila已部署在facebook的生产环境,用于工程师日常故障分析、实时告警和配合Hive/Scuba进行debug、detect and diagnose problems.
严格来说,论文提出了针对特定场景的timestamp和floating point的压缩算法,并不通用,这表明了对于清晰且稳定的业务,高效压缩算法的选择和设计仍是一个case study问题。

image.png

压缩算法介绍

业务数据分析

如何实现数据的高效压缩,达到解压速度和压缩比的一个平衡,是case study问题,通常需要人工的介入针对数据进行个案分析,Gorilla中的压缩也不例外。
论文首先分析gorilla面临的workload,其写入主要是来自各项监控数据输入,而读取则是告警、图表以及来自开发运维人员的debug查询,其特点包括:

  1. 写入为主, 且负载较高
  2. 监控报警,读近期写入数据
  3. 以aggergate聚合为主,对实时性有一定要求
  4. 可用性要求高

本文我们主要关注压缩算法的设计,为满足前3点,论文选择将gorilla设计为in memory database,将近期数据尽可能存储在内存中,因此需要设计实现高效的轻量压缩。论文分析了业务数据的特点,gorilla需要存储的数据成为data point其实较为简单,是一个3元组的形式,(string key, timestamp, floating point number), 包含以下特点:

  • string key,用于sharding
  • timestamp数据
    • 单调增加
    • 近似fixed interval
  • Floating point number
    • 包含较多整数型数据
    • 几乎为constant,变化小

Timestamp和Floating point number主要来源于监控采集生成,具有一定的连续性和局部性,因此gorilla设计的压缩方式主要基于delta encoding的改进。其中timestamp特征类似等差数列,因此选择存储delte of delta,因为理想情况下等差数列的delta of delta为0;而floating point number使用xor计算delta value,且当前的delta value会与上一个delta value进行比较,存储其中的有效的(不同的)部分。
下图是gorilla的一个压缩的block格式示例,我们将在后两节详细描述针对这两种类型数据的编码方式。
image.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论