Adrian Cockcroft 谈混沌架构:四个层、两个团队和一个理念

  • Daniel Bryant
  • 薛命灯

2017 年 11 月 22 日

话题:架构云计算语言 & 开发

旧金山 QCon 大会上,Adrian Cockcroft 呈现了“混沌架构(Chaos Architecture)”的演讲,并探讨了云原生架构的演化以及如何应用混沌工程来构建更好更安全的系统。有效的混沌架构由“四个层、两个团队和一个理念”组成:基础设施、交换机制、应用程序和人;混沌工程团队和安全团队;“建设性破坏”理念。

AWS 云架构 VPCockcroft以软件架构的演化进程为切入点开始了演讲,讲述了从单体应用到微服务再到函数(无服务器架构)的发展过程。面向服务架构(SOA)最先尝试对单体进行拆分,形成了粗粒度的迷你单体,它们通过 SOAP 传输大 XML 文件实现一般性的交互。微服务的出现催生了服务间频繁的交互,它们一般使用 REST 风格的接口,通过 HTTP 传输简洁的 JSON 或经过二进制编码的内容。



五年前,微服务使用标准构建块进行构建,这些构建块是由云供应商提供的服务和平台,如 DBaaS、MQaaS 和 NoSQL,而微服务本身则成为业务逻辑组件的粘合剂。三年前出现的 FaaS 让这些粘合剂组件变成了函数,因此改变了系统架构的方式——在系统处于空闲时关闭服务,客户不需要为此支付任何费用。

应用程序设计的演化和这种架构的变更被统称为“云原生”。Cockcroft 列出了一系列云原生架构原则:按需支付 OPEX,而不是预付费 CAPEX;自助服务消费,通过 API 进行自动分配;默认全球分布;跨区域及多区域可用性模型;通过健壮的持续交付管道实现不可变代码部署。

演讲进行到一半,Cockcroft 把话题转向混沌工程和混沌架构,他认为混沌的核心是“四个层、两个团队和一个理念”。前面两层是基础设施和交换机制,用户请求被路由到本地服务上,数据拥有复制副本,在发生故障时,请求被重新路由到活跃节点上;交换机制比冗余组件更加可靠。

下一层是应用层,该层的微服务得到良好的设计,减小了事故的影响范围,比如使用回路断路器防止危害扩散。Cockcroft 引用了英国 Starling 银行Greg Hawkings的话,他说,DITTO(Do Idempotent Things To Others)架构和避免更新及删除的语义让实现弹性系统变得更容易。

第四层是人,人是实现弹性系统的核心组件,纠正应用程序的一些非预期行为需要人的介入,而通常这样会让情况恶化。现实当中的防火演习可用拯救人类的生命,因为人们经过训练,知道如何应对火灾,但在 IT 领域该如何进行“防火演习”?“两个团队”指的是混沌工程团队和安全团队。



混沌工程团队使用各种工具(如Netflix 的 Simian Army故障注入测试ChAPGremlin),以游戏日的方式让人们参与演习,演练如何应对灾难故障。安全团队则使用Safestack AVAMetasploitAttackIQSafeBreach等工具,尝试主动攻击系统,强制工程师们在可控范围内做一些破坏性的行为。这两个团队的核心理念就是“建设性破坏”。

在演讲结束之前,Cockcroft 探讨了风险容错问题,以及对于企业来说是宽容的可用性更重要,还是具有一定宕机时间的一致性和安全更重要。“建设性破坏”变成了“安全性破坏”。其他相关资料还有:Todd Conklin 的事故预调查播客、John Allspaw 的stella.report以及 Sydney Dekker 的Drill into Failure。故障是系统层面的问题,也是人为引起的。

Adrian Cockcroft 的演讲 PPT可以在旧金山 QCon 网站上找到,演讲视频将在未来几个月内提供。

查看英文原文Adrian Cockcroft Discusses Chaos Architecture: "Four Layers, Two Teams, and an Attitude"

架构云计算语言 & 开发