在系统里放一只“猴子”,阿里疯了吗?

阅读数:10407 2019 年 2 月 22 日

在云时代,随着大规模分布式系统和微服务架构技术的演进,你对你的系统健壮性还有多少信心?

没人能全盘掌握这种分布式系统的复杂结构,也没人能获知系统所有的弱点。还有一个现实我们必须清楚地认识到——网络状态是复杂的,用户行为是不可预测的,许多事件也是不可预见的。当你的组件崩溃、降级或者失常,系统遇到恶意或者小白用户,而你却在睡梦中,那可真是灾难。

系统故障无法避免,可灾难恢复又贵又娇弱,还只在必要的地方部署,如果我们能在问题发生之前,或者在没有对用户造成伤害之前,主动发现它并解决它,这可能吗?

当然可能,为什么不试试混沌工程呢?

一只讨嫌的猴子

想象一下,你的系统里有一只猴子在四处乱窜,你无法抓住它,更无法控制它的行为,你不知道它什么时候会搞挂你的系统。焦虑,无比焦虑。

如果这只猴子,就是你自己放进去的呢?你知道,它的目的就是搞挂你的系统,感觉是不是又不一样了?刺激,真的刺激。

这只猴子名叫 Chaos Monkey。

image

作为业界微服务和 DevOps 组织的楷模,Netflix 有大规模生产级微服务的成功实践。他们大胆提出反脆弱架构的理念,以攻为守,组建混世猴子军团,在工作日期间随机虐杀生产实例,逼迫相关研发人员做好高可用。而随着系统日益完善,Chaos Monkey 的实力和攻击范围也在不断提升。酸爽,过于酸爽。

但是,在猴子军团的蹂躏之下,整个 Netflix 的服务稳定性不断前进。所以说,为什么 Netflix 这么牛?人家对自己够狠。

言归正传,随着 Chaos Monkey 的出现,一门新学科诞生了:混沌工程。

说说混沌工程

混沌工程,被描述为“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心。”今天,包括谷歌、亚马逊、IBM、阿里巴巴在内的许多公司都采用某种形式的混沌工程来提高现代架构的可靠性。

或许我们可以把混沌工程比作打疫苗,用以毒攻毒的办法来提高系统的免疫力,比如有目的性地向系统注入故障,找出潜在的弱点。

有一些朋友觉得,这不就是故障注入和故障测试吗?确实,三者在关注点和工具中都有很大的重叠。

混沌工程和其他方法之间的主要区别在于,混沌工程是一种生成新信息的实践,而故障注入是测试一种情况的一种特定方法。对于分布式系统来说,单元测试、集成测试或性能测试是远远不够的,我们无法保证系统能够应对生产环境所的各种不可预测事件。我们遇到的问题,可能只是系统隐患的冰山一角。而混沌工程给予了一种方法,来模拟不可预知的故障,这就是我们需要的。所以,为了具体地解决分布式系统在规模上的不确定性,可以把混沌工程看作是为了揭示系统弱点而进行的实验。

image

混沌工程属于一门新兴的技术学科,行业认知和实践积累比较少,大多数 IT 团队对它的理解还没有上升到一个领域概念。阿里电商域在 2010 年左右开始尝试故障注入测试的工作,开始的目标是想解决微服务架构带来的强弱依赖问题。后来经过多个阶段的改进,最终演进到 MonkeyKing(线上故障演练平台)。从发展轨迹来看,阿里的技术演进和 Netflix 的技术演进基本是同时间线的,每个阶段方案的诞生都有其独特的时代背景和业务难点,也可以看到当时技术的局限性和突破。

参考 | 《阿里巴巴在混沌工程领域的实践和思考》/ 阿里巴巴高级技术专家周洋(中亭)

混沌工程是一种忧患意识

网络环境如此复杂,故障的随机性也相应增加,这些故障或将给企业造成巨大损失,给用户带来糟糕的体验,甚至让他们陷入麻烦之中。混沌工程通过有意识地“糟蹋”系统,将故障扼杀在襁褓里,以达到提升系统健壮性的目的。

所以,混沌工程不仅是一种新兴的技术学科,更是一种服务态度,一种忧患意识。

为帮助开发团队加深对混沌工程的理解,汲取业内先驱实践经验,QCon 北京 2019精心策划了“混沌工程”专题,特邀阿里巴巴高级技术专家周洋(中亭)作为出品人,为各位开发人员策划了一场饕餮盛宴。

image

本专题将聚焦在以下几个方向:

  • 实施混沌工程的意义、文化建设和技术演进
  • 微服务架构的混沌工程实践
  • 容器环境下的混沌工程实践
  • 如何在 DevOps 团队落地混沌工程

2019 年 5 月 6-8 日,更有超 100 位国内外资深技术专家与您相约北京国际会议中心,聚集 26+ 热门专题,助你提升技术视野,打破职业瓶颈,迈上新台阶!访问QCon 官网了解 QCon 十周年精心策划,现在购票即享 8 折优惠,立减 1760 元,团购还能更省更多!有任何问题欢迎联系票务小姐姐 Ring:电话 010-53935761,微信 qcon-0410。