首页 > 其他分享 >大厂在混沌工程领域的实践

大厂在混沌工程领域的实践

时间:2023-04-04 10:56:34浏览次数:30  
标签:工程 混沌 实践 业务 故障 大厂 团队 演练

近几年大家对于生产服务的稳定性越来越重视,无论是在技术大会还是企业的技术规划中,混沌工程越来越多的被提及到。

上周末看了2个大厂落地混沌工程的视频案例,让我对混沌工程有了一些新的理解。

这篇文章,我总结了阿里和字节在落地混沌工程方面的一些技术实践,还有我的一些理解和思考。

 

为什么需要混沌工程?

其实落地混沌工程的原因很简单,业务和技术的复杂性提升带来的不可控风险和成本越来越高。这些复杂性主要体现在这几个方面:

  • 业务迭代速度越来越快(业务要求技术更快的交付);
  • 应用系统架构愈发复杂(技术支撑业务的必然发展趋势);
  • 跨团队协作成本越来越高(大规模协作的信息失真和延时);

业务的迭代提速从日常的版本更新周期和采用的迭代模型就可见一斑。我14年刚入行时一般都是一个月一个版本,大多还是采用的瀑布或者双V模型。

近几年看到的听到的业务迭代周期基本到了一周/双周一个版本,迭代模型也越来越多的变成了敏捷或者“公交车模型”。

应用系统架构的复杂度演变,从单体式架构到集群,再到分布式、微服务。

面对线上服务稳定性挑战,最头疼的就是线上故障发生的时间和范围无法预测,故障发生后对系统的影响难以评估,以及面对故障时如何快速定位和修复问题,如何快速应急响应。

跨团队协作的问题,其实一直是团队管理的重点和痛点。多人大规模的跨团队甚至跨部门协作,如何保证目标一致,信息及时同步且不失真,高效的协作行动。

这些因素极大的制约了线上服务的稳定性和业务的可用性。而混沌工程的出现,就是赋予系统在面对失控条件时具备较强的“可观测性”和故障恢复能力。

 

混沌工程面临哪些挑战?

谈落地混沌工程之前,先了解一下关于混沌工程的定义和目的。

定义:通过有目的的注入真实的故障来锻炼提升系统的稳定性,改善团队的应急效率。

目的:可控的主动暴露问题,通过一系列手段来修复收敛问题,最终达到问题可量化、系统可信赖,最后达成不断的主动挖掘问题解决问题的机制。

要落地混沌工程,其实面临很多的挑战,这些挑战因素归类后主要分为如下几点:

投入成本高

成本主要集中在这几点:

  • 生产集群有很多的服务实例,模拟故障软硬件成本高;
  • 系统架构太复杂,涉及多个团队和人员,人力投入成本高;
  • 服务之间各种依赖,实施故障注入需要内外部多方协作配合;
  • 混沌工程需要长期的人力和时间投入,影响正常的业务迭代;

实施风险高

风险主要有如下几点:

  • 发生重大生产故障怎么办?
  • 注入的故障影响范围和程度是否可控?
  • 万一生产系统真的挂了影响到用户使用怎么办?
  • 生产数据很关键,注入故障产生的脏数据怎么处理?

收益不明显

企业内推行很多项目,都会面临投入产出的评估。落地混沌工程也要面临这些挑战:

  • 系统上线这么久,都很稳定,有必要实施混沌工程吗?
  • 除了注入故障观察系统表现,还有其他明显的有价值的产出吗?

 

企业如何落地混沌工程?

实施混沌工程需要遵守一些经典原则,主要有如下几点:

  • 建立稳定状态的假设(制定合适的目标);
  • 多样化现实世界事件(选择合适的场景);
  • 在生产环境运行实验(在真实环境运行实验);
  • 持续自动化运行实验(避免人为误操作风险);
  • 最小化控制爆炸半径(控制实验的影响范围和程度);

在遵循这些守则之后,目前业内对混沌工程的落地实施,我总结后认为可以分为三个阶段。

试验探索期

第一个阶段,主要是通过小范围试点,让团队了解混沌工程的意义和价值,同时拿到一些比较明显的结果,便于后续扩大范围开启实验。这个阶段的特征主要有如下几点:

  • 通过简单的故障注入了解混沌工程的运行机制;
  • 小范围的试点,判断混沌工程的可行性,让相关成员熟悉流程;
  • 可以快速验证故障恢复手段的有效性,快速分析出实施故障注入的风险;
  • 实施时屏蔽业务系统部署细节,抽象故障模型,降低故障注入难度和资源成本;

熟练实验期

第二个阶段,基本都是组织专门的团队,通过高度的自动化手段来实验,获取更多数据,发现更多问题。这个阶段的特征主要有:

  • 实现故障演练创建和执行的自动化;
  • 可以自动收集演练的数据,半自动的识别风险和结果分析;
  • 有高效的场景管理手段,丰富的故障场景类型和成熟故障熔断措施;
  • 可以从业务链路视角开展故障注入,发现并提升感知和修复故障的能力(监控/告警/响应);

常态演练期

第三个阶段,基本上混沌工程的演练范围已经可以覆盖大部分业务,应急手段和预案也比较熟练,可以作为日常的线上服务稳定性保障手段。这个阶段的特征主要如下:

  • 覆盖范围基本覆盖大部分业务,故障演练成为研发体系的一部分;
  • 演练自动化,形成完备的生产稳定性保障预案,沉淀了丰富的案例库;
  • 沉淀了适合自身的最佳实践,系统稳定性保障体系成熟,可以联动业务部门常态化演练;
  • 混沌工程团队和相关人员之类的协调配合熟练高效,有明显的正向产出,进一步支撑业务运营;

经历这三个阶段之后,就可以将混沌工程作为日常研发和质量运营的一部分,长期运营下去。

 

混沌工程的建设演进之路

混沌工程不仅可以提升线上系统的稳定性,还能为业务运营持续提升支撑,同时也可以提升团队的组织协作能力。下面两幅图是阿里和字节的混沌工程演练体系和最佳实践。

 

 

当然,在落地实践混沌工程时,一定要注意这几点前提:

  • 实施人员对系统要有深入的了解;
  • 混沌工程要面向开发者,提高感知故障、排除故障的能力;
  • 大规模推广时候需要结合业务团队特性来量身定做方案,主动推动;
  • 控制演练范围-注意实施时间-从历史故障入手再做一些探索性的验证;
  • 低成本故障注入才能帮助业务快速验证故障下的系统表现和恢复手段;
  • 不同系统处于不同阶段,需要以不同的混沌工程实验帮助提升稳定性建设;

 

标签:工程,混沌,实践,业务,故障,大厂,团队,演练
From: https://www.cnblogs.com/imyalost/p/17285661.html

相关文章

  • 混沌工程之ChaosMesh使用之一模拟CPU使用率
    今天来玩一下混沌工程的开源工具之一的ChaosMesh。ChaosMesh的目标是要做一个通用的混沌测试工具。ChaosMesh是要和k8s结合使用的,其中用了云原生的能力。 ChaosMesh的基本工作流原理图:从原理图上可以看出大概的工作流程:用户用yaml文件或k8s客户端创建更新Chaos对象。Chaos-mesh......
  • 阿里云EMAS移动测试最佳实践|马来西亚第一大电子钱包通过EMAS测试提效6倍
     阿里云EMAS移动测试与Touch'nGoeWallet的合作是EMAS移动研发产品“出海”的良好开端。目前为止,EMAS移动测试已服务国内外数以千计的企业,沉淀了丰富的企业移动数字化转型方案与经验。在未来,EMAS会持续为企业移动应用APP质量保驾护航,为更多像Touch‘nGoeWallet这样的优质客户提......
  • 阿里云EMAS移动测试最佳实践|马来西亚第一大电子钱包通过EMAS测试提效6倍
    Touch'nGoeWallet面临APP测试挑战Touch'nGoeWallet(以下简称TNGeWallet)是马来西亚第一大电子钱包,目前已拥有超过1850万注册用户。作为马来西亚国民级金融类移动应用,任何App质量与体验问题都可能对C端用户造成严重影响。此外,公司业务正处于高速发展阶段,仅过去一年中TNGeWa......
  • 保龄球积分程序实践
    实验过程:首先定义一个scanner函数和一个二维数组,用于输入和存储分数Scannersc=newScanner(System.in);int[][]scores=newint[11][4];然后循环这个数组首先先循环前十轮并输入其打倒的个数,前九轮分数不是十就再计第二轮的分数;第十轮无论如何都记第二次。然后再计第十轮......
  • 状态同步、帧同步的实践入门
    写在前面在接触网络同步设计时,必然会看到“状态同步”、“帧同步”这俩概念,虽然有百科解释、书、诸多博客、手头工作项目可以参考,但真正走到“开始理解”这一步前,我脑子里常冒出一些问号“看了好几回百科好像和没看一样”,“博客的资料就一定是准确的吗”,“工作项目用的必然经过......
  • JVM系统优化实践(13):GC动手实践
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~上一次留了个小尾巴:怎么以通过代码模拟对象年龄在15岁之后才进入老年代呢?自己试着实现了一下。首先需要设置好相关的JVM环境:-XX:InitialHeapSize=104857600-XX:MaxHeapSize=104857600-XX:NewSize=20971520-XX:MaxNewSize=209715......
  • Turtlebot机器人仿真实践
    使用catkin_create_pkg创建一个新的catkin程序包。换到之前创建的catkin工作空间中的src目录下,使用catkin_create_pkg命令来创建一个名为'myPKG'的新程序包,这个程序包依赖于std_msgs和roscpp环境配置在Ubuntu中的操作指令:$source/opt/ros/indigo/setup.bash。    ......
  • RxJava在业务系统中的实践
    在java的世界里由于大多数接口和API都是阻塞式的交互,进而影响到很多童靴的编程思想和编程习惯。因而,有一些专家讲java的编程模型是阻塞式模型(与Node.js区别大),不是没有道理的。从高性能的视角看,任何阻塞点都可能导致性能的退步。而响应式编程其天然就是非阻塞的,当数据准备完成后自动......
  • elasticsearch实践篇:跨表join查询
    随着业务发展跨表join查询需求越来越多,系统的慢查询不断报出,引入ElasticSearch来实现聚合查询势在必行。ES是一个基于Lucene的搜索引擎,通过将业务主表及辅表的索引字段及需要like字段同步到ES里,每张表的索引字段最终汇总成一个联合索引,来实现多个表的跨表搜索。性能要求检索需求......
  • python从入门到实践第16章 下载数据1
    第一步获取csv格式文件需要python爬虫的相关知识 第二步 先打印第一行观察标签importcsvfilename='data/sitka_weather_2014.csv'withopen(filename)asf:reader=csv.reader(f)header_row=next(reader)print(header_row)['AKST','MaxTempe......