作者 | Mohit Palriwal
译者 | 明知山
策划 | Tina
Pinterest 对其 Goku 时序数据库进行了现代化改造和增强。最新的更新着重优化存储效率和资源使用,同时确保不牺牲服务质量。
Pinterest 开发的 Goku 是一个内部数据库引擎,旨在解决 OpenTSDB 中的特定限制。你可以通过这篇文章详细了解 Pinterest 开发 Goku 的动机。
在最近的一篇博文中,Goku 团队向客户端可观测性团队介绍了两项新特性:指标命名空间和顶级写入密集型指标,帮助他们减少存储在 Goku 中的数据量。这些创新特性显著减少了数据存储需求。指标命名空间可用于组织指标配置,实现了高效的数据管理。同时,识别并优化顶级指标的系统帮助可观测性团队阻止了不必要的数据写入,将存储的时间序列数据量减少了 37%。
图 1:ns1、ns2 和 ns3 三个命名空间的示例配置。
命名空间配置(图 1)保存在一个动态共享配置文件中,Goku 生态系统内的所有主机会监视这个文件(图 2) 。一旦这个文件内容发生变化,运行在各主机上的 Goku 进程会立即收到通知,并解析更新后的内容,识别出变化。
图 2:带有命名空间的 Goku 架构
一系列架构优化进一步降低了基础设施成本。通过改进指标名称的索引,每个主机的内存使用量从 12GB 降低到了 3GB。此外,Goku Compactor 中引入的字典编码技术有效解决了内存不足的问题,可以使用成本更低的硬件。
图 3:存储某个指标的主机的内存消耗。
图 4:在使用字典编码后,每个主机进行层压缩的内存使用量下降。
Pinterest 还优化了内存分配策略。通过解决内部碎片化和内存过度分配问题,显著节省了内存的使用。例如,对 folly::IOBuf 结构的优化使得每台主机的内存使用量减少了 8 到 11GB。
时序压缩算法对于高效存储和处理大量带时间戳的数据至关重要。这些算法通过识别数据中的模式和冗余来减少数据大小,从而允许更快的查询处理并降低存储成本。通过采用一些技术,如增量编码、增量增量编码和基于 XOR 的压缩等,实现了显著的存储效率提升。例如,TimescaleDB,一个开源时序数据库,通过使用这些算法实现了超过 90% 的存储效率提升,节省了大量的成本,并改进了查询性能。
Meta 在其 Gorilla 时序数据库中也采用了诸如增量增量时间戳和 XOR 编码浮点值等压缩技术,成功将存储减少至原来的十分之一,并显著提高了查询效率。更多细节可以在他们的研究论文中找到。
Pinterest 所做的努力是整个科技行业优化时序数据管理系统趋势的一部分。类似的还有 Apple FiloDB、Netflix Atlas、Uber M3、Meta Gorilla 和 Salesforce Argus。这些项目,像 Goku 一样,专注于高效的时序数据管理,有些已在 GitHub 等平台上作为开源。它们代表了向更高伸缩性和成本效益的数据基础设施的集体转变。
这些增强使得 Pinterest 将时间序列存储量减少了 40% ,并将成本下降了 70%。此外,这些改进还使得 Pinterest 能够在不增加容量的情况下适应 30% 的有机存储增长。关于可观测性和效率的相关讨论可以在这篇 Reddit 帖子中找到,行业专业人士在其中分享了他们的见解和基准。例如,Reddit 用户 serverlessmom 表示:
在许多企业中,可观测性成本仅次于实际的基础设施 / 托管成本,排在第二位。企业为了深入了解其软件的运行情况,支付了相当高的费用。
查看英文原文:
https://www.infoq.com/news/2024/11/time-series-db-pinterest/
会议推荐
就在 12 月 13 日 -14 日,AICon 将汇聚 70+ 位 AI 及技术领域的专家,深入探讨大模型与推理、AI Agent、多模态、具身智能等前沿话题。此外,还有丰富的圆桌论坛、以及展区活动,满足你对大模型实践的好奇与想象。现在正值 8 折倒计时,名额有限,快扫码咨询了解详情,别错过这次绝佳的学习与交流机会!