混沌工程(Chaos Engineering)是什么,你一定听说过那只捣乱猴子的故事(如图1),今天我们来聊聊。

图1“捣乱”的猴子

有没有这种感觉,当你写下第一行代码的时候,后面等着你的就是不断和系统中的各种错误做斗争?年纪大了,老是害怕在平时的工作中出各种各样五颜六色的问题,一出问题就整宿的加班通宵,熬到六亲不认,枸杞当饭吃。就好像写的代码会跳出来嘲讽你一样:百因必有果,你的报应就是我。

那如果想要减少问题,只能让问题更多频次地暴露出来,然后各种揪头发,通过不断地重演,找到具体的问题并干掉它。琢磨可靠的解决方案,持续提升系统的容错灾备能力和弹性空间。

在最近几年,很多公司的系统架构逐渐向微服务架构演化,这对系统的扩展性要求更高了,同时也造成系统的复杂度急剧上升,导致系统的不确定性也随之增长。假如我们要进行如下的这些线上实验:模拟整个机房IDC宕机、选择一部分网络连连接注入特定时间的延迟、随机让一些函数抛出异常、强制 NTP 时间不同步、生成网络或者磁盘 IO 错误、榨干机器资源(比如CPU、内存等)等,这些试验到底会有什么样的结果,有些我们可以预料,但有些可能我们无法预料,这时候,你需要了解“混沌工程”。

1. 混沌工程

混沌工程(Chaos Engineering),不难理解,最初由 Netflix 提出的想从根本上去改变人们对软件系统缺陷和出现故障的不同视角和思维方式。它希望我们不要逃离现实,需要遵循自然发展的规律去看待现实中的问题。

就好比你们家孩子,到了读中学时,百分百会出现叛逆,那你首先需要的是正确去看待一个孩子的成长,知道这是必然的,然后给予更多的关怀和疏导,不断调整自己的教育方式,而不是一味地打压或者求神拜佛让菩萨保佑他/她不要叛逆。

混沌工程亦可理解为一套基于在原有系统基础设施上去进行反复试错,最终找出系统中存在风险的方法学。由于开发者的能力和认知水平也有边界,不可能所有的细节都可以预估到,系统很脆弱,各种潜在不可预期的突发事件在所难免,我们需要在异常触发之前,尽可能地去筛选出会导致出现有异常问题的、容易造成故障的、系统中明显裂痕的环节。然后进行及时修复、加固和防患于未然,才能打造更具弹性的软件工程系统。

混沌工程是软件测试吗?

测试只能让我们通过最终呈现得知这个结果是否我们预期的,要么正确,要么错误。它不能让我们去探求一些新的未知方向,或者蹦出一些我们始料未及的惊喜。而混沌工程却是我们想要的这一朵奇花,它能帮助我们获取更多、更接地气的认知维度在系统中如何采用新视角去进行实验。

混沌工程,还可看作一门改善、改进复杂系统工程的学科。

很多行业都在不断挖掘其立足点,包括了医疗、保险、金融、农业、航天航空制造等等领域,都是非常值得期待的。

拒绝盲目开展实施混沌工程。

回到上面的解释中,可以知道混沌工程其实更推荐使用在用于暴露生产系统中未知的隐患环节。如果说,你明知道它有问题,你还使用混沌工程的话,将毫无意义。所以,我们有一个前提:你的系统需要具备一定的弹性来面对现实中的一些异常情况,比如服务器异常、网络抖动闪断或流量激增等等。

2. 应对复杂场景

一般我们在系统优化工作上,都会针对性能提升、高可用性和容错能力这三点。但有时候,我们又非常期待高效的新功能开发速度。在架构选型过程中,需要综合考虑到各方面,找到平衡支点。

比如,现在大家喜欢用的微服务架构,确实是方便了小团队之间的松散耦合协作,但需要更高成本的有效沟通为代价。微服务相对提升了开发速度和灵活性,但某种程度上削弱了我们对系统的可掌控度和可理解度。

这里的不足,刚好给混沌工程一个光明的未来。混沌工程通过适时地验证系统弹性,拿到反馈之后,我们可以更好去快速开发新的功能和更多新的实验,让我们整个团队对系统会有更轻松、高效地状态凝聚一起。

很多系统都是慢慢从简单到复杂的,从单一的服务中你也许找不到具体问题,因为它们看起来都是非常合理的,只有在某些特殊的情景下组合起来之后,才会暴露我们意想不到的问题,非我们可以预测的,就跟预测地震一样,很难。在混沌工程中,可以通过一些方式、工具来让潜在的问题、效应浮出水面。我们应要心怀敬畏,前面虽然充满各种未知、也有可能是我们认知之外的东西,不过有混沌工程的陪伴,我们一样能奋力前行。

阿里资深架构师:初识混沌工程(上)相关推荐

  1. 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看)

    导读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下 ...

  2. 你和阿里资深架构师之间,差的不仅仅是年龄(进阶必看) 1

    读:阅读本文需要有足够的时间,笔者会由浅到深带你一步一步了解一个资深架构师所要掌握的各类知识点,你也可以按照文章中所列的知识体系对比自身,对自己进行查漏补缺,觉得本文对你有帮助的话,可以点赞关注一下. ...

  3. 阿里资深软件测试工程师推荐—混沌工程(Chaos Engineering)初识

    Chaos Engineering is the discipline of experimenting on a distributed system in order to build confi ...

  4. Russ Miles:被忽略的架构师和混沌工程

    在最近于阿姆斯特丹举行的事件驱动微服务大会上,Russ Miles声称,架构师面临的最大挑战是自身被忽视.你有很多很好的想法,比如事件驱动的微服务,但通常的反应是,这些主意听起来不错,但是对于手头要解 ...

  5. 十年阿里资深架构师教你如何做到年薪50万的程序员(文末附送学习资料)

    写在开篇 不管是开发.测试.运维,每个技术人员心里都有一个成为技术大牛的梦,毕竟"梦想总是要有的,万一实现了呢"!正是对技术梦的追求,促使我们不断地努力和提升自己. 然而" ...

  6. 阿里资深架构师倾情力荐:Java 全线成长宝典,P5 到 P8 一应俱全

    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情.作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术 ...

  7. 阿里资深架构师倾情力荐:Java全线成长宝典,P5到P8一应俱全

    前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情.作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术 ...

  8. 阿里资深架构师整理2022年秋招最新面试题汇总:208页核心体系

    进大厂是大部分程序员的梦想,而进大厂的门槛也是比较高的,所以这里整理了一份阿里.美团.滴滴.头条等大厂面试大全其中概括的知识点有:Java基础.spring.springmvc.springboot. ...

  9. 阿里资深架构师推荐 -- 如果正确的开启领域驱动设计

    简介: 什么是领域驱动设计?传统分层架构在实际开发中存在哪些问题?业务开发人员如何设计并搭建自己的领域模型?阿里文娱技术专家战獒将为大家一一解答,并分享文娱在领域驱动设计上的实践. 一 什么是领域驱动 ...

最新文章

  1. (HDU)1091 --A+B for Input-Output Practice (III)(输入输出练习(III))
  2. 全球及中国手机便携式移动电源行业营销模式及投资竞争力分析报告2021-2027年版
  3. Batoo JPA –比领先的JPA提供商快15倍
  4. 1535C. Unstable String
  5. 请写一个java程序实现线程连接池功能_写一个java程序实现线程连接池的功能
  6. 中国移动全球通寻宝第四期攻略
  7. 大四学生发明文言文编程语言,设计思路清奇
  8. 企业微信消息推送脚本
  9. 分公司可以作为著作权人申请软件著作权登记证书么?
  10. 苹果手表GPS和蜂窝有什么区别
  11. 本福德法则 2位数_什么不遵循本福德定律
  12. 云计算成朝阳产业,未来发展已成趋势
  13. c++常用源代码以及常用库查找
  14. 斧乃木余接win10主题分享
  15. 《大话处理器》相关主题汇总
  16. 什么是TLB ?(转载)
  17. HttpClient请求范文示例,及注意点提示
  18. Docker学习笔记(更新中)
  19. C#:EXCEL版本与相应dll版本的对应关系
  20. 软件工程(1)--初识基础概念

热门文章

  1. 年产5000吨饼干食品加工厂的工艺设计
  2. 点睛挖雷 PSP 1.1 版(For 3.xx)
  3. python语句命令的概念_python学习笔记(一):基本概念
  4. 打开游戏时提示计算机缺失文件,电脑打不开系统显示缺失dll文件怎么办
  5. 爬采集浙江省市场主体杭州企业名录
  6. 企业的数字化管理有哪些特点?
  7. 自我介绍以及我的今后打算
  8. 2021腾讯内推面试
  9. 3Ds Max Design2009与PhotoshopCS4建筑设计经典案例指导视频教程
  10. [生活]记可爱的卖报小男孩