FinOps有望降低企业50%+的云成本! 了解详情
写点什么

混沌工程原理解析

  • 2017-08-08
  • 本文字数:1674 字

    阅读完需:约 5 分钟

超大规模分布式软件系统的持续发展正快速转变软件工程层面的游戏规则。在这一行业当中,我们正广泛采取灵活度更高且速度更快的部署方案。然而,这一变革又带来了新的紧迫问题:在我们投身于复杂的生产系统之前,对其实际表现拥有怎样的信心?

即使分布式系统当中的每一项独立服务皆拥有正常的运作效果,但这些服务的彼此交互仍可能导致无法预测的结果。而这类结果一旦遭遇较为罕见但极具破坏性的现实事件,则将令分布式系统自身的混乱程度更上一层楼。

我们需要在系统范围之内实际出现异常活动之前,抢先发现其中的薄弱环节。系统性弱点可能表现为以下形式:服务不可用时后备设置不当 ; 因超时设置不当导致反复重试 ; 下游依赖关系在接收到大量流量时出现中断 ; 发生单点故障时连锁引发后续问题等等。我们有必要主动解决此类薄弱环节,确保其不致真正对生产环境下的用户造成影响。要实现这项目标,我们显然有必要管理此类系统内的混乱性因素,充分发挥灵活性与速度优势,最终在高复杂性基础之上建立起值得信任的生产部署体系。

我们将利用一套基于经验的系统性方案解决规模化分布式系统中的混乱难题,同时凭借系统承受各类现实状况的能力建立信心。我们将立足一项受控实验观察分布式系统的运作方式——这种作法被我们称为“混沌工程”。

实践中的混沌因素

为了切实解决规模化分布式系统中的不确定性因素,您可将混沌工程视为一种经由实验发现系统性薄弱环节的方案。此类实验遵循以下四个步骤:

  1. 将“稳态”定义为用于指示系统正常运作状态的一系列可测量输出。
  2. 假定这种稳态将在对照组与实验组当中皆继续存在。
  3. 引入可映射真实世界情况的变量,包括服务器崩溃、硬盘驱动器故障以及网络连接中断等等。
  4. 尝试通过发现对照组与实验组之间的稳态差异反驳第 2 点中作出的假设。

破坏这种稳定状态的难度越大,我们对于系统运作效果的信心就越强。如果发现其中存在薄弱环节,我们则可将其设为改进目标,并抢在其对整体系统造成影响前加以解决。

进阶原则

以下原则阐述了一款理想化混沌工程应用程序,且适用于上述实验过程。对于以下原则的遵循程度则直接决定我们在规模化分布式系统当中能够建立的实际信心水平。

围绕稳态行为构建假设

专注于系统的可测量输出结果,而非系统的内部属性。在短时间内测量输出结果并将此作为系统稳态的代表。整体系统的数据吞吐量、错误率、延迟百分比等皆可作为稳态行为的关键性表示指标。通过关注实验中各系统行为模式,混沌工程能够验证系统是否正常工作——而无需尝试解析其工作原理。

各类现实世界事件

混沌变量应直接反映各类现实世界事件。利用潜在影响或者预估频率确定各事件的具体优先级。另外,您应考虑到各类与硬件故障相关之事件,包括服务器死机、错误响应等软件故障以及流量峰值或规模伸缩事件等非故障性状况。任何可能导致稳态中断的事件皆应被视为混沌实验当中的潜在变量。

在生产环境中运行实验

根据环境与流量模式的不同,系统运行效果亦将受到影响。由于运行效果可能随时改变,因此我们应将对实际流量进行采样作为获取可靠请求路径的惟一方法。为了保证系统运行方式的真实性以及同现有部署系统间的关联性,混沌工程原则强烈建议您直接面向生产流量进行实验。

利用自动化实验机制实现持续运行

实验的手动运行工作属于劳动力密集型任务,因此难以长久持续。我们建议您采取自动化实验及持续运行方式。混沌工程能够将自动化系统引入系统之内,从而促进协调与分析工作的顺利进行。

尽可能缩小影响范围

在生产环境中进行实验可能给客户造成不必要的影响。尽管部分短期负面影响不可避免,但混沌工程师有责任亦有必要尽可能控制并减小实验引发的不良后果。

混沌工程是一类强大的实践,且正在改变着全球范围内一系列超大规模运营体系的设计与工程技术实现思路。尽管其它实践同样能够实现理想的速度与灵活性优势,但混沌工程专长于解决分布式系统内的系统性不确定因素。混沌理论能够为您建立起大规模快速创新的必要信心,并最终为客户提供高品质的使用体验。

感兴趣的朋友不妨点击此处加入混沌社区参与混沌原理探讨并了解其在谷歌公司中的实际应用。

查看英文原文 http://principlesofchaos.org/

2017-08-08 19:002583
用户头像

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

关注

评论

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

模块三:学生管理系统架构详细设计

柱林

NumPy之:多维数组中的线性代数

程序那些事

Python 数据分析 Numpy 程序那些事

未雨绸缪最好,亡羊补牢也行|靠谱点评

无量靠谱

架构实战营模块三作业

tt

架构实战营

深入浅出Node.js第一章阅读总结

Alex

JavaScript node.js

鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求

华为云开发者联盟

鸿蒙 定时器 OpenHarmony LiteOS-M 软件定时器

十大自动化测试工具,你在用哪些?

禅道项目管理

测试 自动化测试

技术人生第5篇——浅谈如何成为技术一号位?

阿里巴巴中间件

云计算 阿里云 云原生 中间件 技术人生

智汇华云 | Wireguard VPN 介绍与使用

华云数据

外包学生管理系统的架构文档

木云先森

架构实战营

Vue进阶(幺玖肆):keep-alive 实现页面缓存

No Silver Bullet

Vue 7月日更 keep-alive 动态组件

模块三作业

VE

架构实战营

如何用Camtasia给视频添加字幕?

淋雨

视频剪辑 Camtasia 录屏软件

抖音引流获客APP系统开发

获客I3O6O643Z97

抖音霸屏 抖音、快手获客系统

矿机矿池挖矿系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 PHA矿机挖矿

Load and preprocess images

毛显新

Python 深度学习 tensorflow 计算机视觉

带你探索CPU调度的奥秘

华为云开发者联盟

cpu 操作系统 工作负载 调度器 调度

架构实战营 - 模块 3 - 作业

Vincent

#架构实战营

架构实战营模块 3 作业

zlz

顶级高手改变模型|靠谱点评

无量靠谱

Vue进阶(幺捌陆):异步请求导致页面数据渲染错误问题解决

No Silver Bullet

Vue 异步请求 7月日更 $set

告别尴尬-找回MySQL数据库密码

龙眼果

MySQL

测评EasyRecovery的数据恢复效果与多种功能

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

模块3作业“学生管理系统”架构设计

王小森

【架构训练营】模块三作业

zclau

OPPO小布助手算法系统的探索、实践与思考

OPPO小布助手

人工智能 深度学习 对话 智能助手 智能对话

Tensorflow小技巧(一)

毛显新

Python tensorflow pandas

架构实战营 毕业设计

netspecial

架构实战营

模块三 作业

SAKIN

Python OpenCV 学习轻松点,复习一下模板匹配吧

梦想橡皮擦

Python 7月日更

悲剧!IDEA 突然找不到类了?

楼下小黑哥

Java 后端 IDEA

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
混沌工程原理解析_语言 & 开发_Chaos Engineering_InfoQ精选文章