混沌工程:Netflix系统稳定性之道
每个软件从业者从写下第一行代码开始,就一刻不停地在和软件中的错误做斗争。
近年来,随着系统架构逐渐向微服务架构演化,开发效率以及系统扩展性大幅提高。但同时,系统的复杂性也随之提高,传统的测试方法已经不能全面理解和覆盖系统所有可能的行为,测试的有效性被大打折扣。我们通过各种测试、SRE、DevOps、金丝雀发布、蓝绿部署、预案、故障演练等方法,希望能够防患于未然。但服务规模不断增长,服务之间的依赖性所带来的不确定性也呈指数级增长。在这样的服务调用网中,任何一环出现的正常或异常的变化,都有可能对其他服务造成类似蝴蝶效应一般的影响。
软件系统自身复杂度的激增、开发者在引入复杂性的同时对风险的低估和忽视,是系统可用性面临的两大挑战。
为了应对这两大挑战,Netflix 选择了一条不同寻常的路。
2008年Netflix开始将服务从数据中心迁移到云上,之后就开始尝试在生产环境中开展一些系统弹性的测试。过了一段时间,这个实践过程才被称为混沌工程。最早被大家熟知的是“混乱猴子”(Chaos Monkey),因为其在生产环境中随机关闭服务节点而“恶名远扬”。进化成为“混乱金刚”(Chaos Kong)之后,这些之前获得的小规模益处被扩大到非常大。规模的扩大得益于一个叫作“故障注入测试”(Fault Injection Test,FIT)的工具。
随后确立了混沌工程的若干原则,用于将这个实践进行规范并学科化,同时推出了混沌工程自动化平台,使得混沌工程实验能够在微服务体系架构上7×24小时不间断地自动运行。
从混乱猴子开始,Netflix 为应对不确定性的领域带来了一种全新的思维方式——主动出击。这种主动出击的思维方式衍生出的一套实践方法,就是混沌工程,它旨在从根本上改变开发者应对软件缺陷和故障的思维方式。
在此之前,我们期望通过一系列的测试验证手段,尽最大的可能确保在线上运行的系统没有缺陷和故障。而混沌工程的理念认为这既不现实,也不符合系统自然发展的规律。混沌工程提倡我们首先要正面接受系统一定会存在缺陷,并且一定会时不时地发生故障的事实;然后,要求我们通过一系列实验找出可能发生问题的风险点,进而在不断加固系统的同时,促使开发者在开发软件时必须选择将防御性内建在系统中。
“混乱”一词让我们想起随机性和无序性。然而,这并不意味着混沌工程的实施也是随机和随意的,也不意味着混沌工程师的工作就是引发混乱。让系统在每一次失败中获益,然后不断进化,这是混沌工程的核心思想。
在实践中,混沌工程提倡用一系列实验来真实地验证系统在各类故障场景下的表现,通过频繁地进行大量实验,既使得系统本身的反脆弱性持续增强,也让开发者对系统越来越有信心。因为在每天自动运行的大量实验下,开发者不得不在编码时思考“我的代码如何在这些混沌实验场景下存活下来”,并逐步提高质量,形成正向循环。
混沌工程非常适合用于暴露生产系统中未知的脆弱环节,但如果你很确定一个混沌工程实验会导致系统出现严重的故障,那么进行这样的实验是没有任何意义的。你需要先解决这个问题,然后再回到混沌工程,在进行混沌工程实验之后,你要么能继续发现更多未知的脆弱点,要么能对系统真实的弹性水平更有信心。
另外,你需要用配套监控系统来判断系统当前的各项状态。如果无法对系统行为进行观察,你就无法从实验中得出有效的结论。
你可以将混沌工程视为一种解决“我们的系统离混乱边缘有多少距离”的经验方法。从另一个角度去思考,“如果我们把混乱注入系统,它会怎么样?”
减少问题的最好方法就是让问题经常性地发生,通过不断重复失败过程并找出解决方案,来持续提升系统的容错能力和弹性。混沌工程作为一门新兴学科,还处于一个定义和被定义的过程。如果你对混沌工程感兴趣,愿意去了解和实践混沌工程,非常推荐你从《混沌工程:Netflix系统稳定性之道》一书开始行动。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
微服务SpringCloud之Spring Cloud Config配置中心Git
微服务SpringCloud之Spring Cloud Config配置中心Git 微服务以单个接口为颗粒度,一个接口可能就是一个项目,如果每个项目都包含一个配置文件,一个系统可能有几十或上百个小项目组成,那配置文件也会有好多,对后续修改维护也是比较麻烦,就和前面的服务注册一样,服务注册与发现是将服务从分散到中心化,而今天的配置中心是将配置文件从分散到中心化,这样便于后续维护。本篇主要以git为例学习使用Spring Cloud Config配置中心。 一、配置中心介绍 在我们了解spring cloud config之前,我可以想想一个配置中心提供的核心功能应该有什么 提供服务端和客户端支持集中管理各环境的配置文件配置文件修改之后,可以快速的生效可以进行版本管理支持大的并发查询支持各种语言Spring Cloud Config可以完美的支持以上所有的需求。 Spring Cloud Config项目是一个解决分布式系统的配置管理方案。它包含了Client和Server两个部分,server提供配置文件的存储、以接口的形式将配置文件的内容提供出去,client通过接口获取数据、并依据此...
- 下一篇
一个项目的SpringCloud微服务改造过程
SSO是公司一个已经存在了若干年的项目,后端采用SpringMVC、MyBatis,数据库使用MySQL,前端展示使用Freemark。今年,我们对该项目进行了一次革命性的改进,改造成SpringCloud架构,并且把前后端分离,前端采用Vue框架。 一、使用SpringCloud架构进行改造 1.1 为什么使用SpringCloud SpringCloud的核心是SpringBoot,相比较于传统的Spring,SpringCloud具有以下优点: 部署简单,SpringBoot内置了Tomcat容器,可以将程序直接编译成一个jar,通过java-jar来运行。 编码简单,SpringBoot只需要在pom文件中添加一个starter-web依赖,即可帮助开发者快速启动一个web容器,非常方便。 配置简单,SpringBoot可以通过简单的
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8编译安装MySQL8.0.19