Netflix 开源 Atlas:下一代监控平台
Netflix 开源了其下一代监控平台的一部分——Atlas。自2012年初以来,Netflix一直在开发Atlas,旨在存储时间序列数据,为团队提供近实时的操作洞察。Atlas具有内存数据存储功能,能够大规模地收集、存储和报告大量指标。据Roy Rapoport介绍,Atlas每秒可以获取和绘制数十亿个数据点,展示了其大规模处理能力。
Atlas 的背景与需求
Atlas 取代了 Netflix 之前的解决方案,即内部工具 Epic 和商业产品的组合。Netflix 开发 Atlas 是为了应对公司不断增长的数据量。2011年,Netflix 监控了与其流媒体服务相关的200万个指标,而到2014年,这一数字跃升至12亿个指标。
Atlas 的设计原则
在设计 Atlas 时,团队专注于为他们的目标做出正确的权衡,即为 Netflix 提供操作洞察。他们将操作洞察定义为允许人们了解当前和历史情况。这最终形成了以下关于操作数据的规则:
- 数据的重要性随时间的推移呈指数级下降。
- 恢复服务比防止数据丢失更重要。
- 尝试优雅地降级。
数据存储与优化
为了保持速度,Netflix 选择将大部分数据存储在内存中。团队评估了多种后端存储方案,但最终选择将大部分数据保留在内存中,无论是在 JVM 堆内还是堆外。这导致了一个高性能但操作成本高昂的系统。为了缓解这一问题,Netflix 采取了以下策略:
- 控制数据副本数量:Netflix 主要使用副本进行冗余,而不是提高查询性能。对于持久存储的旧数据,仅使用一个副本,从而将成本降低50%或更多。
- 自动汇总:对较旧、不太重要的指标进行自动汇总,丢弃多余数据。超过六小时的数据将进行汇总,例如删除节点维度以节省存储空间。
自动汇总的重要性
Roy 提供了一个例子来说明自动汇总的重要性以及维度指标如何迅速膨胀:
考虑一个简单的图表,显示过去三小时内每秒击中服务的请求数量。假设每分钟的分辨率,最终输出为180个数据点。在一个典型的服务中,每个节点将显示一个时间序列,因此如果有100个节点,中间结果集约为18k个数据点。对于一项服务,用户通过设备(约1000个)和国家(约50个)对请求进行细分,导致每个节点约50k个时间序列。如果仍然假设有100个节点,那么这三小时的数据点约为900M个。
Atlas 的组成部分
Atlas 只是 Netflix 计划开源的一系列产品中的第一部分。他们还构建了以下组件:
用户界面:
- 用于浏览数据和构建查询的主界面。
- 仪表板。
- 警报。
平台:
- 在存储层之前对报告的数据进行内联聚合。
- 使用堆外内存和 Lucene 的存储选项。
- 百分位后端。
- 发布和持久化应用程序。
- 用于计算汇总和分析的 EMR 处理。
- 用于 SNMP、健康检查等的轮询器。
客户端:
- 支持将 Servo 与 Atlas 集成。
- 本地汇总和警报。
实时分析:
- 指标量报告。
- 自动化金丝雀分析。
- 异常检测。
- 基于异常特征的自动服务器剔除。
更多详细信息,请参阅他们的wiki。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。