混沌工程是在系统上进行实验的学科,目的是建立对系统承受生产中动荡条件的能力的信心。 大规模分布式软件系统的进步正在改变软件工程的游戏规则。作为一个行业,我们迅速采用提高开发灵活性和部署速度的做法。 我们称之为混沌工程。 实践中的混乱 为了专门解决大规模分布式系统的不确定性,混沌工程可以被认为是促进实验以发现系统弱点。 高级原理 以下原理描述了混沌工程的理想应用,应用于上述实验过程。遵循这些原则的程度与我们对大规模分布式系统的信心密切相关。 围绕稳态行为建立假设 关注系统的可测量输出,而不是系统的内部属性。 混沌工程将自动化构建到系统中,以驱动编排和分析。 最小化爆炸半径 在生产中进行试验有可能导致不必要的客户痛苦。 虽然必须考虑一些短期的负面影响,但混沌工程师有责任和义务确保将实验的后果最小化并加以控制。 混沌工程是一种强大的实践,它已经改变了世界上一些最大规模运营中软件的设计和工程方式。
我们从首份混沌工程状态报告中看到了同样的相似之处:表现最好的混沌工程团队拥有四个 9 的可用性,MTTR 不到一小时。 Gremlin 举办了有史以来规模最大的混沌工程活动,有超过 3,500 名注册者。 Github 拥有超过 200 个混沌工程相关项目,拥有 16K+ 星。 Chaos Engineering today 混沌工程正变得越来越流行和改进:60% 的受访者表示他们已经运行过混沌工程攻击。 使用混沌工程后,你体验到了什么好处? 采用/扩展混沌工程的最大障碍是什么?
什么是混沌工程? 混沌工程让您可以将您认为会发生的事情与系统中实际发生的事情进行比较。 您实际上是“故意破坏”以学习如何构建更具弹性的系统。 最终,混沌工程的目标是增强我们系统的稳定性和弹性。 混沌与可靠性工程技术作为构建可靠应用程序的基本学科正迅速获得关注。 在过去的几年里,许多组织——无论大小——都接受了混沌工程。 图片 混沌工程如何帮助测试发展? 这在生产中是安全的,因为服务的其他实例正在处理客户需求;甚至没有人能说我们正在做混沌工程。 混沌工程是在当今复杂的现实中发现系统性问题的唯一方法,无论我们是否使用金丝雀部署。 混沌工程入门 我们首先设计了一个小型混沌实验,其规模远小于我们认为可能造成麻烦的规模。接下来,我们限制爆炸半径和真正的潜在危害,以便在进行混沌测试时保证系统和数据的安全。
现在我已经通过 Tech Talks 完成了几次,包括一些开发人员体验工作,一些云采用工作,我在内部被问到,当我们围绕诸如此类的事情建立新社区时,你如何建立社区现场可靠性工程。我们将如何做到这一点?
混沌工程简介 混沌工程师一门新兴的技术学科,它的初衷是通过实验性的方法,让人们建立复杂分布式系统能够在生产中抵御事件能力的信息。 混沌工程,重在实验,不同于测试。混沌工程,是发现新信息的实践过程;测试,只能让我们通过最终呈现得知这个结果是否我们预期的,要么正确,要么错误。 如果你准备开始使用混沌工程,最起码要保证你的系统已知的问题都已被解决了。混沌工程,是用来暴露生产系统中那些未知的、脆弱的环节。同时我们还要搭配一套监控系统来观察和判断系统当下的各项指标状态。 我们从混沌工程试验的基本设计方法到高级原则来深入了解它。在真正实施混沌工程的大规模系统上,遵循的原则越全面,你面对系统弹性的信心就越足。 总结 以上内容主要是根据电子工业出版社的《混沌工程 Netflix 系统稳定性之道》一书进行整理,希望大家可以通过阅读此文对“混沌工程”的基本理念和使用原则有一个初步的认知。
1 什么是混沌GameDay? GameDay在混沌工程中可以理解为一次有计划的演练实践活动,可以持续一天,也可以持续几个小时,也可以持续几天,持续时间根据具体的目标而定。 混沌GameDay的最终目的是按照一定的规划,有序地对目标系统进行混沌演练,收集演练实验证据,以此来验证混沌工程稳态假说。 2 GameDay的准备 只要能对目标系统进行有计划的混沌演练的活动,并能收集到相关证据,都可以称为一次成功的混沌GameDay。您也可以按照如下步骤进行游戏的准备工作。 2.1 选择稳态假说 一次成功的GameDay必须要有至少一个明确的验证目标,即混沌工程稳态假说。一个稳态假说往往包含但不限于以下几点内容。 腾讯云的混沌工程 腾讯云混沌演练平台(CFG)也正是基于上述背景而诞生,汇集各行业成功案例和最佳实践,提供宝贵经验,提供模拟IaaS、PaaS、SaaS近百种故障注入场景。
Kubernetes 的混沌工程平台。 Chaos Mesh 是云原生计算基金会 (CNCF) 托管的项目。它是一个云原生混沌工程平台,可在 Kubernetes 环境中编排混沌。 在当前阶段,它具有以下组件: Chaos Operator:混沌编排的核心组件。完全开源。 Chaos Dashboard:用于管理、设计、监控混沌实验的 Web UI。 请参阅以下演示视频,快速了解 Chaos Mesh: Chaos Operator Chaos Operator 以可管理的方式将混沌注入应用程序和 Kubernetes 基础设施,为混沌实验和自动编排提供简单的自定义定义 How SpiceDB uses Chaos Mesh to verify protection ByteDance 字节跳动自主研发的混沌工程平台主要用于公司自有技术体系。 由于涉及到云原生部署服务,字节跳动集成了Chaos Mesh作为底层故障注入引擎,是对字节跳动混沌工程平台的重要补充。 To be added.
公司新成立了一个稳定性团队,20年的重要目标之一就是开展混沌工程。为了后续更好的开展工作,记录关于“混沌工程”相关的知识以及工程实践。 Monkey-Ops:Go语言实现,可在OpenShift V3.X上部署并在其中生成混沌工程实验。可随机停止OpenShift组件。 ChaosBlade:阿里开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,是内部MonkeyKing对外开源的项目,结合了阿里各业务的最佳创意和实践。 我们需要在异常触发之前,尽可能地去筛选出会导致出现有异常问题的、容易造成故障的、系统中明显裂痕的环节,这也是混沌工程所肩负的意义。 2、混沌工程解决什么问题? 生产环境下,分布式系统在面对失控条件时是否具备较强的“可观测性”和故障恢复能力。 3、开展混沌工程要考虑的维度有哪些?
公司新成立了一个稳定性团队,20年的重要目标之一就是开展混沌工程。为了后续更好的开展工作,记录关于“混沌工程”相关的知识以及工程实践。 Monkey-Ops:Go语言实现,可在OpenShift V3.X上部署并在其中生成混沌工程实验。可随机停止OpenShift组件。 ChaosBlade:阿里开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,是内部MonkeyKing对外开源的项目,结合了阿里各业务的最佳创意和实践。 我们需要在异常触发之前,尽可能地去筛选出会导致出现有异常问题的、容易造成故障的、系统中明显裂痕的环节,这也是混沌工程所肩负的意义。 2、混沌工程解决什么问题? 生产环境下,分布式系统在面对失控条件时是否具备较强的“可观测性”和故障恢复能力。 3、开展混沌工程要考虑的维度有哪些?
混沌工程的核心需要解决的是模拟现实中可能会出现的不可预知的情况以及本身客观存在的情况,比如网络故障,云服务器大面积出现瘫痪等情况了,那么在这种情况发生后,如何能够使用成熟的技术方案保障产品的可用性以及保存数据的完整性 所以首先需要明确的是混沌工程的思想它是科学实验的方法论,所有的一切都是在系统实验的基础上来寻求系统的平衡性。 它的具体定义是:“混沌工程是一门在系统上进行实验的科学,目的是建立系统抵御生产环境中失控情况的能力以及信心”。 所以在公司如果需要开展混沌工程,需要遵守混沌工程的五大原则,这些原则具体为: 首先要定义系统的边界 引入现实世界的真实案例事件。比如数据库超时,内存泄露,网络故障等 在生产环境中运行。 通过混沌工程的实践方式,也是能够寻找出系统中可能设计不合理的地方,然后针对这些地方来进行具体的调整和程序的优化,当然它是一个持续推进的过程,很难说一步到位。
,无需新增场景时再做平台开发,使混沌平台更加专注于混沌工程其他部分。 混沌工程平台。 平台托管主流的混沌实验工具,实现工具自动化的部署,通过统一的操作页面实现混沌工程实施。 下面通过平台的功能特点、架构设计及使用案例来介绍混沌工程平台 chaosblade-box。 4 未来规划 1、chaosblade ChaosBlade 未来以云原生为基础,提供面向多集群、多环境、多语言的混沌工程平台和混沌工程实验工具。 同时简化混沌工程工具部署实施方面,后续会托管更多的混沌实验工具和兼容主流的平台,实现场景推荐,提供业务、系统监控集成,输出实验报告,在易用的基础上完成混沌工程操作闭环。
混沌工程定位很多人都会把混沌工程和测试区分不清楚,我从执行时机、执行后是否对系统产生新认知,做了一张图如下。 图片混沌工程工具系列传送门: 1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云 2、 混沌工程工具:chaos-mesh注入项原理分析 (2)-腾讯云开发者社区-腾讯云 3、 混沌工程工具:chaosblade在服务器上注入项原理分析(3)-腾讯云开发者社区-腾讯云 4、 混沌工程工具:业务代码注入原理(4)-腾讯云开发者社区-腾讯云 5、 混沌工程工具:Chaosblade Java业务代码注入原理(5)-腾讯云开发者社区-腾讯云 6、 混沌工程工具:混沌工程实施过程及持久价值(7)-腾讯云开发者社区-腾讯云 7、 混沌工程工具 :混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云 8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云混沌工程原则解读及选择原则混沌工程高级原则,是国外混沌工程专家一起整理的实践指南
混沌工程和混沌实验带来了可控的混沌,因此我们可以摆脱这些类型的事件。 什么是混沌工程? 混沌工程是故意将故障注入系统以衡量弹性的科学。 由于可能会影响广泛的基础设施,混沌工程的用户和从业者几乎可以是支持应用程序/基础设施堆栈的任何人。 谁使用混沌工程? 由于混沌工程涉及广泛的技术和决策,混沌工程实验可能有多个利益相关者。 这正是混沌工程正在解决的问题。混沌工程实验的结果随后被用于创建一个更具弹性的系统。 混沌工程原理 《混沌工程原理》是一篇出色的宣言,描述了混沌工程的主要目标和原则。 在实施混沌工程实验时,实施混沌工程的原则会导致一些设计注意事项和最佳实践。 混沌工程最佳实践 在实施混沌工程或任何测试时,有三个支柱。 今天,不乏工具和平台来帮助您实现混沌工程目标。 混沌工程工具 围绕混沌工程有很多进步和工具。很棒的资源列表是 Awesome Chaos Engineering 列表。
混沌工程的诞生 从客观来看,类似的问题我们有的可以提前预知到,有的确实完全无法避免(比如自然灾害导致机房不可用等因素)。 在这方面,Netflix首先提出了Chaos Monkey(在系统中捣乱的”混沌猴子“)来对目标系统进行随机的宕机测试,评估系统在可用性,容错性等方面的韧性边界,“混沌工程”由此诞生。 如何开展混沌工程实验 腾讯云混沌演练平台(CFG),为您提供安全、易用的的故障注入服务,助您打造稳固如磐石的云架构系统。 无论您是独立开发者、运维工程师还是安全专家,腾讯云混沌演练平台都是您不可或缺的利器: 我们拥有丰富的故障动作库,能够模拟IaaS、PaaS、SaaS近百种故障注入场景,可视化的动作编排,让小白也能快速入门 马上免费试用腾讯云混沌演练平台,体验一场真实的混沌工程实验吧! 点击链接,立即了解更多关于腾讯云混沌演练平台的信息,一起开启稳定性建设的新篇章!
混沌工程旨在帮助建立对系统在面对各种复杂的故障状况下的信心,帮助发现系统薄弱点。一种操作方法是直接引入各种混乱状况,比如破坏网络、引入延迟等,然后看看哪里会崩溃。 然而混沌工程是一种科学的稳定性建设方案,目的是发现系统薄弱点,而非简单的测试工程。1 何为稳态假说? 里面的假说都可以作为混沌工程实验的目标假说,开展混沌工程实验。如何从稳态假说集中选出待办集,可以从故障发生概率以及故障对系统的影响两个维度进行分析。 腾讯云的混沌工程腾讯云混沌演练平台(CFG)也正是基于上述背景而诞生,汇集各行业成功案例和最佳实践,提供宝贵经验,提供模拟IaaS、PaaS、SaaS近百种故障注入场景。
混沌工程 混沌工程(Chaos Engineering),不难理解,最初由 Netflix 提出的想从根本上去改变人们对软件系统缺陷和出现故障的不同视角和思维方式。 而混沌工程却是我们想要的这一朵奇花,它能帮助我们获取更多、更接地气的认知维度在系统中如何采用新视角去进行实验。 混沌工程,还可看作一门改善、改进复杂系统工程的学科。 拒绝盲目开展实施混沌工程。 回到上面的解释中,可以知道混沌工程其实更推荐使用在用于暴露生产系统中未知的隐患环节。如果说,你明知道它有问题,你还使用混沌工程的话,将毫无意义。 这里的不足,刚好给混沌工程一个光明的未来。混沌工程通过适时地验证系统弹性,拿到反馈之后,我们可以更好去快速开发新的功能和更多新的实验,让我们整个团队对系统会有更轻松、高效地状态凝聚一起。 在混沌工程中,可以通过一些方式、工具来让潜在的问题、效应浮出水面。我们应要心怀敬畏,前面虽然充满各种未知、也有可能是我们认知之外的东西,不过有混沌工程的陪伴,我们一样能奋力前行。
背景 通过前面对混沌工程工具的详细分析,我们已经对如何进行故障注入有了更明晰的了解。然而,本文将详细介绍混沌工程的具体实施过程,以便提供全面的指导。 混沌工程工具系列传送门: 1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1) 2、 混沌工程工具:chaos-mesh注入项原理分析(2) 3、 混沌工程工具 :chaosblade在服务器上注入项原理分析(3) 4、 混沌工程工具:业务代码注入原理(4) 5、 混沌工程工具:Chaosblade Java业务代码注入原理(5) 6、 混沌工程工具 :混沌工程实施过程及持久价值(7) 7、 混沌工程工具:混沌工程定位及原则梳理(8) 8、 混沌工程工具:一个混沌工程设计的例子(9) 混沌工程实施过程 实施过程 一次完整的实验包括实施前准备、 最终提升混沌工程的覆盖度、影响力 混沌工程的持久价值 确保灾备计划的有效性性。
1 为什么需要混沌工程 其实落地混沌工程的原因很简单,业务和技术的复杂性提升带来的不可控风险和成本越来越高。 而混沌工程的出现,就是赋予系统在面对失控条件时具备较强的“可观测性”和故障恢复能力。2 混沌工程面临哪些挑战 谈落地混沌工程之前,先了解一下关于混沌工程的定义和目的。 落地混沌工程也要面临这些挑战:系统上线这么久,都很稳定,有必要实施混沌工程吗?除了注入故障观察系统表现,还有其他明显的有价值的产出吗? 3 企业如何落地混沌工程 实施混沌工程需要遵守一些经典原则,主要有如下几点:建立稳定状态的假设(制定合适的目标)多样化现实世界事件(选择合适的场景)在生产环境运行实验(在真实环境运行实验)持续自动化运行实验 4 混沌工程的建设演进之路 混沌工程不仅可以提升线上系统的稳定性,还能为业务运营持续提升支撑,同时也可以提升团队的组织协作能力。下面两幅图是阿里和字节的混沌工程演练体系和最佳实践。
混沌工程的起源与发展 混沌工程的概念最早由 Netflix 在 2011 年提出,目的是通过在生产环境中主动引入故障,验证系统的弹性和可靠性。 正所谓“未雨绸缪”,这些公司通过混沌工程提前发现并修复了系统中的潜在问题,避免了“亡羊补牢”的尴尬局面。 行业对混沌工程的常见误解 混沌工程就是制造混乱。许多人认为混沌工程就是胡乱破坏系统,制造麻烦。 实际上,混沌工程是通过可控、科学的方式进行故障注入,帮助团队提前发现问题。正所谓“知己知彼,百战不殆”,混沌工程的目的就是让团队更好地了解系统的脆弱点。 混沌工程能找到所有问题。 只有大公司才需要混沌工程。事实上,任何有高可用需求的公司都可以从混沌工程中受益,哪怕是小团队,只要业务依赖分布式架构,混沌工程都能带来价值。 行业标准化:随着混沌工程的普及,可能会形成行业标准,推动最佳实践落地。正所谓“无规矩不成方圆”,行业标准化有助于推动混沌工程的进一步发展。
我们称之为混沌工程。 混沌工程实践 为了具体地解决分布式系统在规模上的不确定性,可以把混沌工程看作是为了揭示系统弱点而进行的实验。 通过在实验中的系统性行为模式上的关注, 混沌工程验证了系统是否正常工作, 而不是试图验证它是如何工作的。 多样化真实世界的事件 混沌变量反映了现实世界中的事件。 为了保证系统执行方式的真实性与当前部署系统的相关性, 混沌工程强烈推荐直接采用生产环境流量进行实验。 混沌工程是一个强大的实践, 它已经在世界上一些规模最大的业务系统上改变了软件是如何设计和工程化的。 相较于其他方法解决了速度和灵活性, 混沌工程专门处理这些分布式系统中的系统不确定性。 混沌工程的原则为我们大规模的创新和给予客户他们应得的高质量的体验提供了信心。 欢迎加入混沌社区的 Google 讨论组和我们一起讨论这些原则的应用。