NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Twitter 的故障处理机制:故障测试

  • 2015-12-29
  • 本文字数:1728 字

    阅读完需:约 6 分钟

对于 Twitter 这样的基础设施规模,硬件和网络错误是不可避免的,但无论是哪一种错误都可能对用户体验造成消极的影响,因此对一个系统而言弹性的错误处理能力是非常重要的,那么 Twitter 是怎样做的呢?最近 Twitter 基础设施工程团队的负责人 Mazdak Hashemi 在官方博客上发表了一篇文章,介绍了 Twitter 的故障测试机制

为了测试服务如何响应异常,Twitter 创建了一个能够将受控的故障条件注入到基础设施中的框架,通过该框架 Twitter 能够发现漏洞,从而更好地为全站范围内的事件处理做好准备,保证系统对意外故障具有较好的容错性。

框架

Twitter 的故障测试框架由一个 Python 类库和一个命令行可执行程序组成,通过该框架工程师能够将故障条件直接引入到产品基础设施中,然后能够在测试执行期间监控全站范围的健康指标,并在状态发生变化的时候发送系统通知。

该框架包含三个模块:

  • 故障引入(Mischief)模块,在产品服务和基础设施中引入或者撤回故障测试
  • 监控模块,检查服务的健康指标,查找可能导致全站范围事件的状态
  • 通知模块,与 HipChat 和 JIRA 等系统交互,在故障测试执行期间提供实时的状态更新

到目前为止,框架支持的故障条件包括:

  • 发送命令给 IPMI 控制器和 PDU 的功率损耗
  • Mesos 中服务集群的部分或者全部丢失
  • 推送新转换配置造成的网络丢失

下面是一个介绍工程师如何使用框架测试故障条件的示例,该示例为 abc 机架上的所有 Hadoop DataNode 引入了一个 30 分钟的功率损耗,然后监控健康指标并向聊天室发送状态更新:

复制代码
failure_test:
name: Power loss within rack abc in datacenter abcd
duration_mins: 30
mischief:
- power_loss:
datacenter: abcd
selectors:
- group:
type: role
name: hadoop.datanode
- group:
type: rack
name: abc
notifiers:
- chat:
rooms:
- Failure Testing
monitors:
- observability:
datacenter: abcd
queries: !snippet

将这些配置发送到框架的命令行工具上之后,框架首先会解析这些配置,确认其有效性。接下来框架会进入准备阶段,收集引入故障条件所需的所有信息,例如目标机器的主机名和 IPMI BMC 接口的地址等。准备成功之后,框架会检查需要测试的所有系统是否健康,并尝试引入请求的故障条件。如果条件引入成功,框架就会定期地(每分钟)检查监控,确保测试期间所有系统都运转正常,如果这期间有任何一个监控发送了错误的状态,那么测试就失败,否则测试就成功。但是无论是成功还是失败,框架都会在测试执行完成之后立即取消引入的所有故障条件。

完整的流程图如下:

挑战

Twitter 运行的基础设施具有异构且动态的特性,所以在为一个具体的服务引入故障测试时需要细心的设计和计划,考虑要全面。例如,托管在 Apache Aurora 上动态调度的服务与直接运行在硬件设备上的服务不同。为了找到引发异常的真正原因,必须捕获完整的测试环境,包括机架配置、服务类型以及流量等信息,因为在某些情况下,异常可能是由上游或下游的问题,或者是服务恢复行为引发的。

使用情况与经验教训

在过去的 6 个月,这一框架驱动了 Twitter 所有的故障测试,帮助 Twitter 发现了大量的漏洞,让 Twitter 对 Apache Mesos Apache Aurora 等主要系统的弹性故障处理机制有了非常强烈的信心。

另外,Twitter 还总结了一些经验教训。例如,从机架顶部开关损坏的故障中总结出:当这种情况发生的时候,运行在该机架上的服务要么全部从网络上丢失,要么丢失部分包,对于前一种情况 Twitter 的服务能够很好地处理,但是后一种情况却几乎总是会造成某些内部的影响,这种影响的严重程度取决于机架的配置和 Mesos 从机上运行的服务种类。

未来的工作

Twitter 将继续使用该框架测试基础设施对随机故障的处理能力,找到系统的瓶颈。同时,故障测试程序的范围也会增加,将来扩展 RPC 系统层也将支持这种机制。


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

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

2015-12-29 18:001767
用户头像

发布了 321 篇内容, 共 116.0 次阅读, 收获喜欢 18 次。

关注

评论

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

前端一面常考手写面试题整理

helloworld1024fd

JavaScript

QCon演讲实录(上):多云环境下应用管理与交付实践

阿里云大数据AI技术

大数据 运维 企业号 2 月 PK 榜 云环境

EMQX Cloud Serverless正式上线:实现三秒部署的MQTT Serverless云服务

EMQ映云科技

物联网 IoT mqtt emqx 企业号 2 月 PK 榜

【从零开始学爬虫】采集全球海关进出口新闻数据

前嗅大数据

大数据 爬虫 海关

聚焦能碳数智化 百度智能云度能亮相2022世界物联网大会

Geek_2d6073

BALENCIAGA 3XL 限量款数字藏品

科技热闻

前端工程师leetcode算法面试必备-二分搜索算法(中)

js2030code

JavaScript LeetCode

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

深入React源码揭开渲染更新流程的面纱

goClient1992

React

手写一个react,看透react运行机制

goClient1992

React

基于昇腾计算语言AscendCL开发AI推理应用

华为云开发者联盟

人工智能 华为云 昇腾 企业号 2 月 PK 榜 华为云开发者联盟

2023Java岗字节跳动3面 + 腾讯6面经历(均已拿offer),谈谈我的大厂面经

架构师之道

编程 程序员 java面试

全栈角度看分页处理

京东科技开发者

数据库 前端 Web 开发 框架

vivo 自研Jenkins资源调度系统设计与实践

vivo互联网技术

运维 jenkins 资源调度

阿里前端必会手写面试题汇总

helloworld1024fd

JavaScript

深度分析React源码中的合成事件

goClient1992

React

NFT艺术品代币如何进行赋能?系统开发定制

开发微hkkf5566

无锡正规等级测评公司有几家?分别叫什么?

行云管家

等保 堡垒机 网路安全 等级保护 无锡

怎样徒手写一个React

helloworld1024fd

JavaScript

20个 Git 命令玩转版本控制

SEAL安全

git 企业号 2 月 PK 榜 git command

Java高手速成 | 对象-关系的映射、映射对象标识符与JPA API的级联操作

TiAmo

Java jpa API 编排

手写JS函数的call、apply、bind

helloworld1024fd

JavaScript

面试官问我:CSS有哪些属性可以继承

华为云开发者联盟

前端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

5分钟体验代码仓托管、CloudIDE云端代码编辑、调试、运行

华为云开发者联盟

云计算 华为云 企业号 2 月 PK 榜 华为云开发者联盟

从recat源码角度看setState流程

flyzz177

React

从react源码看hooks的原理

flyzz177

React

开源工具系列4:Nuclei

HummerCloud

网络安全 漏洞扫描

0源码基础学习Spring源码系列(一)——Bean注入流程

京东科技开发者

spring 开源 后端

好用的研发管理看板工具有哪些?10款主流看板管理软件盘点

PingCode

项目管理 产品经理 管理软件

焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快

OpenAnolis小助手

直播 开源社区 龙蜥大讲堂 机密计算 月度主题

react的useState源码分析

flyzz177

React

Twitter的故障处理机制:故障测试_语言 & 开发_孙镜涛_InfoQ精选文章