大规模组织DevOps实践(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人


第2章 DevOps思想

2.1 DevOps思想与生产流水线

DevOps(Development和Operation的组合词,开发运维一体化)软件工厂模式强调软件生产过程中的几个角色(如开发、测试、运维)之间的协作,强调在软件生产过程中通过自动化的工具链组成软件加工的流水线,例如,自动拉取开发代码版本进行编译构建、测试、部署等。目前看来,DevOps软件工厂模式是最接近软件工厂生产流水线的模式。

2.1.1 DevOps的起源

2007年,比利时的独立IT咨询师Patrick Debois开始注意开发团队(Development)和运维团队(Operation)之间的问题。当时,他参与了比利时一个政府下属部门的大型数据中心迁移项目,他负责测试和验证,因此他不仅要和开发团队一起工作,还要和运维团队一起工作。他在开发团队中要保持敏捷的节奏,在运维团队中又要以传统方式维护这些系统,在这两种工作环境中的切换令他十分沮丧。他意识到开发团队和运维团队的工作方式和思维方式有巨大的差异:他们处于两种不同的环境,而彼此又坚守着各自的利益,同时在这两种环境下工作到处都有冲突。作为一个敏捷的拥趸,他渐渐明白如何改进自己的工作。

2008年6月,在美国加州旧金山,O'Reilly出版公司举办了首届Velocity技术大会,这个大会主要围绕Web应用程序的性能和运维展开,分享和交换构建、运维Web应用程序的性能、稳定性和可用性的最佳实践。大会吸引了Austin的几个系统管理员和开发人员,他们对大会中分享的内容十分感兴趣,于是记录下了所有演讲内容,并决定新开一个博客分享这些内容和他们自己的经验。他们也意识到敏捷在系统管理工作中的重要性,于是一个名为the agile admin的博客诞生了。

同年8月,Patrick Debois也在加拿大多伦多的Agile Conference 2008上遇到了知音Andrew Shafer,两人后来建立了一个名为Agile System Administration的Google讨论组。

2009年6月,第二届Velocity技术大会在美国圣荷西召开,当时的Flickr技术运维资深副总裁John Allspaw和工程总监Paul Hammond一起在大会上做了一个题目为“10+Deploys per Day:Dev and OpsCooperation at Flickr”的演讲,该演讲轰动了业界,也有力地证明了开发团队和运维团队可以有效工作在一起以提高软件部署的可能性。

受此大会的启发,Patrick Debois在比利时发起了名为DevOpsDays的会议,大会出奇地成功,大家在Twitter上的讨论热情一直不减。由于Twitter有字数的限制,大家就把话题#DevOpsDays简写成了#DevOps,因此DevOps一词便在社区中慢慢确立了。

2.1.2 DevOps对软件工厂的启发

通过DevOps的发展历程我们得到了一些启发,软件工厂中有各类工种,他们进行各类生产要素的加工,如开发、测试、部署等,如果缺乏有效的沟通和协作,以及一条高效的生产流水线,则无法将这些工种的劳动过程有效地衔接起来,生产力必然无法提升。

2.1.3 从DevOps实践原则看软件生产工艺化水平的提高

我们再回顾一下DevOps的发展过程。

在2010年之前,DevOps运动主要还停留在技术社区中,探讨的一些开源工具也很少受厂商和分析师的关注。直到2011年,DevOps突然受到Gartner分析师Cameron Haight和451 Research公司Jay Lyman等人的注意,他们开始正式研究这个市场,同时,一些大厂商也开始进入DevOps领域。

DevOps的发展也离不开另外一个领袖人物的推动,那就是知名公司Tripwire的创始人Gene Kim。2012年8月,Gene Kim在他的博客上发表了the three ways的DevOps实践原则,即思考系统的端到端流程;增加反馈回路;培养一种不断实验,以及通过反复实践达到精通的文化。Gene Kim为DevOps领域贡献了一个重要的理论基础。2015年9月,Gene Kim、Kevin Behr和George Spafford三人合著的《凤凰项目》一书出版,该书一度被誉为DevOps的“圣经”。

Gene Kim的DevOps实践原则给我们最重要的启发是:在软件生产过程中,人的要素很关键,通过“培养一种不断实验,以及通过反复实践达到精通的文化”,我们可以在软件生产过程中积累大量的工艺数据,实验在不同软件规模、复杂度的条件下,生产工艺、生产工具、生产技术的优化配置。而这些实验是很难在一次合同项目或小规模作坊中进行的。

2.1.4 软件工厂模式对生产工具发展的促进作用

DevOps被业界快速接受离不开相关技术的同步发展,特别是云计算技术和基础设施的成熟,以及新架构范式的出现。

2013年,dotCloud公司(后更名为Docker)推出Docker项目,在容器技术的基础上引入分层式容器镜像模型、全局及本地容器注册表、精简化REST。

同年,Google推出开源项目Kubernetes,提供了以容器为中心的部署、伸缩和运维平台。Kubernetes支持Docker、rkt及OCI等容器标准,能够实现在各种云环境中快速部署Kubernetes集群。

2015年,基于Cloud Native(云原生)概念的逐步成熟,Google联合其他20家公司宣布成立开源组织Cloud Native Computing Foundation(CNCF,云原生计算基金会)。同年,O'Reilly出版公司出版了Pivotal公司的产品经理Matt Stine写的Migrating to Cloud Native Application Architecture一书。书中,Matt Stine对Cloud Native关键架构特征进行补充,也融入早在2012年由Heroku创始人AdamWiggins发布的“The Twelve-Factor”(十二要素)应用原则等重要理念。此书较完整地描述了Cloud Native的落地方法和实践。

2016年,随着DevOps应用逐步深入,行业开始关注系统的安全性和合规性,出现了DevSecOps(Development Security Operations,开发安全运维一体化)等细分探讨领域,开始倡导Security as Code(安全即代码)、Compliance as Code(开源合规即代码)等新理念。

这几年是软件工厂需要的相关基础技术协同发展的阶段。有了Docker,软件的开发、测试、部署过程得以标准化。有了云技术的发展,IaaS(Infrastructure as a Service,基础设施即服务)层技术帮助软件工厂解决资源供给问题;PaaS层技术帮助软件工厂的劳动者更加敏捷地组装软件系统并交付使用、持续运维。