某公司经常有这样的说法:e公司怎么说,i公司怎么说。这是学习,但不是第一性的。
什么是第一性的学习?通过以下从混沌猴到混沌测试的故事体会。
Steven Spear博士所说的“可恢复型组织”,能够“熟练地发现问题,解决问题,并通过在整个组织中提供解决方案来扩大经验的效果”。这些组织具有自我愈合的能力。“对于这样的组织,应对危机并不是什么特殊的工作,而是每时每刻都在做的事情。这种响应能力是可靠性的源泉。”
2011年4月21日,当亚马逊AWS整个美国东部(US East)可用性区域宕机时,我们看到了这些原则和实践产生了难以置信的恢复力。在这个区域中,几乎所有依赖AWS的用户都受到了影响,包括Reddit和Quora。然而,Netflix却是一个惊人的例外,似乎并没有受到这次AWS大规模服务中断的影响。
早在2008年,Netflix的在线视频交付服务还运行在一个单体的J2EE应用程序上,这个应用程序托管在一个数据中心。然而,从2009年起,他们就开始了系统的重构,结果就是所谓的云原生(cloud native)——系统完全运行在亚马逊AWS公有云中,而且具备足够的可恢复性,能够幸免于难。
他们有一个特别的设计目标,那就是即使AWS的整个可用区域都发生了故障,就像这次美国东部区的事故,也要确保Netflix的服务能够持续运行。要达到这一点就需要系统架构是松耦合的,每个组件都有特别敏感的超时设计,从而保证出现故障的组件不会拖垮整个系统。作为替代,Netflix每个功能和组件都设计为具有完全降级的能力。例如,当流量剧增造成了CPU使用率暴涨的时候,就不向用户显示个性化的电影推荐列表,而是只显示已经缓存的静态内容,从而减少计算资源的需求。
除了实施这些架构模式,他们还构建并运行了一个令人吃惊的大胆服务,称为“捣乱猴”(Chaos Monkey)。它会不断地随机删除生产服务器,来模拟AWS环境故障。他们这样做是希望所有的“工程团队习惯于在常规的故障水平上工作”,使得服务能够“在没有任何人工干预的情况下,自动恢复正常”。
换句话说,Netflix团队通过运行“捣乱猴”不断地将故障注入到预生产和生产环境中,从而实现了运维上的恢复性目标。
可以想见,当他们在生产环境中首次运行“捣乱猴”的时候,服务发生的故障超出了想象。通过在正常工作时间里不断地探测和解决这些问题,Netflix的工程师们很快反复打磨出这项弹性十足的服务,同时创造出了组织学习成果(在正常工作时间里!),从而能够开发出超越所有竞争对手的系统。
“捣乱猴”只是将学习融入日常工作中的一个例子。这个故事还展示了学习型组织是如何思考故障、事故和错误的——将其视为学习的机遇,而不是惩罚的机会。