写点什么

被你质疑价值的混沌工程,阿里巴巴已落地实践了 9 年

  • 2021 年 12 月 08 日
  • 本文字数:3527 字

    阅读完需:约 12 分钟

被你质疑价值的混沌工程,阿里巴巴已落地实践了9年

为什么阿里巴巴、工商银行、中国移动、华泰证券……都在关注混沌工程?


自从 Netflix 开源 Chaos Monkey,越来越多的国内公司看到了混沌工程在建立系统在生产环境中信心的能力,开始尝试通过混沌工程提高可靠性。阿里巴巴作为国内较早对外输出混沌工程能力的企业,早在 2012 年就开始在电商业务上,尝试通过故障注入技术去解决微服务的依赖问题。


应用层追求更全面、更便利、更快捷的服务,倒逼技术层面系统越来越复杂,可供观测和持续维护的难度不断加大,错综相连的软件服务节点越发依赖技术手段和能力。随着分布式和云原生技术成为主流技术趋势,混沌工程也随之备受关注。由于混沌工程自身特性,难以量化度量几乎成为业内共识,但对于企业混沌工程建设的成熟度,也需要探讨衡量标准。


如今,随着中国信通院成立了国内首个混沌工程实验室,混沌工程在国内的发展走到了新阶段。为此,InfoQ 和阿里云资深技术专家中亭,聊了聊混沌工程在阿里巴巴的技术实践。

9 年,混沌工程在阿里巴巴从探索到开源


不同企业关注和引入混沌工程的时间不同,但开局类似。阿里巴巴最开始引入混沌工程,也是为了解决实际问题。据中亭介绍,阿里巴巴探索混沌工程的时间线和 Netflix 差不多,只不过 Netflix 从基础资源开始实践,阿里巴巴则是从应用层开始。阿里巴巴最开始是为了解决技术架构变化和组织变化的问题,才去演进一些新的实践。

混沌工程一步步走进阿里巴巴,可以分为五个阶段:


第一个阶段在 2012 年,阿里巴巴电商业务遇到了微服务依赖不合理的问题,导致整个系统架构出问题,花了很长的时间做依赖的自动识别及治理,最后通过打破业务和稳定性之间的边界、引入故障注入的技术,解决了微服务的问题。


第二个阶段,阿里巴巴开始尝试做线上容灾、异地多活等容灾技术。通过比较大的断网等机房切换演练等方式,解决问题。


第三个阶段在中亭眼里是里程碑的阶段。在 2015 年备战双十一之后,阿里巴巴技术团队发现整个备战的方法可以非常体系化:当系统复杂到一定阶段,纸面梳理已经难以解决问题,是否可以通过一种逆向的方式暴露问题?2015-2016 年,阿里巴巴开始去做线上故障演练,也是今天提到的混沌工程的前期阶段。中亭提到,在这个阶段的核心是希望借助混沌工程解决分布式技术,不只是微服务,对整个线上稳定性的问题做全方位的度量,包括工具系统和监控预案等。


第四个阶段开始于 2018 年,阿里巴巴开始做两件事情:阿里云技术团队开始对云底座进行混沌工程探索,提升基础设施的韧性;伴随着阿里巴巴技术上云,开始把内部的高可用保障技术,通过云的方式对外输出,解决客户应用高可用的问题。可以看到,随着云服务云能力的对外输出,混沌工程能力开始服务外部客户。


等到第五个阶段,也就是在 2019 年 -2021 年,阿里巴巴在混沌工程上的探索开始分为两条线,一条是商业服务和开源一体化,清晰化技术演进路线、加速技术演进速度,体现在现在就是面向开发者的一站式混沌工程平台;另一条是阿里巴巴集团内部把混沌工程重视程度提到一个空前的规模。


据中亭介绍,2020 年阿里巴巴做了生产突袭项目,把所有可能影响高可用的重大故障因子,全部都聚合在一个平台,公司的管理层会在一个不定时的时刻随机的去发起这种突袭。这次生产突袭的核心要求是,被突袭业务具备在 1 分钟发现,5 分钟定位,10 分钟恢复。


他谈到,在这个阶段,已经把混沌工程和阿里巴巴集团的上云,包括人员组织的应急,已经完全串联起来,在内部的阶段沉淀到今天,其实已经是一个比较好的阶段。据悉,在阿里巴巴内部,将“高可用架构”和“韧性架构组织”升级成为“安全生产”,目前混沌工程已经成为安全生产的一个基础能力,现在内部的各个团队借助混沌工程去自发性地做垂直演练。基本上覆盖了阿里巴巴内部的几千个应用,所有的核心业务都有覆盖,包括生态公司如考拉和高德。


“过去大家对混沌工程的理解会比较浅,主要可能就直接把它等同于故障注入了,出现混沌工程原则后,有了一个相对严谨的逻辑定义,如果用一句话概括的话,混沌工程分两层:一层是混沌工程平台,一层是混沌工程实践,两层配套才能帮助企业完整进行混沌工程落地。”中亭谈道。“整体来看,对混沌工程的理解应该是分层的,整条脉络串联起来的话,你会发现其实混沌工程在企业的整个技术周期或者研发周期很多地方有所影响。”


相较于测试关注的是固定的输入和输出是什么,混沌工程更加强调实验和探索。“一个非常明显的区别是,我在生产区执行各种实验,然后我是不希望去打破我在线上的一个稳态。”中亭谈道。InfoQ 在系列访谈中也发现,直接在生产环境做混沌工程测试,需要持谨慎态度,这是绝大部分业内专家的共识。

“我”可以引入混沌工程吗?


阿里巴巴的混沌工程实践经验是否可以套用到其他企业呢?从行业角度看,混沌工程技术没有明显的行业限制。在对混沌工程的拥抱程度上,中亭认为,从引入目的和策略上主要是两类企业:一类是与阿里巴巴类似的互联网企业,关注线上故障的应急;另一类是有自己的云或者阶段性上云的企业,面向 C 端或政策法规有要求的企业(如:证券、银行)。


由于混沌工程的属性和行业特殊性,在金融行业的尝试较早。一方面,金融行业是对高可用严谨性有着高要求的行业,另一方面,金融行业正在面临转型。“所以目前混沌工程、分布式数据库或者其他方面的架构升级,背后都需要这样一个抓手来配合,所以混沌工程是比较合适。”中亭告诉 InfoQ:“对互联网业务而言,线上可以分阶段来说,从爆炸半径来讲,阶段性的建设,配合环境技术单元化。”


不敢引入混沌工程,大多数企业的顾虑在于,不同部门对混沌工程的认知不清晰,担忧落地的结果。中亭建议想要引入混沌工程的企业,可以先围绕企业特点做针对性实验,内部要有明确的组织,知道如何配合战略落地某项的时间,不再走“老路”,对混沌工程持有发现故障、发现 bug 的态度,而是从系统管理角度想要度量全局稳定性能力。


从技术基础、组织架构、流程制度和技术、人才储备上来说,混沌工程对企业引入没有太多前置要求。中亭谈道:“对企业的技术架构没有特别的要求。混沌工程的前提要求是需要对企业稳态的观察指标有一个准确的描述,所以需要企业在可观测性上有一定的积累,有一些基础监控就可以了。”混沌工程主要解决两个层面的问题:单机的系统设计和周边环境的问题,比如磁盘、单机网络等;集群之间的问题,所以只要企业本身支持一定的分布式化,就可以落地。


据他介绍,在阿里巴巴内部有一个制度:第一,被演练过的所有发生的故障,都要具备线上可演练的机制,真正验证是否可以恢复;第二,所有微服务的架构或分布式系统的架构,一级或核心级应用与非核心级别的应用的关系不能是强依赖,需要有自己的预案;第三,从组织的角度有一定的验收,比如说监控发现率、问题处理率等,需要在一个量化的数字之间。中亭谈到,只这三条制度,企业从引入到落地就需要进行很长一段时间了。

相辅相成的混沌工程和云原生


经过多年的发展,目前从技术的角度,行业内已经有了一些通用的混沌工程实验解决方案供企业选择。可以看到的是,混沌工程的实验和云密切相关。随着云服务渗透到各行各业,逐渐发展成为新的行业基础设施,对云服务的韧性提出了更高要求,而混沌工程被验证可以有效检验云原生系统的韧性架构。


“韧性架构的前提是先要对架构有一个理解,不管是 Java 语言体系,还是 GO 语言体系,阿里云帮助客户做的第一件事是搭建整个架构,第二件事是尝试把内部发生过的故障、在行业看到的故障,以专家经验的方式固化在平台中,结合架构做针对性演练方案的推荐。当企业把这些场景都验收,企业系统的韧性就达到了一定的水平。”中亭谈道。


在企业上云早期,可以在上云前后的平行环境下,针对性地做混沌工程场景实验,观测整个架构的反应是否一致,进而为企业使用云服务、考量架构的容灾能力提供可判断的依据。在企业上云后,混沌工程实验可以帮助运维工程师检验云服务。中亭解释道:“大家会关注用云姿势是否正确,比如说容器中间件,来去看企业是不是按照云的最佳实践。”


无可讳言,对于混沌工程的价值,目前在业内还没有一个明确的度量标准,但是可以通过简单的例子来有效佐证。据中亭介绍,一方面可以先选定一个场景,从结果上看,混沌工程可以保证场景不劣化;另一方面,如果度量组织进行突袭,不管系统架构和人员架构怎么变,监控结果都在合理的范围内。总体而言,混沌工程的核心就是增强信心,保证系统在某个场景下的能力不退化。只要这个组织有度量“特定场景下能力是否退化”的指标,混沌工程的价值就显而易见了。


嘉宾介绍:

中亭,2011 年加入阿里高可用架构团队,主导阿里混沌工程领域规模化实践落地。目前任全局高可用 & 混沌工程团队技术负责人,负责异地多活和混沌工程领域的技术。QCon 大会出品人,混沌工程布道师。

2021 年 12 月 08 日 18:133893

评论

发布
暂无评论
发现更多内容

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

9月日更 网卡

聊聊Java运算符的那些事

Bob

Java 9月日更

重放浏览器单个请求性能测试实践

FunTester

性能测试 接口测试 测试框架 测试开发 FunTester

Jira API的踩坑记

FunTester

接口测试 API Jira FunTester 缺陷管理

TDSQL(MySQL版)之DB组件升级

腾讯云数据库

数据库 tdsql

linux之type命令

入门小站

Linux

MimeType文件格式速查表

入门小站

工具

有个码龄 10 年的程序员跟我说:“他编程从来不用鼠标”,我说:

梦想橡皮擦

9月日更

【LeetCode】找到需要补充粉笔的学生编号Java题解

HQ数字卡

算法 LeetCode 9月日更

15. 弱人工智能、强人工智能、超人工智能

数据与智能

人工智能

让Chrome爽到飞起的5款小众插件!

Jackpop

Java从入门到升仙的书单推荐,附带读书笔记

Silently9527

Java书籍推荐 Java进阶书籍推荐 Mysql读书笔记

深入理解rtmp(二)之C++脚手架搭建

轻口味

android 音视频 直播 RTMP 9月日更

一次带宽拉满引发的百分百超时血案!

Gopher指北

Go 语言

统一区块链应用接口,加速新场景落地

CECBC

手撸二叉树之二叉树的所有路径

HelloWorld杰少

9月日更

云随想一:企业为什么要上云?

FLASH

原生云

Rust 从 0 到 1

rust

什么是可中断锁?有什么用?怎么实现?

王磊

9月日更

Vue进阶(幺零五):elementUI 实现表格行列拖拽

No Silver Bullet

Vue 9月日更

缓存核心知识小抄,面试必备,赶紧收藏!

博文视点Broadview

Golang 中的整洁架构

baiyutang

架构 DDD Go 语言 9月日更

Java之多重选择

IT蜗壳-Tango

9月日更

代码工具:VSCode

正向成长

vscode

计算机工业的生态链(二)

姬翔

9月日更

观测未来,携手同行!驻云诚邀您参加2021 OSCAR 开源产业大会!文末报名福利!

观测云

开源 可观测

一分钟带你了解Huawei LiteOS组件开发指南

华为云开发者社区

curl 内核 组件 Huawei LiteOS 组件开发

为什么 Golang 正在接管软件行业

云原生

云计算 Kubernetes 云原生 编程语言 Go 语言

编程基础:硬件同步原语

正向成长

CAS 硬件同步原语 FAA

【Flutter 专题】51图解动画小插曲之 Flare 动画

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

Python代码阅读(第26篇):将列表映射成字典

Felix

Python 编程 Code Programing 阅读代码

西门子低代码:探讨应用程序开发的下一步演进方向

西门子低代码:探讨应用程序开发的下一步演进方向

被你质疑价值的混沌工程,阿里巴巴已落地实践了9年_云原生_张俊宝_InfoQ精选文章