译者序

译者序

把时间拨回 2008 年,敏捷软件方法在全球范围内日益流行。全球性敏捷大会 AgileConf 自 2003 年起已经举办了五届,Agile China 大会自 2006 年起也连续举办了两届。越来越多不同角色的技术人员参与到敏捷浪潮之中。他们拥抱敏捷思想和原则,重新审视和改造传统的软件流程。于是在这一年的 AgileConf 上,继开发、测试和需求之后,Andrew Clay Shafer 和 Patrick Debois 分享的“敏捷基础设施及运维”议题打破了硬件和软件的边界,让更多人关注起敏捷在基础设施领域的应用。星星之火逐步形成了旷日持久的 DevOps 燎原之势。

ThoughtWorks 一直是敏捷方法的信仰者和提倡者,不仅积极将内部积累的软件开发模式与实践对外分享,同时将社区总结的好模式与实践引入内部。例如,自动化构建、测试驱动开发、持续集成、自动化部署、用户故事、迭代式开发与发布等实践都是经过 ThoughtWorks 的同事们吸收与提炼,再进一步向社区倡导和推广的。Kief Morris 也是其中的一员,在基础设施和运维方面的丰富经验让他在公司内部的分享与讨论之中经常有令人印象深刻的观点。

2012 年,我第一次见到了 Kief。当时我们分别作为来自 ThoughtWorks 中国和 ThoughtWorks 英国的持续交付实践带头人,与 Jez Humble、Joanne Molesky、Sam Newman 以及其他国家和地区的持续交付实践带头人一起,在美国芝加哥召开了为期 5 天的“持续交付峰会”。在芝加哥千禧公园里云豆的掩映下,在美食与棒球之余,我们一起讨论了持续交付的定义、宣言和原则,梳理了持续交付的典型实践和工具箱。会议上,我们讨论得最多的就是各地的团队在开发、发布、监控、运维等过程中的最佳和最新 DevOps 实践。

2013 年,我开始了 ThoughtWorks 中国内部的 DevOps 云平台创业项目 ScaleWorks。ScaleWorks 是聚焦于云资源综合管理、服务器配置、应用发布、生产监控以及聊天即运维(ChatOps)等产品的整体解决方案。2014 年,我们向 Kief 介绍了 ScaleWorks,并和他在管理数千台 XenServer 及服务器的某个项目上进行了一些合作,取得了不错的效果。作为我们的产品顾问,Kief 在项目上不断思考、总结 DevOps 和持续交付的实践。他在博客上持续发表了一些精彩的文章,引起了很多共鸣。本书中的许多概念,例如“服务器蔓延”“配置漂移”等反模式,都是由他总结,再被社区接受、认同和传播开来。

从 2015 年起,Kief 开始撰写本书,将他自己的博客、公司内外分享的文章以及更多的经验心得总结成文字,希望能够帮助大家掌握和理解“基础设施即代码”。得到这个消息之后,我第一时间联系了 Kief 和图灵,希望能够将本书引入国内。2016 年,图灵获得了本书的中文版权。经过一段时间的翻译和编辑,本书的中文版终于要和大家见面了。

回顾整个历程,不由得感慨万千。革命性技术实践的发起、传播和成熟,往往需要无数人投入常年的心血和热情。正是这些人不辞辛劳、不计得失地付出和布道,才让整个技术社区实现了颠覆式的突破。时至今日,软件从业人员坐拥公有云、微服务、容器等技术以及新型 IDE 和自动化工具,可以专注于业务需求的开发和实现,无须考虑底层服务器的细节与软件的构建部署流程。他们何尝能够想象“铁器时代”的基础设施和开发效率呢?光鲜的背后,是先行者们将脏活累活代码化、工具化乃至服务化的不懈努力。

顾名思义,“基础设施即代码”是将基础设施及其完整生命周期的操作通过代码的方式进行描述和执行。这个概念来自敏捷思想中出现已久的“测试即代码”(测试自动化)、“构建即代码”(构建自动化),甚至软件程序中更久远的“配置即代码”(例如,Java Annotation)。相比这些“××即代码”,“基础设施即代码”则另辟蹊径,将代码化的风潮扩展到了服务器、网络、系统配置、发布、监控等环节。不过从本质上看,各类“××即代码”的核心价值观和出发点是一以贯之的。

不妨以更广阔的视角来看,“××即代码”运动也和通用程序语言(GPL)拥抱函数式编程以及领域特定语言(DSL)的兴起密不可分。无论是软件构建工具 Ant、Maven、Gradle 等,还是系统配置工具 Puppet、Chef、Ansible 等,抑或是云原生的容器工具 Docker、Kubernates、Prometheus 等,都选择了将各自管理领域的对象和行为进行抽象和建模。它们基于 XML、YAML 等文本格式或 Groovy、Ruby 等脚本语言,定义了特定的 DSL 来描述这些领域的对象和行为,最终深刻地改变了这些领域的传统工作方式,让一切领域的对象和行为都可以通过代码进行定义和执行。

再联想一下,最近几年在以太坊、区块链社区流行的智能合约和被社区奉为圭臬的“Code is Law”更是百尺竿头,再进一步。人类各种活动的规则和状态(商业、公共事务,甚至投票、选举等)都可以通过代码来描述,通过计算机来执行、管理和调度。随着计算、存储和网络的云端集中,物联网的边缘计算以及人工智能的机器学习,在不远的未来,人类所有的活动和数据是否都可以数字化成代码?一场更深刻、更广泛的“××即代码”运动正在徐徐拉开大幕,不论会令人类欣喜或忧虑,都是必然的趋势。

回到本书,其体系化结构非常清晰,整体上分为三部分:基础概念、模式与实践。本书的内容涵盖了从动态基础设施平台(虚拟化、云、容器等)到通用基础设施服务(监控、服务发现、分布式进程管理、软件部署等)的各种工具和实践。内容虽多,却繁而不乱。本书考虑到了读者的阅读习惯,贴心地按照模式、实践以及组织变革的次序,由浅入深、由理论到落地地对基础设施即代码进行了颇为深刻的分析。

“基础设施即代码”的具体模式和实践是本书的重点。本书围绕广义的基础设施,分为“基础设施-服务器-服务”三层架构,着重从服务器的创建、配置、打包、远程执行、中央注册等不同的环节来对工具和方法进行细致入微的介绍。在模式和实践的实施方面,本书也结合了敏捷开发方法,从构建、测试、实施和组织变革这几个维度进行了深入浅出的讲解。层层叠叠却脉络清晰,令人豁然开朗。

无论你是开发工程师、运维工程师、架构师抑或管理层,阅读本书都将大有裨益。本书的每个部分不仅告诉你“是什么”,而且从目标出发,分析其中的需求和原则,再对比不同的工具和选项,从而让读者能够深刻理解“为什么”和“怎么做”。如果你想完善自己的知识体系,本书的知识网络是很好的基础;如果你想应用合适的工具,本书的分析脉络是很好的助手;如果你想推广模式、让工具的落地,本书的实操方法论可以让你事半功倍。

诚然,“一千个读者心中有一千个哈姆雷特”,背景、经历和工作的不同让每个人都有自己的视角和关注点。书越读越厚,又越读越薄,留下的是自己的思考和心得。祝福每位读者在阅读本书的过程中,都能找到属于自己的乐趣。

本书的翻译是由 ThoughtWorks 中国的几位同事集体完成的。钱伟、马博文、黄博文和禚娴静都是非常优秀的技术人员,帮助很多客户实施了敏捷和 DevOps 方法,尤为可贵的是他们热心于社区的分享和知识的传递。与他们合作翻译本书是一次非常有趣和难忘的经历。由于译者的时间、经验有限,难免出现纰漏,我们诚挚欢迎所有读者的反馈和批评,让我们一起把“基础设施即代码”的思想、原则和实践更准确地传播给更多的人。

最后,要感谢我的妻子徐婷婷,以及我们亲爱的宝贝金宥文。正是他们的支持,让我可以专心地翻译,对本书的整体译稿进行统稿和校稿,反复锤炼词句,呈现给读者。我还要感谢图灵的朱巍、杨琳等编辑老师,没有她们认真的审校和排版,这本书不会如此完美地展现在读者前面。

 

金明

2018 年 7 月 31 日

目录

  • 版权声明
  • O'Reilly Media, Inc. 介绍
  • 中文版推荐序
  • 译者序
  • 前言
  • 第一部分 基础
  • 第 1 章 挑战与原则
  • 第 2 章 动态基础设施平台
  • 第 3 章 基础设施定义工具
  • 第 4 章 服务器配置工具
  • 第 5 章 基础服务概述
  • 第二部分 模式
  • 第 6 章 置备服务器的模式
  • 第 7 章 管理服务器模板的模式
  • 第 8 章 服务器更新与变更模式
  • 第 9 章 定义基础设施的模式
  • 第三部分 实践
  • 第 10 章 基础设施的软件工程实践
  • 第 11 章 测试基础设施变更
  • 第 12 章 基础设施的变更管理流水线
  • 第 13 章 基础设施团队的工作流
  • 第 14 章 动态基础设施的连续性
  • 第 15 章 基础设施即代码的组织要求
  • 关于作者
  • 关于封面