写点什么

Twilio 的混沌工程实践

  • 2017-12-27
  • 本文字数:920 字

    阅读完需:约 3 分钟

Twilio 团队分享了他们的初次混沌工程实践,他们使用 Gremlin 往自家的队列系统中注入故障,测试系统的自动恢复能力。

Twilio 提供 SMS 和电话网关服务,开发者可以在他们的代码中调用 Twilio 的 API。Twilio架构的核心部分是他们的分布式队列系统和速率限定系统。它提供了持久化的队列,解决了系统故障和消息处理的延迟问题,避免消息丢失。这个队列系统叫作 Ratequeue ,由 Twilio 团队开发。Ratequeue 对消息出队速率进行了限定——每个电话号码都有一个自己的临时队列。因为开发者有可能以很快的频率调用 API,所以速率限定是很有必要的,而 Twilio 将消息推送到电话网络的速度也需要加以控制。Ratequeue 是基于 Redis 开发的,可以进行横向扩展。单个分片故障并不会影响到其他分片。另外,为了高可用,每个分片都有自己的主节点和副本。

之前,如果有分片发生故障,需要由人工手动将副本提升为主节点。这就要求先定位到拥有相同分片数量的主机,然后把它加到负载均衡器中。Twilio 团队开发了两个系统,旨在对这一过程进行自动化——一个自动化的失效备援系统和一个用于测试前者的故障注入系统。故障注入系统属于混沌工程,通过制造随机的故障来测试系统的自我恢复能力。

测试的首要目的是保证零数据丢失,其次要保证能够自动检测出故障,并推举出新的主节点。Twilio 团队基于 Amazon Kinesis、Nagios 和 Lazarus 开发了自己的解决方案——也就是他们的集群自动化服务。每个 Ratequeue 副本将主节点的心跳情况发送给 Nagios,如果达到某个阈值,Nagios 就向 Kinesis 推送通知。Lazarus 监听 Kinesis,检查集群的健康状况,如果出现故障,就进行恢复。

为了测试自动故障恢复能力,Twilio 团队开发了一个叫作 Ratequeue Chaos 的工具,它会选择一个分片,停掉它的主节点,然后监控其自我恢复过程。他们有一个叫作 Gremlin 的服务,用于将故障注入到系统中,触发失效备援。Gremlin 支持可控的故障注入,Ratequeue Chaos 通过 Gremlin 提供的 API 来调用它。Twilio 的 staging 环境每 4 个小时会重复一次这个过程。

Twilio 团队也分享了他们从这一实践中学到的东西——基于测试模型的假设、用于运行测试的框架、在生产环境中需要有一个回退计划。

查看英文原文 Chaos Engineering at Twilio

2017-12-27 18:001661
用户头像

发布了 322 篇内容, 共 134.4 次阅读, 收获喜欢 144 次。

关注

评论

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

孩子,我们在睡前一起来阅读 15 分钟的好书,让彼此都带着好的故事入眠。

叶小鍵

正确阅读 托马斯·奥本 Doug Antin 蒂·泰德罗克

Flutter的staggered GridView详细使用

潘珉

flutter

翻译敏捷行业专业外文,不只是谷歌翻译

老彦

翻译 Scrum 敏捷开发 Agile

Golang热更新原理

我心依然

nginx Linux 信号 Go 语言

内容比形式更重要

Winann

内容 生活 工作 形式主义

实用贴丨正确的「递归」打开方式:让计算机像计算机一样去计算

博文视点Broadview

Python 递归

[Git] Git 可以这么学

猴哥一一 cium

git

「开放」对协作效率的影响

Tony Wu

产品 产品设计

2020年2月北京BGP机房网络质量评测报告

博睿数据

APM 机房 评测 世纪互联

学计算机你后悔了吗?

陈辰

学习 技术 大前端

ARTS - Week One

shepherd

js algorithm

Lean UX 教你设计如何驱动产品

Yanel 说敏捷产品

产品 敏捷 设计

Kubectl exec 的工作原理解读

米开朗基杨

Kubernetes kubelet

[GitHub] 跟我一起白嫖 GitHub Pages 做个人站点 ?

猴哥一一 cium

git GitHub GitHub Pages

软件开发生产率改进之我见(一)

清水

团队管理 软件工程 技术管理

有点干货 | Jdk1.8新特性实战篇(41个案例)

小傅哥

函数式接口 Lambda 小傅哥 jdk8 编码

五个“为什么” —— 读《精益创业》

YoungZY

读书笔记

有价值的产品=设计思维+精益创业+敏捷方法

老彦

Scrum 敏捷开发 Agile 设计思维 精益创业

关于问题的问题 —— 读《你的灯亮着吗?》

YoungZY

读书笔记 读书

Zabbix实战指南

橙子冰

技术 运维 监控 运维自动化 zabbix

游戏夜读 | 如何避免乏味?两则

game1night

给学妹的 Java 学习路线

武培轩

Java 学习 程序员 程序媛

李想解读《高效能人士的七个习惯》

我心依然

习惯 高效能人士的七个习惯 李想 汽车之家

面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

cxuan

mybatis

Elasticsearch 实战

代码诗人

数仓系列 | Flink 窗口的应用与实现

Apache Flink

大数据 flink 流计算 实时计算

2020年2月北京BGP机房网络质量评测报告

博睿数据

一文带你彻底厘清 Kubernetes 中的证书工作机制

首富手记

Kubernetes

python实现·十大排序算法之希尔排序(Shell Sort)

南风以南

Python 排序算法 希尔排序

工厂模式 (一)简单的工厂模式概念以及示例代码

LSJ

基于mysqldump聊一聊MySQL的备份和恢复

麦洛

MySQL

Twilio的混沌工程实践_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章