写点什么

混沌工程的力量:阿里周洋亲述这一技术背后那些事儿

  • 2019-05-22
  • 本文字数:3508 字

    阅读完需:约 12 分钟

混沌工程的力量:阿里周洋亲述这一技术背后那些事儿

阿里巴巴技术团队对混沌工程的研发迭代持续了数年,对于这一技术,阿里为什么如此坚持?


2010 年底,Netflix 向全世界推出 Chaos Monkey (混乱猴子),该技术以在生产环境中随机关闭服务节点而“恶名远扬”,这就是目前熟知的混沌工程的早期雏形。《Chaos Engineering》书中是这样描述的:


混乱猴子的美妙之处就在于此,它能尽可能地将服务节点失效的痛苦提到最前,同时让所有工程师在构建一个具有足够弹性应对失败的系统上,达成一个一致的目标。


混乱猴子的灵感来自于 Netflix 几年前搬迁上云的过程,主要是为了解决该阶段暴露的问题。然而,目前不少企业的上云进程依旧缓慢,这种状态下是否还需要混沌工程?随着软件的测试流程越来越成熟且完善,是否有必要花费精力搞混沌工程?如果需要,这一领域有哪些开源工具可供快速部署实践?


针对上述问题,InfoQ 记者在QCon 2019 全球软件开发大会的现场采访了阿里巴巴高级技术专家周洋(花名:中亭),并与业内多名技术专家进行了不同程度的交流,本文将试图通俗讲解混沌工程的含义、作用及阿里巴巴的实践经验。

混沌工程的含义

混沌工程是在分布式系统上进行实验的学科 , 目的是建立对系统抵御生产环境中失控条件的能力以及信心 。


这句话同样出自《Chaos Engineering》,粗看起来,这一含义有些晦涩难懂。如果简单概括下,周洋对混沌工程的理解是如下四点:


  • 一种拥抱失败的技术文化

  • 一套抽象严谨的实践原则

  • 一种主动防御的稳定性手段

  • 一个高速发展的技术领域


从原理性角度来讲,周洋认为,实施混沌工程是分布式系统构建业务的必然选择。一方面架构的复杂性让系统负责人员很难自信承诺实际情况一定符合预期设计。另一方面组织对 ROI(投资回报率)的追求,又要求稳定性团队不能只是一个成本中心,所有措施要富有成效。业内不少工程师倾向于将混沌工程比作疫苗,通过"接种疫苗"的方式,让系统具备抵挡"重大疾病"的能力。混沌工程的原则又可以概括为:建立一个围绕稳定状态行为的假说;多样化真实世界的事件;在生产环境中运行实验;持续自动化运行实验;最小化爆炸半径。



想必看到混沌工程的那一刻,不少人脑海中会闪过一个词“测试”。如今,故障注入和故障测试的手段已经非常成熟,为什么还需要混沌工程。周洋认为,这之间存在一定重叠性,但混沌工程是发现新信息的实践。


故障注入和故障测试是通过引入故障,让程序走入一些不常经过的路径,以此提高程序覆盖率,是对特定条件、变量的验证。混沌工程虽然也使用短期度量结果代表系统状态,但该度量结果一般是监控指标,而非具体的接口返回值。混沌工程是围绕稳态进行验证和探索的过程,比如混乱猴子随机杀死部分节点的行为,每次实验都可能产生新的数据。


举例来说,故障注入的典型场景是对系统服务注入通信故障,比如超时、错误等,但无法探究流量激增、资源竞争条件等其他异常行为,这个实践过程本质上并不能发掘系统内未知或尚不明确的认知。而混沌工程的输入条件可能是模拟整个云服务区域或数据中心故障;挑选一个时间段,和针对一部分流量,对其涉及的服务间调用注入一些特定的延时;方法级别的混乱(运行时注入),让方法随机抛出各种异常等。


此外,实施混沌工程的人员也有所不同。周洋表示,以阿里内部的全链路压测为例,实施主要还是研发人员为主。传统意义上,测试人员更关注上线前的状况,之后交由 SRE 团队负责运维。混沌工程可以理解为测试的思想,但并不一定只有测试人员操刀,可以是 SRE、研发、技术支持甚至运营。

不为,就不需要混沌工程?

所谓不为,此处可以理解为较低频次的迭代和平缓的业务变更。如上文所言,Netflix 对混沌工程的探索起源于数据中心迁移上云的过程,因此不乏有企业认为只要不进行大规模的云迁移,就不需要实践混沌工程。


其实,这种想法是非常片面的。无论是激进的架构变迁,还是平缓的系统迭代,很多问题并不是因为迁移上云才出现,只是因为迁移上云才被暴露出来。


只要有过在生产环境中实际运行分布式系统的经历,一定会清楚分布式系统天生包含大量交互、依赖点,可以出错的地方数不胜数,比如硬盘故障、网络不通、流量激增压垮系统等,人力并不能完全阻止故障发生,而应该在异常行为被触发之前,尽可能多地识别出系统中脆弱且易出故障的环节。



根据 Netflix 的实践历程,尝试破坏系统和服务很简单,但并不是全都可以有建设性、高效地发现问题。周洋认为,严格来讲,混沌工程与云的关系不大,但目前大部分企业都处于云迁移、云就绪或者云原生的不同阶段,上云已经成为无法阻挡的趋势,该阶段正是故障爆发的高发期,这些问题可能潜藏在系统中良久,只是一直未被集中发现。虽然上云集中变革的是基础设施层面,但需要某种手段验证上层技术平台是否可以在这个过程中不受影响并保持一致,混沌工程的引入可以让问题提前暴露、提前解决,让企业更全面地理解这些系统性固有现象,从而在分布式系统中实现更好的工程设计,不断提高系统弹性。


此外,周洋特别强调,混沌工程并不是大公司的专属,除非企业完全不在乎系统运行情况。相比较而言,金融、游戏、电商、航空航天等业务发展较快且对可用性具备高要求的领域更加需要混沌工程。如果本身的研发团队或者业务团队规模较小,同样需要混沌工程提高效率和产出比。

阿里巴巴混沌工程实践

早在 2011 年,阿里电商就开始尝试通过故障注入技术去解决微服务的依赖问题,从注入实现、实验效率、业务影响等多个方面进行演进;2012 年,阿里推出同城容灾,进行断网演练;2015 年,异地多活上线;2016 年,MonkeyKing 被用于故障演练;2019 年,阿里开源混沌工程工具ChaosBlade(混沌之刃)。



周洋介绍,阿里之所以下定决定做这件事情,源自大促备战的反思,虽然内部有完善的体系和流程,但真实情况下的系统稳定性是未知的。因此,阿里决定手段与技术并行,通过混沌工程解决技术和组织层面的问题。


实践早期,团队希望通过混沌工程解决微服务依赖治理的问题,因为当时的微服务拆分还没有特别彻底。举例来说,一个核心服务与某个非核心服务之间可能存在强依赖关系,非核心服务出现问题时,可能拖垮核心服务,这肯定是不合理的,也是业务无法接受的。因此,团队通过引入混沌工程进行强依赖治理,优化整个流程。


一些基础技术团队也尝试通过混沌工程解决容器相关的问题。周洋介绍,作为云服务,容器平台本身属于 PaaS 层,通过实施混沌工程可以保证系统本身没有问题;其次,传统企业上云时,面临着应用向容器转换的过程,设计模式等都需要进行改变,如果对业务稳态具有要求,混沌工程的引入可以解决这一阶段出现的问题。


目前,集团安全生产团队开始牵头运作"突袭演练"这种跨公司的稳定性战役。在一个可控的环境下,通过有计划的打擂和无计划的突袭,让安全生产蓝军和业务红军进行对抗,通过实战演练的方式验收稳定性措施的全面性和有效性。


回顾整个发展过程,周洋认为,比较难的事情,一是让团队意识到可以通过混沌工程技术趋同整个稳定性链条,更自动化、智能化得提升平台稳定性。因为,平台能力越差,支持各个团队的人力成本就越高,平台能力越高,防御相应就越差;二是,让更多人接受并实施该理念,无论是内部还是云上的客户,都可以了解平台的问题,阿里团队也希望将内部稳定性的经验通过平台化的方式对外输出,ChaosBlade 便由此开源。


ChaosBlade 经历了 6 年改进和实践,累计在线上执行演练场景达数万次,是一款遵循混沌实验模型,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,其特点是操作简洁、无侵入、扩展性强。基于 Apache License v2.0 开源协议,目前有 chaosblade 和 chaosblade-exe-jvm 两个仓库,后续还会添加 C++、Node.js 等其他语言的混沌实验执行器。


目前,混沌工程领域已经出现不少优秀的开源工具,比如 kube-monkey、ChaosIQ 等,但很多开源工具的功能存在高度重叠,或者难以满足实际诉求。阿里希望可以同用一套工具体系,解决所有故障场景问题,未来通过开源社区的力量完善实验场景,共同推进混沌工程领域的发展。


周洋强调,AHAS(阿里云应用高可用服务)是面向业务稳定性的云服务,这对企业而言非常重要。企业上云,并不仅仅是为了享受稳定的基础设施,也需要保证业务稳定性,而目前很少有厂商注意到这一点,AHAS 的出现不是为了拉动营收,而是帮助云上用户更好得搭建云原生系统。



目前,ChaosBlade 已经可用并处于快速演进阶段,团队大概每周都会发版,按照微服务、容器和云原生的路线迭代。近期,该项目会增强 JVM 演练场景;支持更多 Java 主流产品,比如 Redis,gRPC;增强 Kubernetes 演练场景以及对 C++、Node.js 等应用的支持。周洋透露,目前团队也希望更多志同道合的朋友加入,感兴趣的朋友可以通过 Github 平台了解该项目


2019-05-22 08:2017798
用户头像
赵钰莹 极客邦科技 总编辑

发布了 883 篇内容, 共 647.3 次阅读, 收获喜欢 2679 次。

关注

评论 9 条评论

发布
用户头像
太缺这种产品和技术理念了
2019-05-22 12:20
回复
希望有所助益
2019-05-22 14:07
回复
用户头像
感谢小编的整理,大家一起来探讨混沌工程的技术和实践。
杭州高可用专家/高级专家岗位 持续招聘中,有兴趣请联系:zhongting.zy@alibaba-inc.com
2019-05-22 10:29
回复
本尊现身,感兴趣的伙伴不要错过这一机会哈~
2019-05-22 10:56
回复
本尊太棒了啊,哈哈,热烈鼓掌
2019-05-22 14:08
回复
2019-05-22 15:47
回复
用户头像
太好了 这正是我所需要的
2019-05-22 08:58
回复
感谢反馈
2019-05-22 10:56
回复
用户头像
有几个关键问题希望文章已经解释清楚:混沌工程与故障注入、故障测试之间的关系,混沌工程与云之间的关系(并不是只有上云才会用到,但上云这个过程暴露出来的问题较多),混沌工程的实施方不单单是测试人员,有关阿里开源ChaosBlade的具体情况可以通过Github查看
2019-05-22 08:32
回复
没有更多了
发现更多内容

Android技术分享| 实现视频连麦直播

anyRTC开发者

android 音视频 移动开发 视频直播 视频连麦

Java程序员面试需要准备的一些东西

北游学Java

Java 面试

微前端在平台级管理系统中的最佳实践

中原银行

FIL分币平台系统源码/FIL分币平台搭建

Geek_23f0c3

Filecoin fil挖矿

ONES x 知名游戏公司 | 持续快速交付高质量游戏产品

万事ONES

研发管理 解决方案

WICC 2021 技术分论坛 “开箱即用”语聊房Demo成亮点

融云 RongCloud

容器和虚拟机水火不容?不存在的!

谐云

业界良心啊!第五次更新的Spring Cloud Alibaba升级太多内容

Java架构追梦

Java 阿里巴巴 架构 SpringCloud Java技术提升

FIL挖矿分币系统搭建(现有源码)

Geek_23f0c3

Filecoin fil FIL分币系统

工作中如何使用GULP构建项目?

加百利

JavaScript 大前端 8月日更 gulp

NLP随笔(一)

毛显新

人工智能 自然语言处理 深度学习

FastApi-03-查询参数

Python研究所

FastApi 8月日更

NLP随笔(二)

毛显新

人工智能 自然语言处理 深度学习

详解Guitar Pro的自动化编辑器之节拍自动化

懒得勤快

阿里高工从入门,基础,进阶到项目实战,全面讲解spring boot

Java 程序员 架构 面试 spring Boot Starter

3000人群被字节内部技术图谱“炸”翻了,惊艳级实用

Java架构师迁哥

Kali Linux --《网络安全》-- 使用 WireShark 对常用协议抓包并分析原理

学神来啦

安全攻防 网络安全 信息安全 Wireshark

如何用Camtasia进行内容补充?

淋雨

Camtasia

请珍惜每一次被 Code Review 的机会

escray

学习 极客时间 朱赟的技术管理课 8月日更

补齐AI人才短板!百度飞桨师资培训高校行走进天津大学

百度大脑

人工智能 飞桨

AI系统中的偏差与偏见

百度开发者中心

AI 最佳实践 方法论 系统开发 语言 & 开发

ClickHouse存储原理初窥

循环智能

性能优化 OLAP Clickhouse

ApacheCon Asia 2021: Apache APISIX 技术议题一览

API7.ai 技术团队

Apache 开源 网关 APISIX

拼拼有礼模式系统开发详解APP

開發15347427695

应届生如何拿到高薪和职业方向

hanaper

编程 程序员 音视频 软件工程师 应届生

互联网通信云崛起的“融云曲线”

融云 RongCloud

Linux进程调度-CFS调度器原理分析及实现,懂了

Linux服务器开发

Linux服务器开发 Linux内核 Linux后台开发 CFS调度器 Linux进程调度

拼拼有礼系统软件开发案例介绍

開發15347427695

大数据训练营hive作业

Clarke

驶向未来之海的“必备罗盘”:百度智能云升级发布全新智能化中台

百度大脑

人工智能 企业服务

下午4点半,浪潮云说直播间精彩继续

云计算

混沌工程的力量:阿里周洋亲述这一技术背后那些事儿_服务革新_赵钰莹_InfoQ精选文章