【锁定直播】字节、华为云、阿里云等技术专家讨论如何将大模型接入 AIOps 解决实际问题,戳>>> 了解详情
写点什么

Spotify 的监测框架(上)

  • 2015-12-17
  • 本文字数:2726 字

    阅读完需:约 9 分钟

【编者的话】 Spotify 是全球最大的正版流媒体音乐服务平台。Spotify 提供的服务需要一个巨大的基础设施平台作为支撑,而监测这个平台的运行显得至关重要。Spotify 实验室的 John-John Tedro 近日对 Spotify 的监测进行了一个简单的介绍。作为该系列文章两个部分的第一篇,本文主要介绍了Spotify 的监控的历史,当前面临的挑战,以及Spotify 又是如何解决这些挑战的。

Spotify 的运行监测一开始是作为两个系统的组合,即 Zabbix 和 sitemon,其中 sitemon 是一个支持RRD 的土生土长的图形系统,它采用 Munin 用来进行数据收集。 Zabbix 的所有权属于我们的 SRE 团队,而 sitemon 由我们的后端基础架构团队负责运行。当时,我们的团队很小,身边的很多问题常常都是由自己亲手解决。我们采取了这种方案的原因更多的是因为我们选择这个问题。

从 2013 年年底起,我们开始把更多的注意力放在自助服务和分布式运行监测上。我们想停止监测单个主机,并开始将服务作为一个整体考虑。Zabbix 并不适合,因为它主要关注单个主机。唯一可以操作它的是SRE 团队的成员。随着整个基础设施变得越来越庞大,我们的系统在强大的负载压力下开始产生裂痕。

我们也在试图尽力将目前的工作做一些改进:基于内存的sitemon 方案仅仅能在当前负载压力下保存大约1 个月的指标数据,从而我们的首席架构师提出了一种新的替代方案。在这种方案下,虽然我们还有一些喘息的空间,但我们估计我们最多只能持续一年。出于这样的体验,Spotify 组建了一个新的团队:Hero。他们的目标是改进Spotify 的监测,并为未来做好准备。不惜一切代价。下面是他们采取的主要做法。

报警作为一种服务

报警是我们需要攻克的第一个问题。

我们考虑进一步发展Zabbix。它使用触发器表达式来检查报警条件。我们在系统中观测到大量位衰减,许多正在运行的触发器很难理解、已经损坏或无效。这就引出了我们为下一代警报系统所提出的其中一个要求:它必须使得对触发器的测试变得简单,以使其容易理解。Zabbix 的可扩展性也是一个问题。在接下来两年中,我们不相信我们的系统可以在我们预期的规模上运行。

在参加 Monitorama EU 时,我们偶然发现了 Riemann 。一个分布式监测系统解决方案。Riemann 并没有提供不确定情况下的可扩展性,但对于无状态规则的偏爱很容易地让它可以对负载进行划分和分配。我们为一个服务中的每个主机配对至少两个实例,这些实例运行了相同的规则集。

我们在 Riemann 之上建立了一个库,称为 Lyceum 。这使我们能够建立一个 git 仓库,仓库内部,每一个方格可以将它们的规则放入一个隔离的命名空间中。使用这个配置,我们的工程师可以定义可重复的集成测试。它使得任何人可以打开 repo,并可以在产品中直接部署这些变更。我们的立场发生了改变,如果测试通过,我们便知道它的工作原理。这被证明是非常成功的。Clojure 是一门远远比触发器表达式更易于理解的语言,基于 git 的审查过程更适合我们的开发方法。

制图

在这个方面,我们折腾了好几次。我们初始的堆栈是基于 Munin 的,其中的插件对应着收集到的所有东西。一些指标是标准的,但最重要的那些是服务指标。

切换到基于 push 的方式来降低我们选用工程师的门槛,是值得期待的。使用 Munin 的经历告诉我们,复杂的定义指标的过程会延缓最后指标的采纳。基于 Pull 的方法需要配置读出什么,以及从哪里读出。而用 Push 的方法,你会忘记在最近的 API 中的样本,最好使用一个共同的协议。考虑一个短暂的任务,其中可能没有足够的时间被收集器发现。但对于 Push 来说,这并不是问题,因为是任务本身控制了度量的发送。

如果您想了解更多, sFlow Alan Giles 针对这个问题进行了更深入的分析。

我们最初的实验中,部署了一个基于 collected Graphite 的通用解决方案来积累经验。分析性能测试的结果,我们感觉对这种垂直的可扩展性并不满意,我们不想只有一个 Graphite 节点。

whisper 写入模式涉及到跨众多文件的随机搜寻和写入。文件搜索过程中的向下采样,存在一个很高的成本。

分片和再平衡Graphite 存在的困难也经常让人望而却步。其中的一些可能最近通过使用后端支持的Cyanite 已经得到了解决。但对我们来说,Graphite 仍然遭受了一个重大的理论障碍:分层命名。

数据层次

Graphite 中一个典型的时间序列按照类似下面这种方式命名:

确切的形式分情况不同,但是这可以被视为一个固定的层次结构。在一些情况下这种方式工作得很好,因为它们本质上就是层次结构。但是,如果我们想在一个特定的网站选择所有服务器。我们有两个选择:我们希望服务器名称在不同的基础架构中保持一致,并执行通配符匹配;或者为了解决这个问题,我们可以对命名层次结构进行重新洗牌:

这种类型的重构是很难的。

没有正确的答案。一个团队可能要求将网站作为筛选的主要手段,也可能希望将角色作为筛选的主要手段。这两个要求具有相同的优点。因此,弱点也都在于命名方案。

标签

在解决这个问题中有一个完全不同的方式,即考虑将一个时间序列的标志符由一组标签组成。

看看我们前面的例子,我们将现有层次结构映射到一组标签。

通过一个过滤系统,其能够让工程师将内部组件相互连接的一大片时间序列进行拆分。提高了互操作性。

这样一来,这就没有了我们必须严格遵守的层次结构。按照惯例,他们可能是结构的一部分(“网站”和“主机”总是存在),但它们既没有被要求,也不是严格有序的。

Atlas Prometheus OpenTSDB InfluxDB KairosDB 都是使用标签的数据库。 Atlas 和 Prometheus 被认真考虑过,但在时间上并不可用。我们最终并没有选择 OpenTSDB,因为在使用 HBase 时的糟糕的运行体验。InfluxDB 不成熟,因为它缺乏自助服务的功能,而这正是我们需要推出的。KairosDB 似乎像最好的选择,所以我们进行了广泛的试验。但发现它在性能和稳定性上存在问题,我们试图做一些努力,但均告失败。我们认为该项目由于缺乏社区的参与,并没有朝着我们期待的方向前进。

受 KairosDB 的启发,我们开始了一个新的项目。我们针对这个项目做了一些小的实践,并取得了可喜的成果,所以我们坚持下来了,并给它取了一个名字;Heroic。

请继续关注下一篇文章,我会介绍 Heroic,即我们的可扩展的时间序列数据库。

编后语

《他山之石》是 InfoQ 中文站新推出的一个专栏,精选来自国内外技术社区和个人博客上的技术文章,让更多的读者朋友受益,本栏目转载的内容都经过原作者授权。文章推荐可以发送邮件到 editors@cn.infoq.com。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-12-17 16:552828
用户头像

发布了 268 篇内容, 共 118.0 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

从技术角度聊聊2023年怎么入局小游戏赛道?

FN0

小游戏 小游戏开发 小游戏引擎 小游戏运营

语音识别技术的挑战与机遇

来自四九城儿

软件测试/测试开发丨App自动化—高级控件交互方法

测试人

Python 程序员 软件测试 自动化测试

语音识别技术的应用及优化

来自四九城儿

软件测试|一篇文章教你SQL与NoSQL、数据库重要概念、SQL的基本语句

霍格沃兹测试开发学社

解锁企业数据管理的利器——DataOps

数造万象

云计算引领数字化时代

Finovy Cloud

云服务 云计算,

iWall for Mac(动态桌面壁纸软件) 5.1.0中文激活版

mac

苹果mac Windows软件 动态壁纸软件 iWall

天翼云云电脑:IAAS基础设施带来的计算革新

天翼云开发者社区

云计算 云电脑

低代码平台技术分享官丨业务流那些事之单据追踪

inBuilder低代码平台

低代码开发那些事儿

这我可不懂

低代码

软件测试|pip命令,你真的会了吗?

霍格沃兹测试开发学社

软件测试|教你如何用Python获取昨天今天明天的日期

霍格沃兹测试开发学社

如何在Mac电脑上快速锁定屏幕

iMac小白

macos mac电脑 苹果电脑

06. 机器学习入门2 - 理解特征和向量

茶桁

人工智能 机器学习 特征向量

OP链质押挖矿系统开发源码搭建

l8l259l3365

低代码助力企业数字化转型:实现高效应用开发与部署

互联网工科生

低代码 数字化

软件测试|什么是Python函数及名称空间?

霍格沃兹测试开发学社

软件测试|最全的Python for循环和while循环使用介绍

霍格沃兹测试开发学社

软件测试|f-string格式化输出的这些用法,90%的Pythoner不知道

霍格沃兹测试开发学社

如何使用ChatGPT编写更好的代码

这我可不懂

人工智能 语言模型 ChatGPT

macOS Sonoma 正式版系统已发布,macos14值得更新吗

iMac小白

macos macOS Sonoma MacOS14系统 macOS14

通过Java Record提升代码质量:简洁而健壮的数据对象

树上有只程序猿

java 14 数据类型

FaceFusion:探索无限创意,创造独一无二的面孔融合艺术!

汀丶人工智能

人工智能 深度学习 计算机视觉 图像生成

【深入MaxCompute】人力家:借助Information Schema合理治理费用

阿里云大数据AI技术

大数据

Node.js 做 Web 后端的优势在哪?为什么是明智的选择?

高端章鱼哥

node.js Web 后端开发

智慧公厕建设的好处和意义?提高城市形象和吸引力的秘密武器

光明源智慧厕所

智慧厕所 智慧公厕

软件测试|教你轻松玩转Python日期时间

霍格沃兹测试开发学社

天翼云GPU云主机:共享信息技术与虚拟机的完美融合

天翼云开发者社区

云计算 云主机

FaceFusion:探索无限创意,创造独一无二的面孔融合艺术!

汀丶人工智能

人工智能 深度学习 计算机视觉

KDD 2023 | 蚂蚁“优化器三部曲”之 WSAM

AI Infra

人工智能 开发者 算法 优化器 KDD

Spotify的监测框架(上)_语言 & 开发_张天雷_InfoQ精选文章