怎么网站怎么建设框架,宝安最好的网站建设,wordpress数据库链接不上,oa系统排名这是鼎叔的第五十四篇原创文章。行业大牛和刚毕业的小白#xff0c;都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》#xff0c;大量原创思考文章陆续推出。混沌工程是一门新兴学科#xff0c;它不仅仅只是个技术活动#xff0c;还包含如何设计能够持续协作的…这是鼎叔的第五十四篇原创文章。行业大牛和刚毕业的小白都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》大量原创思考文章陆续推出。混沌工程是一门新兴学科它不仅仅只是个技术活动还包含如何设计能够持续协作的混沌实验。它由Neflix首先在实践中发现了混沌工程的商业价值通过构建更有韧性的系统来抵御海量组件系统的意外失效。本文还会聊聊混沌工程的概念澄清原则投资回报和成熟度模型。本文的内容参考了《混沌工程-复杂系统韧性实现之道》作者是Casey Rosenthal,Nora Jones。Neflix的混沌猴Neflix的高绩效文化体现在管理层和技术人员的有趣协作管理者不会告诉技术人员要做什么而是确保他们了解要解决什么问题并信任技术工程师让他们决定工作的完成方式。为了解决大型数据中心的实例无故消失问题工程师尝试了各种方法最终只有混沌猴这种方法保留下来。原理非常简单遍历集群列表从每个集群中随机选一个实例在每个工作日的某个时间点将其关闭且不会发出警告。工程师只有解决了问题才能进行其他工作不管是增加冗余还是增加自动化容量伸缩或是架构层面设计优化都带来了可观的成效。不幸的是随机性混沌注入方法在分布式系统上的效果都不好故障的组合空间巨大且并不孤立。随机方法也无法告诉我们实验的覆盖情况应该进行多长时间才能得出结论。替代随机搜索的方法就是利用系统专家的领域知识来推动实验探索利用之前实验观察形成新的假设并逐步完善。专家对故障注入进行筛选决定哪些实验不需要进行避免重复。专家还会决定实验的运行顺序尽可能提高知识增加的速度。专家也需要可观测的基础设施越丰富越好。混沌猴后来升级为混沌金刚使某个AWS区域关闭验证AWS区域性故障的解决方案大幅提升了组织内部对于故障的处理速度。后面即使发生多起停机事故混沌金刚使用的区域故障转移机制都发挥了作用。混沌工程由此被定义它是分布式系统上进行实验的学科目的是建立该系统能够承受生产环境的动荡条件的信心。不需要建立对系统的信心就不需要混沌工程。混沌工程通过提供可能超出“快乐路径”即系统构建的默认路径没有异常或错误情况的各种条件和变化参数来做到这一点。如今混沌工程已经形成了强大的专业社区。复杂系统混沌工程这门科学要寻找系统存在弱点的证据它们会隐藏在系统的本质复杂性中。复杂系统因为非线性导致不可预测必然会导致不良结果。系统内的部件所发生的变化会导致系统输出发生指数级变化。输出难以模拟或建模导致传统的探索系统安全性的方法不够充分。复杂系统中不同服务模块各自都有合理的设计决策和监控处理机制但仍然会出现难以意料的崩溃。比如场景一少量用户的消息异常不断重试可能导致服务降级进而触发更大范围的重试风暴导致服务不可用。场景二导入的程序库出现的内存泄漏可能会随着服务请求数量的增加而缓慢增长直到影响大量实例的错误率导致局部停机。面对复杂性人月神话聊聊没有35岁焦虑的《人月神话》将其分类为偶然复杂性和本质复杂性前者是在资源有限的项目中编写代码必然产生各种债务-代码劣化、含糊的契约、废弃的代码路径、不清晰的变量名等。编写软件和理解软件如何失效完全是两件不同的事情。没有可持续的方法来解决偶然复杂性甚至新系统会做得更加复杂。对于本质复杂性只要添加新功能就会增加。既然无法避免复杂性那就接纳它学会如何应对而混沌工程就是最有效可行的利器。推荐两个应对复杂系统的模型。一 动态安全模型这模型有三个属性经济性投入的成本工作量和安全性。工程师对成本和工作量有边界直觉但是对安全性缺乏直觉。安全事故通常都是意料之外的而工程师只会对能看到的地方进行优化。混沌工程就是培养工程师安全性直觉的进而默默地改进行为让系统更有韧性。二 经济支柱模型复杂性有四个经济支柱状态关系环境可逆性。一个研发组织控制某个支柱的程度能反映出组织应对竞争性生产过程的复杂性的成熟度。一个汽车大厂可以控制产品状态有限的款式关系上下游产业链的供货关系环境对外部法规的影响但没法控制可逆性汽车制造容易回退难。一个应用程序的功能状态大多不断在增加而无法简化。组件关系和人际关系都在复杂化。大多软件公司都没有影响环境的规模化能力。只有可逆性是软件团队可以大放异彩的支柱即不断修改完善软件。而混沌工程实验能够揭示系统哪些方面违背了“可逆性”。混沌工程的原则混沌工程的通用解释是“促进发现系统弱点的实验”分为四个步骤1 先定义“稳态”(steady state)系统行为正常时有哪些可以度量的输出。例如在XXXX情况下用户依然拥有良好的体验表现在XXX数据上。在XXX事件发生时技术人员会得到XXX提醒。2 建立假说对照组和实验组都会持续这种稳态。3 引入体现真实事件的变量。选择变量常见的误区是工程师的选择标准经常是容易执行的基于自身体验而不是用户体验的。有些“异常事件”在现实世界不太可能发生这就不是好的引入变量。4 通过在对照组和实验组之间寻找稳态差异来推翻假说混沌工程原则提供了五项高级实践及黄金标准建立稳态行为假说多样化引入现实世界的事件在生产环境实践持续运行自动化实验最小化爆炸半径。为了给真正关心的生产环境建立信息高级的混沌工程都在生产环境发生但是初始阶段先在准生产系统上实验也是有意义的。自动化提供了规模化搜索的方法比人手动操作能覆盖更多的实验集随着时间的推移能低成本地持续验证经验假设及时发现系统的变化。设计更安全的实验方法将对生产环境中用户流量的负面影响降到最低还带来加强信号检测效果的好处。聚焦用户体验是所有高级原则的基础。对混沌工程的常见误解一 实验和测试是不同的实验并不知道如何断言而是通过假说的验证或推翻来得到新知识。源于应对复杂系统问题所以混沌工程更多体现“未知的实验性”而非“已知的测试性”主张验证有效性而不是检查如何工作。二 混沌工程并非人们误解的“搞破坏”单纯搞破坏很难做到减小爆炸半径和漏洞的批判性思考。混沌工程最终的价值是修复生产环境的漏洞。三 很多人认为塔勒布的《反脆弱》理论和混沌工程在本质上是一样的。实际上两个流派分歧很多反脆弱缺乏软件工程学的同行评审和理论基础给出的解决手段如增加冗余可能会带来更多风险。反脆弱希望给系统引入混沌而混沌工程希望发现复杂系统的固有混沌。四 软件接口设计不规范等问题能否通过混沌工程来发现接口契约不匹配的协商解决是开发过程的一部分无需纳入混沌工程来解决这些已知属性问题最好通过软件测试解决。混沌实验主要为不确定的自动化行为提供信心它发现的BUG往往是多个细微逻辑错误的组合以及时间相关性故障。注意被选定实验的特定服务及其依赖服务如果存在已知的关键缺陷要先修复后再进行实验否则我们不能从实验中学到确定的新东西。混沌工程的投资回报“只有事故真的发生了才能有故事可讲。”-- John Allspaw混沌工程是一门务实的学科旨在为企业提供价值。但是如何证明混沌工程的回报是令人困惑的。系统可用性指标的上升是否应该归功于混沌工程实践呢混沌工程触发的改进倾向于给其他业务增加压力比如牺牲了发布速度那如何确定收益率呢Kirkpatrick模型提供了一种评估投资回报率的方法原本用于教学培训领域它把评估分解为四个递进的级别反应混沌工程示范对受训者有帮助是否支持维持或加大该实验学习证明并列举团队学到了什么转移把知识转化为实践发生了行为变化提高了协作效率提高了应急成熟度结果混沌工程的总成本与商业结果价值进行比较。每一级是否评价为积极就展示了对应的投资回报。混沌成熟度模型成熟度模型横轴是采用度纵轴是复杂性。“采用度”考虑这几个因素接受者参与者采用门槛是否有观测工具积极讨论的共识经得起考验的假说一致的响应行动采用障碍业务的担心合规性从未发生过事故难以衡量回报率“复杂性”会随着实验的发展而提升如下所示1 Game Day实践试水复杂性低但是消耗大量人力无法在大量服务上规模化执行。2故障注入框架。工具可以让多个团队进行实验进行更多跨功能性的学习。3 实验平台。满足更好实验的需求在对照组和变量组进行安全对比控制最小爆炸半径。每个实验都要被平台监控。4 平台自动化。完全自动化进行的混沌工程包括实验的创建、优先级排序、执行和推翻/终止。平台能够“自我反省”只自动运行哪些对实验假说有可量化期望的实验。平台还可以进一步进行能力升级如控制“混沌预算”使用组合实验变量构建实验自动修复漏洞。被引入的实验变量也可以不限于基础设施层级还可以是应用程序逻辑层的变量-比如给服务返回出乎意料的响应。基于混沌成熟度绘制的表格就可以看到本组织所处的位置确定如何技术投资的路径达到高复杂性与高参与度让混沌工程创造最大的价值。下一篇我们详细介绍各大企业实践混沌工程的优秀流程经验教训人和组织的能力提升从中学习到了哪些洞见。