写点什么

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

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

关注

评论

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

IO流详细解答,博主亲自手敲代码,快速上手

爱好编程进阶

Java 程序员 后端开发

无形资产管理系统解决方案

低代码小观

资产管理 CRM 财务审核系统 CRM系统 企业管理软件

拿起手中的键盘做公益侠客,让你的第一个低代码应用为公益发光发热!

InfoQ写作社区官方

低代码 公益 大学生 热门活动 码上公益

ansible 模块:set_fact

ghostwritten

ansible

还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

葡萄城技术团队

ERP 全套信息化系统 二开

美哭了,一款开发者必备的接口管理工具!

Liam

Postman 开发工具 API API接口管理 接口管理工具

Hugging Face创始人亲述:一个GitHub史上增长最快的AI项目

OneFlow

人工智能 深度学习 nlp 开源社区

ansible template jinja2 渲染

ghostwritten

ansible

基于 FFI 的 PyFlink 下一代 Python 运行时介绍

Apache Flink

大数据 flink 编程 流计算 实时计算

Apache DolphinScheduler 2.X保姆级源码解析,中国移动工程师揭秘服务调度启动全流程

白鲸开源

Apache 大数据 开源 DolphinScheduler workflow

如何开发 LAXCUS 分布式应用软件(三):编写终端软件

LAXCUS分布式操作系统

集群架构 并行计算 端边云 分布式操作系统 分布式应用软件

企业文档爆炸,如何管?

小炮

企业文档管理工具

AIRIOT物联网低代码平台如何配置MQTT驱动?

AIRIOT

物联网 低代码平台 驱动配置

windows服务器是什么?运维管理用什么工具好?

行云管家

windows 服务器 自动化运维 服务器运维

有趣、实用、全面,是程序员心中理想人工智能教材的样子了

图灵教育

深度学习 PyTorch

无聊科技正经事周刊(第6期):纯粹的程序员与必然的中年危机

潘大壮

程序员 周刊 行业趋势 科技周刊

IntelliJ IDEA开发最佳配置

爱好编程进阶

Java 程序员 后端开发

ansible 模块:script

ghostwritten

ansible

netty系列之:我有一个可扩展的Enum你要不要看一下?

程序那些事

Java Netty 程序那些事 5月月更

Spring Security

Zhang

Java spring security

数据标准在网易的实践

网易数帆

大数据 数据仓库 数据治理 元数据 数据标准

idea启动tomcat报错,org

爱好编程进阶

Java 程序员 后端开发

当.Net撞上BI可视化,这3种“套路”你必须知道

葡萄城技术团队

看板 数据大屏 BI数据分析

「码」力集结!他们用作品为FinClip黑客松打造出一道靓丽的风景线

Speedoooo

小程序 hackathon 黑客马拉松 黑客松 小程序容器

Go1.18泛型浅谈

CodeWithBuff

golang 泛型 新特性 Go 语言

等保三级全称是什么?是什么意思?

行云管家

网络安全 等级保护 等保三级 等保2.0

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”

葡萄城技术团队

银行家算法 纯前端表格技术

HIVE3 深度剖析 (上篇)

明哥的IT随笔

大数据 hie

容器化 | 构建 RadonDB MySQL 集群监控平台

RadonDB

MySQL 数据库 容器化 RadonDB KubeSphere

萌新看过来,你还学不懂VScode插件吗?

葡萄城技术团队

报表

墨天轮访谈 | OceanBase 白超:海量数据管理,为什么选择OceanBase?

墨天轮

数据库 oceanbase 国产数据库

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