开工福利|免费学 2200+ 精品线上课,企业成员人人可得! 了解详情
写点什么

微服务的混沌测试

  • 2016-03-18
  • 本文字数:995 字

    阅读完需:约 3 分钟

在近日举行的 QCon 伦敦大会上, Rachel Reese 声称,世界天生就是混乱的,我们应该有计划并测试我们的系统,确保它能够处理这种混乱。他描述了 Jet 这家于 2015 年 7 月成立的电子商务公司是如何使用微服务和混沌工程的。

Reese 强调,测试微服务在环境中的交互极其重要,即使所有组件都经过了测试,但这并不意味着他们之间的交互是可靠的,也不意味着它们可以一起用于生产环境,所有这些都必须经过测试。她将 Jet 称为一家“为正确的工作选择正确的工具”的公司,对她而言,混沌测试就是其中一个正确的工具。

Reese 将微服务定义为符合单一职责原则(SRP)的应用程序,但是在服务层,由于他们以函数的方式看待微服务,所以它有一个输入,并产生一个输出。她认为,使用微服务的好处包括简化扩展性、独立发布、均匀分布的复杂性。Jet 在10 到15 个团队中运行着大约400 到1000 个微服务,主要是用 F#(一种函数优先的编程语言)编写的。

Reese 指出,混沌工程不是为了有趣而破坏代码,相反,她将其定义为:

在分布式系统上做对照实验,帮助建立对系统承受不可避免的故障的能力的信心。

参照混沌原则,Reese 定义了混沌工程的四个步骤:

  1. 定义“正常”(系统的正常状态);
  2. 假定“正常”会在对照组和实验组中持续;
  3. 引入混沌:服务器崩溃、硬盘异常、网络连接中断等;
  4. 查找对照组和实验组行为上的差别。

更准确地讲,这意味着:

  • 建立假设,定义系统的正常行为和状态,如吞吐量、延迟等;
  • 真实世界的不同事件、流量峰值以及其他可以导致混沌的东西;
  • 在生产环境中运行实验,确保测试的真实性;
  • 自动化实验,让其连续运行。

Reese 发现,混沌工程有许多好处,包括:

  • 白天测试导致系统中断,就不用在凌晨 3 点修复问题;
  • 工程师在设计过程中开始考虑故障;
  • 防止系统后续出现中断,让系统更健康。

根据他们的经验,Reese 指出,他们尚还没有在生产环境进行测试。作为一家初创企业,他们的主要目标是推出正确的东西。现在,他们白天所有时段都会进行随机的 QA 测试。

其中一场对他们而言最“有趣的”的灾难发生在数月之前,他们的手动测试人员发现,他们的搜索引擎宕掉了,导致了下游的一连串问题。这次故障的原因是混沌测试错误地重启了搜索引擎。就靠这么一个故障,他们发现了五六个不同的问题。

Reese 总结到:

如果可靠性很重要,那么你就应该为此开展测试。

Reese 的讲稿已经提供给 QCon 的参会者,稍后将提供给 InfoQ 的读者。

查看英文原文: Chaos Testing of Microservices

2016-03-18 19:004688
用户头像

发布了 1008 篇内容, 共 400.9 次阅读, 收获喜欢 345 次。

关注

评论

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

十五年后苹果再次变心

池建强

apple 苹果 芯片 wwdc

好奇心, 优秀软件工程师的内核品质

亚伦碎语

读书感悟 随笔杂谈

区块链目前实际的应用场景汇总

CECBC

区块链技术 去中心化 应用场景

查找算法系列文(一)一文入门二叉树

淡蓝色

Java 数据结构 算法 二叉树

第四周 学习总结

冯凯

LeetCode 655. Print Binary Tree

liu_liu

算法 LeetCode

辟谣:程序员不配谈恋爱?你错的可以!真相来了

码农神说

程序员 漫画 相亲

RabbitMQ跨机房迁移数据零丢失

心平气和

RabbitMQ 消息队列

【极客大学】【架构师训练营】【第二周】总结:设计原则

NieXY

极客大学架构师训练营

就餐卡系统架构设计文档

牛珈羽

极客大学架构师训练营

工作那么久,才知道的 SOLID 设计原则

闻人

架构师 极客大学架构师训练营

【极客大学】【架构师训练营】【第二周】依赖倒置原则和接口隔离原则

NieXY

极客大学架构师训练营

【在云端 002】云时代,何以安放我的个人数据

Bora.Don

云计算 云存储

线性表(数组、链表、队列、栈)详细总结

淡蓝色

Java 数据结构 算法 链表 线性表

设计原则与设计模式

dapaul

极客大学架构师训练营

iOS & Android 去马赛克处理

liu_liu

ios android 去马赛克

架构师训练营 - 第三周学习总结

清风徐徐

循序渐进的中台研发

理帆

中台 业务中台

Redis系列(三):缓存过期该如何剔除?RDB和AOF又是什么?

z小赵

Java redis 高并发 高并发系统设计

别兜售你自己不会购买的东西

Neco.W

创业 销售管理 销售

SpringBean的生命周期

编号94530

Java spring Spring Boot 生命周期

多个maven项目启动顺序

terrytian

maven

centos7 操作

InfoQ_1c4a1f813eb1

基于业务表 Binlog 的事件驱动设计

理帆

MySQL 事件驱动 Binlog

游戏夜读 | 《老残游记》很有趣

game1night

ARTS Week5

丽子

每日一题-翻转字符串里的单词

程序员老王

LeetCode

wee1作业总结

牛珈羽

极客大学架构师训练营

设计模式之单例模式和组合模式

dapaul

极客大学架构师训练营

食堂就餐卡系统设计

John

极客大学架构师训练营

MySQL InnoDB存储引擎 - 事务

Axe

微服务的混沌测试_DevOps & 平台工程_Jan Stenberg_InfoQ精选文章