运营将来时:不可变基础设施与内建故障恢复

  • Manuel Pais
  • 李彬

2014 年 1 月 7 日

话题:DevOps

在上个月伦敦 Velocity 大会的演讲中,Vagrant的缔造者 Mitchell Hashimoto 介绍了他对于“未来的运营”的愿景,在其中谈到了“不可变基础设施”与内建的故障恢复。

Mitchell 的愿景涉及了可重复的环境(通过配置管理工具)、超快部署时间(通过预建的静态映像)和服务编制时间(通过分散式编制工具)。在这个情景中,配置全新的服务器与更换故障服务器并没有什么不同。

这一愿景是构筑在不可变基础设施的理念之上的。在该理念中,机器在启动时得以配置,并将永远不会进行修改。后续出现的任何环境变更,都会通过部署新机器并取代过时的不可变机器(并出现一些警告,例如复杂的数据库服务器变更,或是诸如 CSS 修改等小型应用变更)来实现。这一理念曾被一些人视为空想,因为现今在任何系统中都存在大量的外部依赖。

对 Mitchell 来说,这个问题由于目前诸如PuppetChef等配置管理工具而愈加明显。由于包依赖、网络可用性或环境描述中的变更(Chef 的cookbooks或 Puppet 的manifests),相同服务器的可重复部署难以得到保证。Mitchell 认为,可预见性的关键是使用预建并且经过测试的机器映像(二进制)——类似于从源代码编译得来的软件二进制包。

在 Mitchell 看来,机器映像之所以在过去有着不太好的名声,是因为它们难以维护。但是借助当前的配置管理工具,映像现在易于进化,并且以持续集成的方式构建。Packer等新工具能够基于单一的模板和环境描述集合,为多管理程序(VirtualBox、VMWare 等等)构建映像,从而进一步简化了任务。

然而,在映像部署之后(而不是作为部署流程本身的一部分),依旧需要执行服务发现和编制任务(比如建立负载均衡)。Serf是 Mitchell 开发的另一个用于该领域的工具。他表示,Serf 的设计初衷是为了通过松耦合代理和基于流言机制的成员制(新的代理必须与已加入的现有代理联系,才能够加入系统),支持故障探测和恢复。类似地,某个代理探测到故障节点,并向其他代理“传播(gossip)”这一消息——由它们决定是否需要替换该节点。

Mitchell 宣称,这一切的主要价值在于机器映像生成过程中的编制速度,以及配置管理流程的简化(只需要配置 Serf 代理服务,然后 Serf 将在机器启动的时候自动启动)。

在问答环节,Mitchell 还表示,在他看来 Docker(用于应用容器)、Packer(用于公共基础设施)和 Serf(用于服务编制)的共存毫无问题。

查看英文原文:FutureOps with Immutable Infrastructures and Built-in Failure Recovery

DevOps