热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

混沌工程_混沌工程初识

篇首语:本文由编程笔记#小编为大家整理,主要介绍了混沌工程-初识相关的知识,希望对你有一定的参考价值。公司新成立了一个稳定性团队,20年的重要目标之一就是开

篇首语:本文由编程笔记#小编为大家整理,主要介绍了混沌工程-初识相关的知识,希望对你有一定的参考价值。


公司新成立了一个稳定性团队,20年的重要目标之一就是开展混沌工程。为了后续更好的开展工作,记录关于“混沌工程”相关的知识以及工程实践。

内容来源:《混沌工程:Netflix系统稳定性之道》摘录以及个人思考总结。。。。。。

概要

定义:主动发现系统中脆弱点的一整套方法论。

目的:如何让系统在不确定性中获益?

接受“系统越复杂,越脆弱”的事实,让系统在每一次失败中获益,然后不断进化。

在实践中,用一系列的实验来真实的验证系统在各类故障场景下的表现,通过频繁大量的实验,使得系统本身的“反脆弱性”持续增强,让组织建立对系统抵御生产环境中失控条件的能力以及信心。

初衷:通过实验性的方法,让人们建立复杂分布式系统能够在生产中抵御事件能力的信息。

出现:最早由Netflix的技术团队提出,现已经演变成计算机科学的一门新兴学科,即“混沌工程”。

现状:目前业内的认知和实践积累较少,但它实际上是一种提高技术架构弹性能力的复杂技术手段。

挑战:服务规模不断增长,服务间依赖带来的不确定性指数级增长。软件可用性面临两大挑战:

  1)自身复杂度激增;

  2)开发者引入复杂性的同时对风险的低估和忽视;

方法:通过一系列可控实验和执行实验原则,揭示出系统中随时发生的各类事件是如何逐步导致系统整体不可用的。

书籍:《混沌工程:Netflix系统稳定性之道》

技术图片

工具

Chaos Dingo:支持在Azure相关服务上进行实验。

Chaos-http-proxy:向http注入故障的代理服务工具。

Tugbot:可在基于docker的生产环境中进行测试的框架。

Chaos Lambda:办公期间可随机关闭AWS ASG节点的工具。

Blockade:基于docker,可测试网络故障和网络分区的工具。

Pumba:基于docker的混沌工程测试工具以及网络模拟工具。

Simoorg:LinkedIn开发的故障注入工具,以扩展,很多关键组件可插拔。

Chaos Lemur:测试高可用性系统弹性的工具,可本地部署,允许随机关闭BOSH虚拟机。

Monkey-Ops:Go语言实现,可在OpenShift V3.X上部署并在其中生成混沌工程实验。可随机停止OpenShift组件。

ChaosBlade:阿里开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,是内部MonkeyKing对外开源的项目,结合了阿里各业务的最佳创意和实践。

 

背景

由很多微服务组成的分布式系统中,永远难以全面掌握什么事件会导致系统局部不可用,甚至全面崩溃。主要因素:

1)系统架构演进:服务集群→分布式→微服务→容器化(K8S&docker)→上云;

2)版本迭代增速:CICD、敏捷、devops、ABtest;

3)用户需求变更:复杂化、多样化、快速化、小众化;

对系统的要求:扩展性、稳定性、弹性能力、容错灾备能力;

软件系统现状:系统复杂性提高、问题定位成本高;

要解决的问题:生产环境下的分布式系统在面对失控条件时依然具备较强的“可观测性”和故障恢复能力;

主要验证方式:故障注入;

开展“混沌工程”的意义

开发者的能力和认知水平有边界,不可能所有的细节都可以预估到,系统很脆弱,各种潜在不可预期的突发事件在所难免。

我们需要在异常触发之前,尽可能地去筛选出会导致出现有异常问题的、容易造成故障的、系统中明显裂痕的环节,这也是混沌工程所肩负的意义。

能让复杂系统中根深蒂固的混乱和不稳定性浮出水面,让我们更全面了解系统中固有的现象,然后进行及时修复、加固和防患于未然,才能打造更具弹性的软件工程系统。

 

思考

1、设计良好的系统,需要考虑哪些因素?

可靠性、安全性、可扩展性、可定制化、可伸缩性、可维护性、用户体验等。

2、混沌工程解决什么问题?

生产环境下,分布式系统在面对失控条件时是否具备较强的“可观测性”和故障恢复能力。

3、开展混沌工程要考虑的维度有哪些?

1)建立稳定状态的假设(清晰可衡量的指标)

2)用多样的生产事件做验证(多样性降低误差)

3)在生产环境做验证(真实场景)

4)自动化开展实验(持续运行)

5)控制最小化爆炸半径(影响范围)

4、Netflix开展混沌工程总结的三点经验

1)建立面向失败设计和拥抱失败的技术文化(技术文化)

  思想上,引入混沌工程的核心是通过引入一些风险去暴露已有的不易发现的问题,而不是创造问题。这样有助于问题的发现和处理,降低潜在故障带来的影响。

2)定义一个清晰可度量的目标(定义目标)

  前期:对历史故障的复现率以及解决率,确保故障改进的有效性;

  中期:监控发现率,验证故障发现能力的全面性和监控的完备程度;

  后期:故障的“发现-定位-恢复”市场这种综合性指标;

3)在控制风险的前提下不断提升混沌工程效率(技术推广)

  先从简单的场景开始尝试,逐渐增加组织对系统的信心(要明白准备工作比落地执行更重要)。

 

混沌工程是一种实践思想,方法论,本身不绑定任何工具或者技术。不过在进行推广和实施时,考虑到真实性、容错性、开发成本、运维效率等因素,建议复用成熟的开源组件或者商业化工具。

 


推荐阅读
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 都说Python处理速度慢,为何月活7亿的 Instagram依然在使用Python?
    点击“Python编程与实战”,选择“置顶公众号”第一时间获取Python技术干货!来自|简书作者|我爱学python链接|https:www.jian ... [详细]
author-avatar
靖惟嘉彦琼云
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有