未雨绸缪:如何利用混沌工程应对未知故障 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daocloud
V2EX    推广

未雨绸缪:如何利用混沌工程应对未知故障

  •  
  •   daocloud 2022-04-14 15:26:27 +08:00 1092 次点击
    这是一个创建于 1305 天前的主题,其中的信息可能已经有所发展或是发生改变。

    图片

    未知,

    既然避不开,为何不拥抱它?


    在实际生产环境中,各种无法预知的事件难以避免,风险隐患无处不在。分布式系统架构的复杂性、海量数据的计算与存储、跨团队协同等,这些都在向系统的稳定性发起挑战。系统不确定性风险的加剧,最终将会波及到我们业务的连续性。

    你是否想过:如果整个区域或数据中心出现故障、服务出现访问延迟、系统时钟不同步等这些问题发生,将会带来怎样的后果? 其中有些结果我们可以预知,但更多可能在意料之外。这时候,你可以阅读这篇文章了解“混沌工程”。

    01

    初识混沌工程

    混沌工程 (Chaos Engineering) 是通过主动向系统中引入软件或硬件的异常状态 (扰动),制造故障场景,并根据系统在各种压力下的行为表现,确定优化策略的一种系统性稳定性保障手段。

    Netflix 前云架构师 Adrian Cockcroft ,在 2018 年关于混沌工程的演讲中,提出了关于混沌工程的更精确的定义: “混沌工程是一种确保减轻故障影响的实验”。也有人将混沌工程比作疫苗,通过“接种疫苗”的方式,让系统具备抵挡“重大疾病”的能力。

    2010 年底,Netflix 向全世界推出 Chaos Monkey ,其主要功能是随机终止在生产环境中运行的虚拟机实例和容器,模拟系统基础设施遭到破坏的场景,使得工程师能够观察服务是否健壮、有弹性,能否容忍计划外的故障。这就是混沌工程的早期雏形。

    混沌工程可以为我们做什么?

    图片

    混沌工程是故障测试吗?

    混沌工程,与故障注入、故障测试等测试方法,有本质上的区别。混沌工程是一种生成新信息的实践,而故障注入是测试已知属性的方法。

    在传统测试里,我们可以写一个断言,给定特定的条件,产生一个特定的输出,如果不满足断言条件,就说明测试出错,它不能产出一些让我们始料未及的“惊喜”。

    而混沌工程是探索更多未知场景的实验,实验会有怎样的新信息生成,我们是不确定的。

    02

    混沌工程原则

    以下原则描述了应用混沌工程的理想方式:

    图片

    可量化的稳定状态

    实施混沌工程,首先要了解系统在正常状态下的行为。因为,在人为注入故障后,不仅要评估故障注入对系统造成的影响,还要确保系统能够恢复到这个稳定状态。

    因此,需要收集一些可测量的指标,来实现系统稳定状态的可观测性。而业务指标相比系统指标(如 CPU 负载、内存使用率等),更能反映系统的健康状态以及用户满意度。

    反映真实世界但风险未知的假设

    在真实业务场景中,遇到的任何故障都是混沌实验的潜在变量。目前业界已经有了按照 IaaS 层、PaaS 层、SaaS 层划分的故障画像 (如下图)。除了对这些已出现的问题进行分类、优先级排序外,也要对未来可能会出现的新问题保持关注。

    图片图片来源:C114 通信网https://www.c114.com.cn/tech/169/a1174314.html

    同时,践行混沌工程要以接受不确定性为思想前提,即把重点放在发现未知的风险并进行改进,而非做出对实验输入和输出有明确预期的假****设。

    但是,在决定引入哪些事件时,也需要估算事件发生的概率和最终影响范围,推算造成的成本和复杂度等。

    自动化的生产环境实战

    同军队演练一样,将每次演习都看作是一次实战。生产环境的服务状态和流量模式等问题也会影响到系统的行为。

    因此,最好直接在生产环境中进行混沌实验。混沌工程实验还应该实现自动化且可持续运行,能够全自动地设计、执行和终止实验。

    影响最小化

    面对未知实验,想要完全避免不出问题是不可能的。在生产环境中进行实验必然是有风险的,但冒这个风险的代价总会比将来大规模业务中断所带来的打击要小。

    而我们所要做的就是,使用技术手段最小化故障对客户的影响,即 “最小爆炸半径”,如采取小范围的故障注入、流量路由、数据隔离等手段。

    03

    如何实施 混沌工程

    图片

    1. 设计实验

    1.1 确定稳态指标

    确定一个与用户相关的关键性能指标,如订单量或每秒的流量等。

    1.2 创建假设

    假设系统会出现哪些问题,注入了相应故障后会发生什么,这个结果可能会对客户造成什么影响。

    2.执行实验

    2.1 确定实验范围控制半径

    2.2 故障注入

    3.故障观察

    如果观测到稳态指标受到影响,则可以停止实验。接下来首先评估故障本身,根据指标变化情况来验证 (或反驳) 预先的假设。然后,检查仪表板和警报,看看是否有其他意外变动。

    4.事后分析发现新故障

    实验结束后,需要深入分析总结故障的种类、影响、发生的原因以及防止未来发生类似故障的方法。

    通过混沌实验,你有可能在系统瘫痪之前,发现了新故障并及时进行了修复,你也有可能会发现,系统对注入的故障具有恢复弹性,因而增强了对系统的信心。

    04

    开源项目

    Chaos Monkey

    https://github.com/netflix/chaosmonkey%0a

    ChaosMesh

    Chaos Mesh 是一个云原生混沌工程平台,提供了在 Kubernetes 平台上进行混沌测试的能力。

    https://github.com/chaos-mesh/chaos-mesh%0a

    Litmus

    Litmus 是一种开源的云原生混沌工程工具集,帮助 K8s SRE 和开发人员发现 K8s 平台和应用的韧性问题。

    https://github.com/litmuschaos/litmus%0a

    Chaosblade

    ChaosBlade 是阿里巴巴在其自身故障测试和演练实践基础上,结合自身业务场景而开发的面向多集群、多环境、多语言的混沌工程平台。

    https://github.com/chaosblade-io/chaosblade%0a


    本文作者

    图片\

    蓝维洲

    「 DaoCloud 道客」云原生研究院院长\


    参考资料:

    https://developer.aliyun.com/article/689220

    https://blog.csdn.net/qq_41340258/article/details/103081328

    http://www.caict.ac.cn/kxyj/qwfb/ztbg/202112/P020211223588643401747.pdf

    https://www.infoq.cn/article/fqdvs*rh6nwbfcmzk12f

    https://medium.com/@adhorn/chaos-engineering-ab0cc9fbd12a

    https://help.aliyun.com/document_detail/90327.html?spm=5176.10695662.1996646101.searchclickresult.7deb4972CcGvy6

    图片

    DaoCloud 公司简介

    「 DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。

    网址:www.daocloud.io

    邮件: [email protected]

    电话:400 002 6898

    图片

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     818 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:00 PVG 06:00 LAX 14:00 JFK 17:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86