写点什么

追踪缺陷服务器:Netflix 的异常检测技术

  • 2015-07-20
  • 本文字数:2445 字

    阅读完需:约 8 分钟

云计算环境下,及时发现服务器集群中的性能问题至关重要。开发者经常会遇到这样一种情况,整个系统工作性能急剧下降,但简单的查找很难发现明显的漏洞,最终需要耗费大量的人力对所有服务器进行逐台排查。因此,开发者会寄希望于自动检测技术发现出现异常的服务器。针对这个问题, Netflix 的工程师们通过构建了一个自动异常检测系统,做了很好的工作。

作为世界上最大的在线影片租赁服务商,Netflix 拥有大量的服务器集群以支撑在线影片的存储以及个性化影片推荐等服务。Netflix 的工程师们也希望他们的自动异常检测系统能够发现隐藏在表面现象下的微小异常,能自动发现“不健康”的服务器,从而帮助维护人员从无数个通宵达旦中解救出来。本文通过对 Netflix 的异常检测技术进行简单介绍。文章由黄立威、张天雷整理。

玻璃上的斑点

Netflix 服务目前运行在数以万计的服务器上,可是通常会有百分之一处于不健康的状态。例如,一个服务器的网络性能可能下降,并导致请求处理延迟,这样一个不健康的服务器虽然在一个次优的状态下运行,可是在响应健康检查的时候依然会显示正常的系统级指标。事实上,一个运行缓慢或不健康的服务器比一个彻底损坏的服务器更糟,因为它的影响可以足够小,保持在我们的监控系统的容忍范围内,并且会在维护人员的检查中被忽视。虽然有时候在数千个健康的服务器中可能仅仅潜伏着几个不健康的服务器,但这仍然可能影响对客户的服务质量,并招来大量的投诉电话。

上图表示不同的服务器(不同的颜色的线表示)在不同时间上的错误率,虽然几乎所有的服务器在某些时段上都会出现高的错误率,但它们很快也会回落到零,只有紫色的线始终高于正常水平。那么,是否可以将它作为一个异常点呢?有没有一种方法能够使用时间序列数据自动找到这些异常点呢?

一个非常不健康的服务器可以很容易地通过一个阈值警报被检测出来。但是,阈值警报要求服务器的错误率在很长一段时间维持在高的状态,而且还需要对阈值进行定期调整,这实际上是非常困难的,需要考虑数据的访问模式和容量的变化等复杂因素。提高可靠性的一个关键步骤是自动发现运行在下行状态的服务器,但而它们却还不足以糟糕到通过阈值警报检测到。

暴风雪中找兔子

针对上一节中提到的问题,Netflix 采用了聚类分析的方法来解决,它属于是一种无监督机器学习的方法。聚类分析的目标是将对象分类到不同的类或者簇中,使得同一个簇中的对象比不同簇间的对象具有更高的相似性。无监督技术的优点是无需有标签的数据。虽然当前有许多不同的聚类算法,每种方法也有自身的优势,Netflix 使用了一种具有代表性的基于密度的空间聚类方法 DBSCAN 来自动检测异常服务器。

DBSCAN 最初是由 Martin Ester, Hans-Peter Kriegel, Jörg Sander 和 Xiaowei Xu 在 1996 年提出。这种技术将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,而将低密度区域中的点标记为异常点。从概念上讲,如果特定点属于一个簇,其附近应该有大量的其他点(距离通常有特定的函数度量)。Naftali Harris 的博客文章给出了一些通过 DBSCAN 进行聚类例子,例子中包含了聚类的可视化表示

要检测异常的服务器,服务拥有者应该指定一个度量指标来对异常点进行监测。Netflix 使用这个指标分析从Netflix 主要的时间序列遥测平台 Atlas 上收集到一个数据集,在数据集中使用 DBSCAN 算法,实现异常服务器的自动检测(下图中的红色区域为 DBSCAN 算法发现的结果)。

DBSCAN 需要配置两个输入参数,一个是距离度量,一个是最小群集大小。然而,服务器拥有者不需要考虑如何找到正确的参数组合让算法有效地识别异常点。Netflix 让服务器拥有者仅仅需要定义异常点的当前数量(在配置的时候可以是任意值)。基于这一认识,Netflix 使用模拟退火算法对距离和最小群集大小进行参数优化。这种方法可以有效地降低异常点检测的复杂度,并且可以很方便地采用并行处理技术,事实上服务器拥有者不需要过问太多算法的细节。

数据分析结果

为了对技术的有效性进行评估,Netflix 在一个产品服务中运行了这种自动异常检测技术。采用手动的方式确定服务器是否应该被列为异常点,从而作为测试数据。通过分析一周的数据,结合测试数据与异常检测系统发现的结果,计算一系列的评价指标,包括准确率,召回,和 F- 评分,结果如下:

Server Count precision Recall F-score 1960 93% 87% 90% 结果表明,虽然不能完全发现集群环境中的异常点,但已经很接近了。事实上,在云计算环境下,一个不那么完美的解决方案是完全可以接受的,因为单个节点的错误所造成的损失是相对较低的。错误地终止一台服务器几乎没有特别大的影响,因为可以立即使用一台新的服务器替代它。虽然该系统并不完全准确,但我们清楚地知道一个不完善的解决方案比没有解决方法要好得多。

进一步的改进

在实验中 Netflix 的工程师使用了一段时间的数据来做决策。相比于一个实时的方法,它也存在一个明显的缺点,即异常检测的时间与分析数据的时间窗口长短是紧耦合的。可以利用实时流处理框架对此进行改进,如 Mantis(Netflix 的事件流处理系统) Apache Spark Streaming 。此外,随着 数据流挖掘在线机器学习等领域的不断发展,通过考虑这些在线技术或许可以有效缩短检测的时间。

事实上,还可以使用部分标记数据提高参数优化的性能。目前,Netflix 正在让服务器拥有者通过使用标记数据(他们非常熟悉的领域)来做一些尝试,并使用贝叶斯参数选择技术来针对训练数据集对参数进行优化。

由于Netflix 的云计算基础设施大规模增加,自动化的决策能够进一步提高系统的可用性,并减少人为干预。服务器异常检测只是Netflix 自动化进程中的一个例子,其他的例子还包括 Scryer Hystrix 。有效地利用机器学习和自动响应技术能够提高网站的可靠性。


感谢徐川对本文的审校。

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

2015-07-20 07:493871
用户头像

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

关注

评论

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

算法攻关 - 重上到下打印二叉树 (O(n))_offer32

小诚信驿站

刘晓成 小诚信驿站 28天写作 算法攻关 从上到下打印二叉树

css高度坍塌与清除浮动

依旧廖凯

28天写作 3月日更

进入大厂的简历应该是什么样子

我是程序员小贱

3月日更

【LeetCode】设计哈希集合Java题解

Albert

算法 LeetCode 28天写作 3月日更

一名MindSpore新手的爬坑记录~~

依旧廖凯

28天写作 3月日更

LeetCode题解:91. 解码方法,动态规划,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

Zookeeper.01 - 简介

insight

zookeeper 3月日更

MySQL主从复制机制

luojiahu

MySQL 主从复制

什么样的技术能进入一线大厂?这份阿里、百度、腾讯等 20家Java岗招聘要求梳理报告,会给你答案;

Java架构师迁哥

[转]html5设计原理

小江

基于SparkMLlib智能课堂教学评价系统的设计与实现(一)

大数据技术指南

大数据 spark 智能时代 28天写作 3月日更

《经济学人》2021年3月13日刊精彩文章导读及资源免费下载

wbliu85

Wireshark数据包分析学习笔记Day9

穿过生命散发芬芳

Wireshark 数据包分析 3月日更

「Linux」网络配置大揭秘

我是程序员小贱

3月日更

万事开头难——人为推进效应

Justin

心理学 28天写作 游戏设计

滚雪球学 Python 之怎么玩转时间和日期库

梦想橡皮擦

28天写作 3月日更

Lex Fridman: How to learn and master a new skill 简评

teoking

打卡第一次

容光

办公自动化

(28DW-S8-Day21) 《流程型组织》学习笔记:「客户第一」还是「老板第一」

mtfelix

28天写作 流程型组织

数字化“翻译官”

boshi

数字化 七日更

Python 日期格式和时间以及当前时间和时间戳

HoneyMoose

啥?用了并行流还更慢了

L

Java

优雅编程 | Javascript闭包的4种高级用法

devpoint

闭包 防抖 节流 闭包要点

虚拟路由器冗余协议 VRRP 详解

Oracle中我们什么时候需要用到定时任务?

xiezhr

oracle 定时任务 存储过程

Elasticsearch Document 写入原理

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

微服务学习笔记

lenka

3月日更

Elasticsearch 近实时搜索 Near Real-Time Search

escray

elastic 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 3月日更

你最喜欢的奥斯卡电影是哪部?

wbliu85

Python DataTime 日期处理

HoneyMoose

原来我还有网络天赋

叫练

网络 交换机

追踪缺陷服务器:Netflix的异常检测技术_语言 & 开发_张天雷_InfoQ精选文章