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

混沌工程_Netflix正在搞的混沌工程到底是什么?终于有人讲明白了

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Netflix正在搞的混沌工程到底是什么?终于有人讲明白了相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Netflix正在搞的混沌工程到底是什么?终于有人讲明白了相关的知识,希望对你有一定的参考价值。







导读:与任何新概念一样,混沌工程时常被误解。本文会探讨混沌工程是什么以及不是什么。


作者:Casey Rosenthal, Nora Jones


来源:大数据DT(ID:hzdashuju)



在Netflix的混沌工程实践之初,大家实际上并不明确这门学科究竟是什么。关于如何让服务更可靠存在着许多误解。比如那时经常听到这样一些口号——拔掉电缆、在生产环境搞破坏或在生产环境进行测试。另外,也几乎不存在混沌工程实际工具的例子。


Netflix成立混沌工程团队就是要创建一门有意义的学科。该学科能够借助工具主动提高可靠性。我们花了几个月的时间研究韧性工程和其他学科,并提出混沌工程的定义和蓝图以造福他人。


混沌工程的定义已经以宣言的形式上线,称为“混沌工程原则”。


https://principlesofchaos.org


01 混沌工程是什么


混沌工程原则定义了混沌工程学科,以便大家了解何时该进行、该如何进行以及该如何做好混沌工程。如今,混沌工程的通用定义是“促进发现系统弱点的实验”。混沌工程原则的网站概述了如下实验步骤:


  1. 首先定义“稳态”(steady state,稳定状态),以表示系统正常行为的某些可测量的输出。

  2. 建立如下假说—对照组和实验组都将持续这种稳态。

  3. 引入反映真实事件的变量,例如崩溃的服务器、发生故障的硬盘驱动器、断开的网络连接等。

  4. 试图通过在对照组和实验组之间寻找稳态差异来推翻这一假说。


该实验构成了混沌工程的基本原则,并为实验的实施提供了很大的自由度。


1. 实验与测试


在Netflix,我们发现首先必须要做出的澄清是,混沌工程是一种实验而非测试。可以说,“质量保证”涵盖了两者,但该词在软件行业通常具有负面含义。


最初,Netflix的某些团队会问混沌工程团队:“难道你们就不能编写一堆集成测试来发现同样的问题吗?”从理论上讲,这种观点是务实的。但实际上,不可能从集成测试中获得理想的结果。


严格来说,测试不会创造新知识。测试要求编写测试的工程师知道要验证的系统的特定属性。复杂系统对于这种类型的分析是不透明的。对于复杂系统中各个部件所有的潜在相互作用所带来的所有潜在副作用,人类根本就无法理解。这使我们得出了测试的下述关键特性。


测试会根据现有知识做出一个断言,然后执行测试,并给出该断言的结果(通常为真或假)。测试是关于系统已知属性的声明。


另一方面,实验创造了新知识。实验提出了一个假说,只要假说不被推翻,对该假说的信心就会增强。而如果假说被推翻了,那就会学到一些新东西。这就能启动一个调查,以弄清楚假说为什么是错的。


在复杂系统中所发生的事情的原因通常都不会是显而易见的。实验可以建立信心,也可以让我们学到系统的新属性。这是对未知的探索。


因为测试需要有人提前提出断言,所以仅凭测试是无法取得通过实验而收获的洞察的。实验引入了一种发现新属性的正规方法。而当发现了系统的新属性后,完全可以将其转换为测试。


实验还有助于将有关系统的新设想编码为新的假说,从而创建类似“回归实验”的实践,以便随着时间的推移而对系统做进一步探索。


由于混沌工程诞生于应对复杂系统问题,因此该学科必须体现实验性而非测试性。



2. 验证与清查


在运维管理和物流规划领域,验证(verification)和清查(validation)的定义是不同的。而混沌工程更偏重于验证。


  • 验证


复杂系统的验证是在系统边界分析输出的过程。比如房主可以通过测试水槽(系统边界)中的污染物,来验证水(输出)的质量,而无须了解管道或市政供水系统(系统部件)的功能。


  • 清查


复杂系统的清查是分析系统的各个部件并建立反映部件之间的相互作用的思维模型的过程。房主可以通过检查所有管道和基础设施(系统部件)来清查水质。这些管道和基础设施会采集、清洁和输送水(功能部件的思维模型),并将水输送到居民区中的千家万户。


这两种做法都是有用的,并且都可以建立对系统输出的信心。作为软件工程师,我们经常会偏向于强迫自己去深入研究代码,并验证代码是否反映了我们关于代码应如何工作的思维模型。与这种偏好相反,混沌工程极力主张进行验证而不是清查。混沌工程所关心的是某事是否有效,而不是如何工作。


请注意,在上面有关管道的隐喻中,虽然可以清查用于提供清洁饮用水的所有组件,但由于某些未曾想到的原因,最终水龙头里流出来的仍是被污染的水。在复杂系统中总是存在不可预测的交互。但是,如果验证水龙头流出的水是干净的,那么就不必操心水是如何来的。


在大多数业务案例中,比起考虑系统的实现是否符合我们的思维模型,系统的输出要重要得多。混沌工程更关心业务和输出,而不是正在互动的各个部件的实现或思维模型。



02 混沌工程不是什么


有两个概念经常和混沌工程混淆——在生产环境中搞破坏和反脆弱。


1. 在生产环境中搞破坏


在博客文章或会议演讲中,人们时常会将混沌工程描述为“在生产环境中搞破坏”。对于能从混沌工程中获益良多的大型企业以及其他复杂系统的运营者来说,尽管这句话听起来很酷,但对他们并没有吸引力。


有关混沌工程的一个更好的说法是:修复生产环境中的漏洞。 “搞破坏”很容易,但完成下述事情很难:减小爆炸半径,对安全性进行批判性思考,确定漏洞是否值得修复,决定是否应该进行实验,等等。


“搞破坏”可以用无数的方式来完成,且花费的时间也很少。但更大的问题是,在不知道系统部件已被破坏的情况下,该如何推测出哪些部件已经被破坏?


“修复生产环境中的漏洞”能更好地体现混沌工程的价值,因为整个混沌工程实践的重点是主动提高复杂系统的可用性和安全性。现在已经有很多对事故做出应急反应的学科和工具,比如告警工具、事故响应管理、可观测性工具、灾难恢复计划等。其目的是当事故发生后能缩短检测时间和修复时间。


有人可能会说,SRE(Site Reliability Engineering,网站可靠性工程)是一门兼具被动性和主动性的学科,可以通过从过去的事故中获得知识,并将知识进行社交化来防止将来发生类似的事故。而混沌工程是软件行业中唯一专注于主动提高复杂系统安全性的学科。


2. 反脆弱


熟悉纳西姆·塔勒布(Nassim Taleb)所提出的反脆弱性概念的人,经常会认为混沌工程本质上是反脆弱的软件版。塔勒布认为,诸如“低剂量毒物兴奋效应”之类的词,已不足以表达复杂系统的适应能力。因此他发明了“反脆弱”一词,指系统当受到随机压力时能变得更强的特性。


混沌工程和反脆弱之间一个重要的关键区别是混沌工程能教育系统维护人员,让他们认识到混沌为系统所固有,从而使他们成为一支更具韧性的团队。而相比之下,反脆弱却给系统加入混沌,并希望系统在响应混沌时能变得更强大,而不是屈服于混沌。


作为框架,反脆弱的观点与学术界所研究的韧性工程、人因学和安全系统都不一致。例如对于提高系统健壮性而言,反脆弱建议的第一步是寻找并消除弱点。这项建议看似直观,但韧性工程告诉我们,对于安全性而言,寻找做对的地方要比寻找做错的地方提供的信息要多得多。


反脆弱的下一步是添加冗余。这似乎也很直观,但是添加冗余既可以缓解故障,也可以导致故障。在有关韧性工程的文献中有众多冗余所导致的安全性故障案例。


这两种思想流派之间还存在许多其他分歧。韧性工程是一个有着数十年历史,并正不断发展的研究领域。而反脆弱则游离于学术界之外,且缺乏同行评审。因为两者都是要应对混沌和复杂系统,所以很容易就产生两者可以融合在一起的感觉。


但反脆弱实际上并不具备混沌工程所拥有的经验主义和理论基础。由此,两者在根本追求上就已分道扬镳。


关于作者:Casey Rosenthal,Verica公司的首席执行官兼联合创始人。他曾是Netflix公司混沌工程团队的工程经理,在使用分布式系统、人工智能以及将新颖的算法和学术界知识转化为能落地的模型方面拥有丰富的经验。


Nora Jones,Jeli公司的首席执行官兼联合创始人。她是一位敬业且充满自驱力的技术领导者和软件工程师,对分布式系统中人与软件的协同工作充满热情。她在2017年AWS re:Invent大会的主题演讲中为混沌工程运动的发起做出了贡献。


本文摘编自《混沌工程:复杂系统韧性实现之道》,经出版方授权发布。



延伸阅读《混沌工程:复杂系统韧性实现之道》


点击上图了解及购买


转载请联系微信:DoctorData


推荐语:混沌工程开创者撰写,通过谷歌、微软等行业专家的真实故事,系统阐释混沌工程的核心实践,提供实践建议。



划重点????


干货直达????


  • 终于有人把用户画像的流程、方法讲明白了

  • 终于有人把数据安全讲明白了

  • 35岁的程序员,真的要转管理吗?

  • 数据中台、标签、数据资产相关的15个名词解释


更多精彩????


在公众号对话框输入以下关键词


查看更多优质内容!


PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作


大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化


AI | 人工智能 | 机器学习 | 深度学习 | NLP


5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生


据统计,99%的大咖都关注了这个公众号


????





推荐阅读
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
author-avatar
超级娱乐测试_499
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有