1.1 DevOps简介
维基百科上,DevOps(Development和Operations的组合词)是指一种重视软件开发人员(Dev)和IT运维技术人员(Ops)之间沟通合作的文化、运动或惯例。通过自动化软件交付和架构变更的流程,使构建、测试、发布软件能够更加快捷、频繁和可靠。现在,即使对了解过DevOps甚至是已经在使用这种研发模式的人来说,也难以定义到底什么是DevOps。有些观点认为,DevOps区别于传统的瀑布模式,基于敏捷模式,并将敏捷思想和实践从开发扩展到运维(也有激进的观点认为它完全不同于这两种研发模式),是一种新的思维模式和行动方法。
1.1.1 DevOps发展简史
在2008年举办的敏捷大会上,Patrick Debois和Andrew Clay Shafer首次提议讨论了“敏捷基础架构”这个话题。在第二年的敏捷大会上,两名Flickr员工做了题为“10+ Deploys per Day: Dev and Ops Cooperation at Flickr”(“每天10次部署”)的演讲,这可以看作开创了我们现在所说的DevOps的概念。之后它激发着Patrick在同年10月于比利时根特市举办了第一届DevOpsDays,这代表着DevOps推广的开始。从那以后,DevOps借助DevOpsDays在全球范围内传播,并于2019年达到顶峰——全球有80座城市在2019年举办了DevOpsDays。2019年10月28日到30日,全球各个国家和城市的DevOps活动组织者和推广者齐聚比利时根特市,举办了DevOpsDays十周年庆典。
相比欧美国家,DevOpsDays进入中国相对较晚,2017年3月18日北京举办了第一届中国DevOpsDays,并于接下来几年陆续在上海和深圳也分别举办了DevOpsDays峰会。由于DevOpsDays对中国DevOps行业的影响,2018年7月22日,中国DevOps社区成立,并迅速发展到全国18个城市,通过本地化的DevOps Meetup等小型活动在各个城市继续推广DevOps。
除了DevOpsDays,另一个标志性事件是Alanna Brown在2012年起草了第一版年度 《DevOps现状报告》。从2012年起,这份年度报告就被DevOps业界和从业人士作为了解DevOps现状的参考以及DevOps发展方向的风向标。另外,2013年Gene Kim出版了小说体的《凤凰项目》一书,通过描述一家正在经历DevOps转型的企业,生动形象地向读者介绍了转型过程中的思想碰撞,以及各种问题和相关的解决方法。2016年,Gene Kim联合Jez Humble、Patrick Debois和John Wills合力出版了DevOps业界最具权威的经典著作:《DevOps实践指南》。图1-1给出了DevOps 10多年的发展历程。
图1-1 DevOps发展史
1.1.2 DevOps理念
DevOps的目标是提升整个研发效能,进行更便捷、更快速、更可靠的交付,从而提高产品竞争优势。DevOps模糊了以往研发模式中开发、测试、运维等岗位和角色的界限,加强了他们之间的协作,甚至鼓励将各个角色从传统的专家团队的组织结构,重新编制成全功能团队,用以加强协作(如图1-2所示)。
图1-2 DevOps组织结构转变
技术层面上,则通过流水线和一系列自动化机制、成熟可伸缩的基础设施(如云)等,使开发人员获得更高的效能,从而更加频繁且快速地将代码变为产品,并从这种快速中获得持续不断的反馈和验证,以获得更高的可靠性。为了能够达到DevOps的目标:更便捷、更频繁地进行更可靠的交付,除了思维模式和文化以外,DevOps也需要一些技术和工具来支撑。也是得益于一些基础设施和工具的发展和成熟,才使得越来越多的公司能够践行DevOps。
从目前业界的最佳实践来看,DevOps技术和理念主要包括几个关键的要素:持续集成(Continuous Integration,CI)、持续交付(Continuous Delivery,CD)、微服务(Microservice)、自动化测试、基础设施即代码(Infrastructure as Code,隐含了虚拟化、容器、自动编排、配置即代码等技术和理念)、监控和日志(Monitoring and Logging)等。业界围绕DevOps已经形成了一系列的工具集合和解决方案。最终,通过文化意识的改变和自动化工具的使用,DevOps能够带来的价值也是很明显的,包括更快的研发交付速度、更快的产品创新和尝试速度;有效地管理了更大规模的系统,并能够提供更可靠的质量;从文化角度,深化了研发各角色之间的协作。不仅仅是互联网行业,包括很多传统的金融、零售、制造等行业也在尝试DevOps。
在如图1-3所示的传统模式下,在整个研发流程(需求、开发和测试)完成之后和上线前需要进行安全评审,以保证应用的安全性。因此,简单来说,整个软件开发的交付周期就是研发时长加上安全评估的时长。在DevOps模式下,我们通过自动化、敏捷开发、团队协作、微服务设计等DevOps理念和技术手段,提高了研发效能。研发阶段的时长缩短了,从而也减少了整个交付周期的时长,提高了交付速度和效率。然而,由于传统的DevOps模式没有考虑安全,因此上线前的安全评审时长并没有改变。从图1-3可以清晰地看出,在DevOps成熟的情况下,团队继续提高研发效能的瓶颈已经不在研发阶段,而是在上线前的安全评审阶段。那么,如何在DevOps模式下进一步改进研发效能,提高交付效率呢?另外,从安全的角度考虑,瀑布模式下的传统应用安全模式(比如SDL)已经无法跟上DevOps模式下越来越快的交付速度了,因此需要摸索出一套适合不停迭代和快速交付的全新应用安全模式的方法论。
图1-3 从传统模式到DevOps模式