QCon全球软件开发大会8折优惠倒计时,购票立减¥1760!了解详情 >>> 了解详情
写点什么

Spotify 的监控框架(下)

2015 年 12 月 21 日

【编者的话】 Spotify 是全球最大的正版流媒体音乐服务平台。Spotify 提供的服务需要一个巨大的基础设施平台作为支撑,而监测这个平台的运行显得至关重要。Spotify 实验室的 John-John Tedro 近日对 Spotify 的监测进行了一个简单的介绍。在上一篇文章中,John 讨论了操作监控的历史。作为该系列文章的下半部分,本文介绍了免费、可扩展的时间序列数据库——Heroic。

Heroic 是 Spotify 公司内部使用的时间序列数据库。在大规模搜集和呈现近实时数据时,Spotify 公司曾面临着巨大挑战。Heroic 就是该公司用来应对这些挑战的工具。其内部包含了两个核心技术——Cassandra 和 Elasticsearch。其中,Cassandra 负责存储,而 Elasticsearch 负责索引所有的数据。Spotify 公司目前使用分布在全球各地的集群所运行的、超过 200 个的 Cassandra 节点,来服务超过五千万的时间序列。

作为一个商业公司的团队,他们清楚知道 Elasticsearch 在数据安全方面一直表现不好,因此采取了应对措施——在系统发生故障后,公司可以从数据流水线或 Cassandra 中迅速重建索引。

Heroic 的关键特性就是全球联合。不同的集群可以相互独立运行,而且可以把请求转移到其他集群来形成一个全球的接口。一个地区节点的失效只会造成该地区的数据无法访问,而不影响其他节点的数据。这种跨地域的联合使得集群拥有更好的性能。

框架中的每一个主机都会运行一个负责接收和转发统计数据的 ffwd 代理。输出统计数据的进程负责将其发送到 ffwd 代理。这就使得 Spotify 工程师可以轻松调度运行在一个主机上的任何东西。库文件也可以直接假设主机上已经存在 ffwd 代理,并且基本上不需要配置。由于延迟很小,该代理大大减轻了低效率客户端所带来的影响。ffwd 所收集的统计数据最后会输出到每个地域的 Kafka 集群中。

这样的配置使得 Spotify 团队可以利用服务拓扑进行实验。而 Kafka 提供了一个缓冲,使得团队成员在 Cassandra 或 Elasticsearch 出现问题时得以继续工作。其中,每一个组件都可以根据需求扩展或缩减。

在后端,所有的数据都如同提供给代理一样进行存储。如果需要任何 downsampling,使用 Dropwizard metric 等库就可以在数据进入代理之前进行执行。工程师还可以利用 Heroic API 对存储的数据执行额外的聚合操作。但是,Spotify 团队采用了一种合理的采样密度——一般情况下,每 30 多秒对每个时间序列进行采样。这种方法有效避免了非稳定状态的处理流水线所遇到的延迟和复杂度问题。

在使用 Heroic 时,Spotify 团队能够利用相同的接口来构建定制化的显示板和警告系统。它使得团队可以基于相同 UI 内的图来定义警告,大大简化了工程师构建的难度。但是,原有的问题不可能一次性就可以完全解决。该团队发现,拥有第二种方法来监控某些部分工作状态非常有必要。其长期目标仍然是更多的转向可视化警告方面。

现在,Heroic 的所有部分都已经免费。用户可以直接通过 Github 来下载源码。文档和项目的相关信息也可以在官方网站中找到。

编后语

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


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

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

2015 年 12 月 21 日 16:152406
用户头像

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

关注

评论

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

干货 | 京东技术中台的Flutter实践之路

京东科技开发者

flutter

从广西的新基建耕种,读懂一颗名为智能体的种子

脑极体

LeetCode题解:231. 2的幂,迭代,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

USDT承兑支付系统开发技术,搭建商户USDT支付系统

135深圳3055源中瑞8032

一周信创舆情观察(10.26~11.1)

统小信uos

屏读时代,我们患上了注意力缺失候群症

脑极体

1分钟带你解锁Angular

Leo

学习 前端 angular 前端进阶训练营

HTTP2协议及websocket协议总结

江龙

力扣解题:第三题(个人思路整理)

人语驿边桥

力扣

【得物技术】数据分析 - 生活品类社区内容精选池模型

得物技术

数据分析 得物技术部 得物技术 社区内容 精选池模型

阿里P8大牛精心整理,GitHub上超火的《Java工程师成神之路》从基础,到高级、底层、架构、进阶、扩展,囊括了Java体系内的所有知识点。

Java架构之路

Java 程序员 架构 面试 编程语言

MySQL中特别实用的几种SQL语句送给大家

陈哈哈

SQL优化 实用SQl语句 高性能SQL

LeetCode题解:231. 2的幂,递归,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

华为发布5GtoB核心网建设白皮书

华为云开发者社区

5G 边缘技术

一道比较运算符相关的面试题把我虐的体无完肤

Gopher指北

快快使用ModelArts,零基础小白也能玩转AI!

华为云开发者社区

人工智能 开发者 开发

架构师训练营第三周课后作业

天涯若海

GrowingIO 响应式编程探索和实践

GrowingIO技术专栏

响应式编程

这份阿里P8整理的新版手抄本,简直把所有Java知识操作都写出来了

Crud的程序员

Java 编程 程序员 程序人生 java面试

这可能是关于编程指南的最实用指南了

华为云开发者社区

开发者 软件开发 语言

TCP梳理总结

江龙

合约跟单模式开发,合约跟单系统平台

135深圳3055源中瑞8032

《高效程序员的45个习惯:敏捷开发修炼之道》.pdf

田维常

电子书

解决大中型浏览器(Chrome)插件开发痛点:自定义热更新方案——1.原理分析及构建部署实现

梁龙先森

Java chrome 前端 浏览器 技术方案

“软件教父”花费20年,教你如何在应用层混迹的风生水起

小Q

Java 学习 架构 面试 应用

区块链钱包APP开发服务商,数字货币钱包开发价格

135深圳3055源中瑞8032

应用层软件开发教父教你如何重构,资深程序员必备专业技能

小Q

Java 学习 架构 面试 重构

GitHub上超牛的Java进阶教程,汇总Java生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识

Java架构之路

Java 程序员 架构 面试 编程语言

6年Java开发经验,蚂蚁金服面试3+2次,最终有惊无险通过!(已拿offer)

Java架构之路

Java 程序员 架构 面试 编程语言

谈谈敏捷开发概念和迭代开发方案

Philips

敏捷开发 快速开发

数字资产交易平台开发,场外交易所开发搭建

135深圳3055源中瑞8032

移动应用开发的下一站

移动应用开发的下一站

Spotify的监控框架(下)-InfoQ