写点什么

追踪缺陷服务器: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:493754
用户头像

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

关注

评论

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

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

week12学习总结

burner

突破传统 区块链如何实现病历永存

CECBC

区块链 电子病历 信息共享

分布式QoS算法解析

焱融科技

分布式 算法 焱融科技 分布式文件存储 QoS

滴滴ElasticSearch千万级TPS写入性能翻倍技术剖析

滴滴技术

大数据 elasticsearch 滴滴技术

实时数仓在滴滴的实践和落地

滴滴技术

大数据 滴滴技术 数据通道服务

隐私计算会成为“金融”向“数科”转型的一剂猛药?

hellompc

基于Prometheus的微服务应用监控

易观大数据

滴滴数据通道服务演进之路

滴滴技术

大数据 滴滴技术 数据服务通道

第 0 期架构师训练营第 8 周作业2-总结

fujin

滴滴推理引擎IFX:千万规模设备下AI部署实践

滴滴技术

人工智能 学习 AI 滴滴技术 IFX

可编程网卡芯片在滴滴云网络的应用实践

滴滴技术

云计算 芯片 滴滴技术

c语言函数指针之回调函数

C语言与CPP编程

C语言 回调函数 函数 函数指针

Zeppelin SDK :Flink 平台建设的基石

Apache Flink

flink

滴滴数据仓库指标体系建设实践

滴滴技术

大数据 数据仓库 滴滴技术

滴滴云平台事业群——就是稳!

滴滴技术

招聘 滴滴技术 滴滴云平台事业群分享月

迭代技术方案设计文档规范

程序员架构进阶

技术方案

第 0 期架构师训练营第 8 周作业 1

fujin

浅析LR.Net工作流引擎

Learun

.net 敏捷开发 工作流

物联网的银河,华为的桨,少年的歌

脑极体

GPU虚拟机创建时间深度优化

滴滴技术

云计算 虚拟化 滴滴技术

1.Flink检查点算法-15

小知识点

scala 大数据 flink

Redis做消息队列全攻略

架构师修行之路

redis MQ 消息队列

数据分析之伯克森谬误:颜值和性格真成反比吗

KAMI

人生 数据分析 数据

在Rust里面嵌入python代码

lipi

Python rust

区块链技术成为金融业务应用热点

CECBC

区块链 人工智能 金融

拥抱K8S系列-03-服务器部署应用和docker部署应用区别(MySQL篇)

张无忌

MySQL Docker 运维

滴滴Ceph分布式存储系统优化之锁优化

滴滴技术

云计算 分布式存储 Ceph 滴滴技术

滴滴七层接入平台实践和探索

滴滴技术

微服务 运维 滴滴技术 七层接入

自定义线程池来实现文档转码

架构师修行之路

【Spring注解驱动开发】AOP核心类源码解析,这是最全的一篇了!!

冰河

spring aop ioc

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