关于作者
Gene Kim在多个角色上屡获殊荣:CTO、研究者和作家。他曾是Tripwire的创始人并担任了13年的CTO。他写过两本书,其中包括《The Visible Ops Handbook》,目前他正在编写《The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win》和《DevOps Cookbook》。Gene是 IT运维的超级粉丝,痴迷于改进运维流程——在不影响当前IT生产环境的情况下,使得开发人员可以向生产交付更多可运行的功能,而非只是完成代码。他与多个顶级互联网公司合作过,致力于改进他们的发布流程,提高IT运维流程的完整性。2007年,Computer World将Gene列入了“40岁以下的40个创新IT人士”的名单中,普度大学还给他颁发了杰出校友奖以表彰他在专业领域的成就和领导力。
目录
- 什么是DevOps
- DevOps与敏捷有什么不同
- DevOps与ITIL以及ITSM有什么不同
- DevOps与可视运维
- DevOps的基本原则
- DevOps模式的应用领域
- DevOps的价值
- 信息安全和QA如何融入DevOps的工作流
- 我最喜欢的DevOps模式一
- 我最喜欢的DevOps模式二
- 我最喜欢的DevOps模式三
1. 什么是DevOps
术语“DevOps”通常指的是新兴的专业化运动,这种运动提倡开发和IT运维之间的高度协同,从而在完成高频率部署的同时,提高生产环境的可靠性、稳定性、弹性和安全性。
为什么是开发和IT运维?因为典型的价值流就是在业务(定义需求)和客户(交付价值)之间。
DevOps运动的起源通常被放在2009年前后,伴随着许多运动的相辅相成和相互促进——效率研讨会运动,特别是由John Allspaw和Paul Hammond展示的开创性的“一天10次部署”,基础设施即代码”运动(Mark Burgess 和Luke Kanies),“敏捷基础设施运动” (Andrew Shafer),“敏捷系统管理”运动(Patrick DeBois),“精益创业”运动(Eric Ries),Jez Humble的持续集成和发布运动,以及Amazon的“平台即服务运动”等这些运动的相辅相成和相互促进而发展起来的。
DevOps的合著者John Willis写了一个非常好的帖子在这里
http://itrevolution.com/the-convergence-of-devops/
2. DevOps与敏捷有哪些不同?
相对于瀑布开发模式,敏捷开发过程的一个基本原则就是以更快的频率交付最小化可用的软件。在敏捷的目标里,最明显的是在每个Sprint的迭代周期末尾,都具备可以交付的功能。
部署的高频率经常会导致部署堆积在IT运维的面前。StreamStep公司的创始人,Clyde Logue总结过一句话:“敏捷对于开发重新获得商业的信任是大有益处的,但是它无意于将IT运维拒之门外,DevOps使得IT组织作为一个整体重新获得商业的信任”。
DevOps和敏捷软件开发是相辅相成的,因为它拓展和完善了持续集成和发布流程,因此可以确保代码是生产上可用,并且确实能给客户带来价值。
DevOps不仅仅创建了一个面向IT运维的工作流,当代码已经开发完成但是却无法被部署到生产上时,这些部署就会堆积在IT运维的面前,客户也将因而无法享受到任何价值,更糟糕的是,部署经常导致IT环境的中断和服务不可用。
DevOps具有与生俱来的文化变革的基因组成,因为它革新了开发和IT运维之间的工作流和传统的衡量标准。John Willis和Damon Edwards(两位都是《DevOps Cookbook》合著者)就这个话题写过很多文章:
http://itrevolution.com/devops-culture-part-1/
3. DevOps与ITIL和ITSM有什么不同?
尽管很多人视DevOps为ITIL和ITSM的颠覆,而我则有着不同的看法,在支撑IT运维的业务流程方面,ITIL和ITSM流程无疑还是最好的。实际上,他们描述了需要被IT运维支持的功能集合,这些功能集合足以支撑DevOps式的工作流。
敏捷和持续集成以及持续发布是开发的输出,这些输出同时作为IT运维的输入,为了适用跟DevOps相关的快速部署的节奏,ITIL流程的很多方面,特别是围绕着变更、配置和发布流程方面,需要自动化。
DevOps的目标不仅只是增加变更的频率,而且也支持在不中断和破坏当前服务的基础上,确保功能部署成功,同时也可以快速检测和修复缺陷。这引入了服务设计,事故和问题管理方面的ITIL新准则。
4. DevOps和可视运维如何搭配
2004年,我与Kevin Behr以及George Spafford合著了《The Visible Ops Handbook》,可视运维是一个说明性的指南,该指南使得高性能IT运维能顺利实现“从优秀到卓越”的转变,关键点之一是如何控制和减少计划外的工作。
在开发和IT运维之间,DevOps不仅聚焦在创建快速和稳定的计划工作流,而且DevOps也有一个更全面的方法来系统的消除计划外工作,定义开发弹性准则,并负责管理和减少技术债务。
5. DevOps的基本原则
在《The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win》和《DevOps Cookbook》的书里,我们描述了DevOps的支撑原则——“DevOps三个基本点”,所有的DevOps模式都可以源自这3个基本点。
第一个基本点强调整个系统的性能,而非将性能局限于特定的工作领域里,这个工作领域可以大到一个部门(例如开发和IT运维)或者小到一个个人贡献者(例如开发者,系统管理员等)。
重点是由IT推动的的业务价值流,换句话说,它始于需求定义(比如被业务或IT部门定义),进行开发构建,又交给IT运维,最后价值以一种服务的形式交付给客户。
实践第一个基本点的结果——决不传递一个已知缺陷至下游,决不因小失大,总是致力于改进流程,执着于深刻理解系统需求(根据戴明的理论)
第二个基本点是关于创建从右至左的反馈回路,几乎所有的流程改进计划的目标都是缩短和放大反馈回路,以便可以持续进行必要的修正。
应用第二个基本点的结果——包括理解和回应所有内部和外部客户,缩短和放大所有的反馈回路,必要时,非常容易的嵌入客户需要的知识。
第三个基本点是打造一种文化用来促进两件事情——持续不断的探索精神,勇担风险的精神以及从成功和失败中来学习的能力,同时也得谨记:重复和实践是融会贯通的前提。
这两件事情对我们来说同等重要,探索精神和勇担风险的精神可以确保我们持续改进,它甚至意味着我们可能到达了之前曾未到过的危险区域,因此这也迫使我们去学习,掌握并融会贯通那些技能,因而使得我们能够顺利离开危险区。
第三个基本点的结果——分配时间去改进每天的例行工作,培养一种奖励冒险精神的风气,同时主动引入故障到系统中,从而提高弹性。
6.DevOps模式的应用领域
在《DevOps Cookbook》里,我们将DevOps模式分成4个领域,
领域一,将开发延伸至生产中——包括拓展持续集成和发布功能至生产,集成QA和信息安全至整个工作流,确保代码和环境可在生产中直接部署,。
领域二,向开发中加入生产反馈——包括建立开发和IT运营事件的完整时间表用于帮助事件的解决,使得开发融入无指责的生产反思,尽可能使得开发可以自助服务,同时创建信息指示器用来表明本地的决策如何影响全局的目标。
领域三,开发嵌入到IT运维中——包括开发投入到整个生产问题处理链,分配开发资源用于生产问题管理,并协助退回技术债务,而且开发为IT运维提供交叉培训,增加IT运维处理问题的能力,从而降低升级问题的数量。
领域四,将IT运维嵌入至开发——包括嵌入和联络IT运维资源至开发,帮助开发创建为IT运维(部署,生产代码的管理等)使用的可重用的用户故事,定义一些可以被所有项目共用的非功能性需求。
7. DevOps的价值
我相信企业在应用了DevOps之后可以得到3个业务优势:产品快速推向市场(比如,缩短开发周期时间和更高的部署频率),提高质量(比如,提高可用性,提高变更成功率,减少故障,等等)并提高组织的有效性(比如,将时间花在价值增加活动中,减少浪费,同时交付更多的价值至客户手中)。
产品快速推向市场:
2007年,在IT流程协会,在评测了超过1500个IT组织结构之后,我们得出结论:相比较于一般的组织,高效的IT组织的效率要高出5到7倍。变更要多出14倍,变更故障率只有前者的1/2,第一次修复率要高出4倍,而且一级事故时间要短10倍。 重复审计发现要少4倍,通过内部控制来检测漏洞方面要高出5倍左右,并且8倍于前者的项目到期日表现!
在我们的研究中,观察到的最高部署频率大约是每周1000次生产变更,变更成功率为99.5%,我们认为这真得很快……
其中一个高绩效的特点是,最好正在继续变得更好。这绝对是发生在部署频率的领域内。 在应用了DevOps实践的组织正表现出更快的快速部署和实施,而且相比于一般组织要快几个数量级。
埃森哲最近做了一个研究:互联网公司都在做什么? 通过亚马逊的记录显示,他们在保持目前每周部署1000次的情况下,同时还能保证99.999%的成功率!
http://www.youtube.com/watch?v=dxk8b9rSKOo
http://www.slideshare.net/slideshow/embed_code/9466635?startSlide=33)
维持高部署率(即,快速的迭代次数)的能力转化为业务价值的两种主要方式:
组织如何快速的把一个想法变成价值交付到客户手中(比如,Damon Edwards 和John Willis说得“概念到落地”),组织同时可以做多个尝试。
对我来说,如果我在一个每9个月才能部署一次的机构里,而我的竞争对手可以每天部署10次,那么无疑我将有着明显的竞争劣势。
高频率部署也实现了快速和持续不断的部署。Intuit公司的创始人,Scott Cook一直在组织的各个层面,不停的倡导“犀利创新文化”,我最喜欢的例子之一就记录在http://network.intuit.com/2011/04/20/leadership-in-the-agile-age/。
“每一位员工应该能够做到快速,高速的交付……Dan Maurer负责我们的消费者部门,包括TurboTax网站。当他接手的时候,我们一年只做几次部署,但是通过营造一个犀利的创新文化,在报税季节的3个月里,他们现在能做165次部署。商业价值? 网站转化率高达50%。员工价值?这帮家伙们真得喜爱它,因为可以将他们的想法很快交付到市场中”
对我来说,Scott Cook的故事最令人震惊的是,他们在繁忙的报税季节做所有这些部署!在旺季,大多数组织都会冻结任何变更(例如,从十月到一月,零售商可能经常有变更冻结)。但如果在旺季,若你能提高转换率,而你的竞争对手不能,那么这就是一个真正的竞争优势。
达到这个效果的前提就是,在不影响客户的基础上,可以快速的完成并部署很多小的变更。
减少IT浪费总量:
Mike Orzen和我很早就谈到了IT价值流中的巨大浪费,这些浪费是缘起于交付期限延长,不良的交接,计划外工作和返工。基于Michael Krigsman的一篇文章,在应用了DevOps的原则之后,可以挽回很多价值而非浪费。
我们计算过,如果能够减少一半的IT浪费量,然后把这些省下来的钱重新投资,若能得到5倍的投资回报,那么每年可以产生30万亿美元的价值。
这就是溜过我们指尖的巨大的价值和机会。占了全球GDP的4.7%,甚至超越整个德国的经济产出。
我觉得这真的很重要,尤其是当我想到我的三个孩子将继承的这个世界,这些浪费对生产率,生活水平和经济繁荣的潜在影响正在不断增加,让我觉得不得不改变。
然而,还有一个更大的成本,在大部分的IT组织结构里,工作是吃力不讨好和令人沮丧的,人们觉得他们自己就像被困在一部不断重复的恐怖电影里,无法改变最终的结局。管理人员本应将IT管理的很好,但是他们放弃了这样的职责,直接导致开发,IT运维与信息安全之间无休止的部门冲突,而审计师的出现只会让事情变得更糟。
长期来说,必然的结果就是进步迟缓。IT专业人士的生活往往令人泄气和沮丧的,通常导致渗透在生活方方面面的无力感和高压状态。IT专业人员面临着压力相关的健康问题、社交问题、宅在家里等问题,这样使得他们不但不健康,同时生活也很可能难以为继。
作为人,我们注定就是去贡献,感觉就好像我们正在积极发挥作用,与众不同。但是,往往当IT专业人员向他们的组织寻求帮助的时候,他们会得到回答:“你不明白”,更糟的是,他们甚至会得到“你不重要”这样的待遇。
8. 信息安全和QA如何融入DevOps工作流
DevOps的高部署频率通常会给QA和信息安全带来很大的压力,考虑这样一种情形,开发每天部署10次,而信息安全通常需要4个月的时间来评估应用的安全。很显然,在代码开发和代码安全审计方面的速率一点都不匹配。
2011年Dropbox故障就是一个著名的例子,其体现了未经充分测试的开发代码带来的风险有多大。因为这次事故,认证功能被关闭了4个小时,从而导致未授权的用户可以访问所有存储的数据。
当然对QA和信息安全来说,也不全是坏消息, 开发会通过持续集成和好的发布惯例(持续测试的文化)来维持高频率部署。换句话说,一旦代码被提交,自动测试便开始运行,而且一旦发现问题,必须马上解决,就像开发人员在检查还没编译的代码。
通过集成功能测试,集成测试和信息安全测试到开发的每天例行工作中,问题将会被更快发现,同时也会被更快解决。
同样,也有着越来越多的信息安全工具,比如Gauntlet和Security Monkey, 可以帮助我们在开发和上线的过程中测试安全对象,达到信息安全目标。
但是也有一个很重要的问题需要考虑,静态代码分析工具通常需要花费很长时间才能运行完,以数小时或天记。在这种情况下,信息安全就必须注明特定的有安全隐患的模块,比如加密,认证模块。只要这些模块变化,一轮全面的信息安全测试就运行,否则部署就可以继续,而不需要全覆盖信息安全测试。
需要特别提到的一点是,我们观察到,相较于标准的功能单元测试,DevOps工作流依赖于检测和恢复更多一点。换句话说,当然开发以软件套件的方式交付的时候,那么部署变更和补丁就比较困难,同时QA也严重依赖代码测试来验证功能的正确性。另一方面,当软件以服务的形式交付,缺陷就可以被很快修复。而且QA也可以减少测试依赖,取而代之的更多依赖缺陷的生产监控,只要缺陷能被快速的修复。
代码故障恢复可借助于“功能标签”等手段,通过以配置的形式来启用或禁用某些代码功能,从而达到避免推出一个全功能部署,而只部署通过测试的功能至生产。
当功能不可用或性能出现下降等较坏的情况发生的时候,依赖于检测和恢复进行QA将会一种更好的选择。但是当面对损失保密性或数据和系统一致性的时候,我们就不可以依赖检测和恢复这种方法。取而代之的是,在部署之前,必须进行充分的测试,否则可能导致重大的安全事故。
9. 我最喜欢的DevOps模式一
通常,在软件开发项目中,开发都会用完所有计划中的时间用于开发功能。这样会导致无法充分解决IT运维的问题,于是他们就在定义,创建和测试数据库、操作系统、网络、虚拟化等代码依赖的方面直接抄捷径,以此节省时间。
所以这就是开发和IT运维以及次优结果之间的永恒的紧张关系的主要原因。后果很严重,比如不适当的定义和指定环境、无法重部署、代码和环境的不兼容等等。
在这种模式下,我们会再开发过程的早期提出环境要求,并强制代码和环境必须被一起测试的策略,一旦使用敏捷开发方法,我们可以做到非常简洁和优雅。
按敏捷的要求,在每个迭代结束
http://www.infoq.com/cn/articles/11devops
相关推荐
11. 敏捷和DevOps转型:敏捷和DevOps转型是软件开发领域的一种转型,它涉及到传统的软件开发模式向敏捷和DevOps模式的转型。 12. 项目管理:项目管理是软件开发过程中的一个重要组成部分,它涉及到项目计划、项目...
.NET是微软公司推出的一种开发平台,它为开发者提供了构建各种类型的应用程序的工具和技术。...通过阅读《你必须知道的.NET》等资料,可以系统性地掌握这些知识,为成为一名优秀的.NET开发者打下坚实的基础。
《你必须知道的.NET(第二版)》是一本深度探讨.NET技术的专业书籍,它涵盖了.NET框架的核心概念、C#编程语言以及与之相关的开发实践。这本书的第二版更新了最新的.NET技术,为开发者提供了全面而深入的学习资源。标签...
《你必须知道的.NET》是针对.NET框架的全面学习资源,包含了从基础到高级的大量知识点,旨在帮助读者深入理解这一强大的开发平台。这个压缩包中的笔记内容可能涵盖了以下核心领域: 1. **.NET Framework概述**:...
文中的“关于AWS的Firecracker,技术人应该知道的十件事”专栏,帮助架构师了解这项技术的特点和应用场景。 7. Kubernetes在DevOps中的应用:文中探讨了如何基于Kubernetes构建完整的DevOps流水线。DevOps作为一种...
云原生技术架构的另一个核心是DevOps,DevOps是指开发和运维团队之间的协作和集成,目的是为了提高软件的开发和交付速度。 云原生技术架构的第三个核心是技术底座,技术底座是指云计算的基础设施,包括计算资源、...
这不仅可以帮助你更快地掌握C#的基础,还能确保你的代码保持整洁、高效且易于维护。以下是一些关键的学习要点: 1. **C#基础语法**:C#是一种面向对象的编程语言,由微软公司开发,主要用于构建Windows应用程序、...
让我们知道我们的状况! 请花一点时间填写,以帮助我们改进产品。 云原生应用 Fabrikam Medical Conferences提供适合医学界的会议网站服务。 他们的业务不断增长,许多代码库实例的管理和每个租户的变更周期已失控...
这需要对分布式系统、微服务、容器化、DevOps等领域有深入的理解,同时具备良好的沟通和领导能力,能够指导团队进行高效开发。 总之,Java程序员的职业道路并非一蹴而就,而是通过不断学习和实践,逐步提升自己的...
Visual Studio(简称VS)是微软公司推出的一款强大的集成开发环境(IDE),被广泛应用于Windows、Web、移动设备以及云计算应用的开发。这个“vs优秀的学习总结资料”压缩包很可能包含了有关Visual Studio的各种教程...
在C#面试中,深度理解技术...以上只是C#面试中可能涉及的一部分技术点,深度理解意味着不仅要知道这些概念,还要能够应用到实际问题中,解决复杂编程挑战。通过不断的实践和学习,你将在C#面试中展现出深厚的技术功底。
在本篇"C#开发经验实例(13)"中,我们将探讨C#编程语言在实际开发中的应用和技巧,这些经验和实例对于提升你的C#编程能力至关重要。C#是一种多范式、面向对象的编程语言,由微软公司为.NET框架设计,广泛应用于...
11. **自动化和DevOps**:自动化脚本和持续集成/持续部署(CI/CD)工具如Jenkins、GitLab CI/CD等,帮助DBA实现更高效的数据库管理和部署。 总的来说,传统DBA的角色正在转变为更加综合的技术角色,需要掌握更广泛...
让我们知道我们的状况! 请花一点时间填写,以帮助我们改进产品。 云原生应用 Fabrikam Medical Conferences提供适合医学界的会议网站服务。 他们的业务不断增长,许多代码库实例的管理和每个租户的变更周期已失控...
在准备百度Android工程师面试时,了解并掌握一系列关键知识点至关重要。以下是一些核心领域和相关概念,这些都是面试中可能会被问到的: 1. **基础知识**:熟悉Java或Kotlin编程语言,理解面向对象设计原则,如封装...
11. **自动化测试工具**:研究并实践第三方自动化测试工具,如Unity Test Tools、PlayMode Tests 和 Editor Tests,以及像NUnit这样的通用测试框架,它们能帮助你构建更强大的测试解决方案。 12. **持续集成和持续...
11. **持续集成/持续部署(CI/CD)**:对于大型项目,CI/CD工具如Jenkins、Azure DevOps或GitHub Actions可以自动化构建、测试和部署过程,提高开发效率。 综上所述,使用C#编写飞信涉及到的知识面广泛,不仅要求...
让我们知道我们的状况! 请花一点时间填写,以帮助我们改进产品。 现代云应用 Contoso体育联盟协会(CSLA)是最大的体育特许经营之一,并且正努力满足其不断增长的用户群的需求。 他们目前托管一个电子商务网站,并...