`

devops

 
阅读更多
DevOps是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通协作与整合。 它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发运营工作必须紧密合作。
可以把DevOps看作开发软件工程)、技术运营和质量保障(QA)三者的交集
传统的软件组织将开发、IT运营和质量保障设为各自分离的部门。在这种环境下如何采用新的开发方法(例如敏捷软件开发),这是一个重要的课题:按照从前的工作方式,开发和部署不需要IT支持或者QA深入的、跨部门的支持,而现在却需要极其紧密的多部门协作。然而DevOps考虑的还不止是软件部署。它是一套针对这几个部门间沟通协作问题的流程和方法。[6]
需要频繁交付的企业可能更需要对DevOps有一个大致的了解。Flickr发展了自己的DevOps能力,使之能够支撑业务部门“每天部署10次”的要求[7]──如果一个组织要生产面向多种用户、具备多样功能的应用程序,其部署周期必然会很短。这种能力也被称为持续部署[8],并且经常与精益创业方法联系起来。[9] 从2009年起,相关的工作组、专业组织和博客快速涌现。[10][11][12][13]
DevOps的引入能对产品交付、测试、功能开发维护(包括──曾经罕见但如今已屡见不鲜的──“热补丁”)起到意义深远的影响。在缺乏DevOps能力的组织中,开发运营之间存在着信息“鸿沟”──例如运营人员要求更好的可靠性和安全性,开发人员则希望基础设施响应更快,而业务用户的需求则是更快地将更多的特性发布给最终用户使用。这种信息鸿沟就是最常出问题的地方。
以下几方面因素可能促使一个组织引入DevOps:
使用敏捷或其他软件开发过程与方法
业务负责人要求加快产品交付的速率
虚拟化[14]和云计算基础设施(可能来自内部或外部供应商)日益普遍
数据中心自动化技术[15]和配置管理工具的普及
有一种观点认为,目前占主导地位的“传统”美国式管理风格(“斯隆模型 vs 丰田模型”)[16]会导致“烟囱式自动化”,从而造成开发运营之间的鸿沟,因此需要DevOps能力来克服由此引发的问题。
DevOps经常被描述为“开发团队与运营团队之间更具协作性、更高效的关系”。由于团队间协作关系的改善,整个组织的效率因此得到提升,伴随频繁变化而来的生产环境的风险也能得到降低。
DevOps对应用程序发布的影响
在很多企业中,应用程序发布是一项涉及多个团队、压力很大、风险很高的活动。然而在具备DevOps能力的组织中,应用程序发布的风险很低,原因如下:
与传统开发方法那种大规模的、不频繁的发布(通常以“季度”或“年”为单位)相比,敏捷方法大大提升了发布频率(通常以“天”或“周”为单位)
减少变更范围与传统的瀑布式开发模型相比,采用敏捷或迭代式开发意味着更频繁的发布、每次发布包含的变化更少。由于部署经常进行,因此每次部署不会对生产系统造成巨大影响,应用程序会以平滑的速率逐渐生长。加强发布协调靠强有力的发布协调人来弥合开发运营之间的技能鸿沟和沟通鸿沟;采用电子数据表、电话会议即时消息、企业门户(wiki、sharepoint)等协作工具来确保所有相关人员理解变更的内容并全力合作。自动化强大的部署自动化手段确保部署任务的可重复性、减少部署出错的可能性。

现状

很多组织将开发和和系统管理划分成不同的部门。开发部门的驱动力通常是“频繁交付新特性”,而运营部门则更关注IT服务的可靠性和IT成本投入的效率。两者目标的不匹配,就在开发运营部门之间造成了鸿沟,从而减慢了IT交付业务价值的速度。
开发人员经常不考虑自己写的代码会对运营造成什么影响。他们在交付代码之前,并不邀请运营人员参与架构决策或代码评审
开发人员对配置或环境进行修改之后,经常没有及时与运营人员沟通,导致新的代码不能运行。
开发人员在自己的机器上手工修改配置,而没有记录所有需要的步骤。想找到必要的配置参数,通常需要尝试很多不同的参数;在得到一个可工作的状态后,往往很难识别出通过哪些最小步骤就能到达该状态。
开发人员倾向于使用有利于快速开发的工具:对代码修改更快的反馈,更低的内存消耗,等等。这样的工具集与运营人员面对的目标运行时环境非常不同:后者对稳定性和性能的要求远胜于灵活性。
由于开发人员平时使用桌面电脑,他们倾向于使用为桌面用户优化的操作系统。生产环境的运行时系统通常都运行服务器操作系统上。
开发过程中,系统在开发者的本地机器上运行。在运营过程中,系统经常分布在多台服务器上,例如web服务器、应用服务器数据库服务器等等。
开发是由功能性需求(通常与业务需求直接相关)驱动的。
运营是由非功能性需求(例如可获得性、可靠性、性能等)驱动的。
运营人员希望尽量避免修改功能,从而降低满足非功能性需求的风险
如果拒绝了小的修改,但给定时间段内需要修改的总量不变,那么每次变更的规模就会变大
变更规模越大,风险也越大,因为其中涉及的区域越多
由于运营人员尝试避免变更,新功能流入生产环境的速度因此被延缓,从而延缓了开发人员将特性交付给用户使用的速度。
运营人员可能对应用程序内部缺乏了解,从而难以正确地选择运行时环境和发布流程。
开发人员可能对运行时环境缺乏了解,从而难以正确地对代码进行调整。

诉求

更小、更频繁的变更──意味着更少的风险
开发人员更多地控制生产环境
更多地以应用程序为中心来理解基础设施
定义简洁明了的流程
尽可能地自动化
促成开发运营协作
一般而言,当企业希望将原本笨重的开发运营之间的工作移交过程变得流畅无碍,他们通常会遇到以下三类问题:
发布管理问题很多企业有发布管理问题。他们需要更好的发布计划方法,而不止是一份共享的电子数据表。他们需要清晰了解发布的风险、依赖、各阶段的入口条件,并确保各个角色遵守既定流程行事。发布/部署协调问题有发布/部署协调问题的团队需要关注发布/部署过程中的执行。他们需要更好地跟踪发布状态、更快地将问题上升、严格执行流程控制和细粒度的报表。发布/部署自动化问题这些企业通常有一些自动化工具,但他们还需要以更灵活的方式来管理和驱动自动化工作──不必要将所有手工操作都在命令行中加以自动化。理想情况下,自动化工具应该能够在非生产环境下由非运营人员使用。
要开始优化发布流程,可以从问题识别开始:看看上面提到的哪种问题在你的团队中具有最高的优先级。

发布协调人

这是企业级IT组织中一个新出现的角色,其主要任务就是协调安排将企业级软件部署到预生产环境。对发布协调人的需求来自于以下几方面原因:
需要弥合开发运营的鸿沟
基础设施日益变得复杂:为了运营web应用,需要多层基础设施和多种平台
发布频率上升(由于敏捷和迭代式开发的引入)
分布式团队:位于全球多个地点的、包含外包人员的、混合开发/测试/基础设施的团队
发布协调人的角色(也被称为部署协调人或集成协调人)源自发布管理或发布工程团队。这个角色与航空交通管制有些类似──实时协调不同团队的行动,有效使用共享的资源(空域、航道、跑道、航站门),达到组织的总体目标(安全起降)。
传统意义上的发布管理往往只关注软件变更的计划与管理,发布协调则需要控制“将特定软件变更发布至生产环境”的整个过程。这项工作需要系统地管理所有与“将代码构建并部署到生产环境”相关的技术任务,也被称为“发布工程”。
变更管理是跟踪企业IT环境中各种变化──不管是应用程序还是基础设施的变化──的基本原则。变更管理ITIL v3的核心之一。

对DevOps的批评

有IT博客对“DevOps”这个标签进行了批评,认为它不过是系统管理员的精英至上论俱乐部在老调重谈一些现有的问题(参见“对此运动的批评”)。
分享到:
评论

相关推荐

    DevOps落地实践合集.zip

    DevOps 五大理念及其落地实践 研发运维一体化(DevOps)成熟度模型 中国DevOps现状调查报告及解读 构建企业DevOps的度量体系 DevOps实践指南精要 分布式敏捷和DevOps实践案例 AWS DevOps 助力爱乐奇大规模业务扩展 ...

    DEVOPS 成熟度模型

    DEVOps成熟度模型是一系列旨在评估组织在软件开发和交付过程中实施DEVOps实践有效性的标准。本模型分为七个章节,每个章节关注DEVOps流程的一个方面,其主要目的是为组织提供一个明确的成熟度路径,帮助它们从初始级...

    exin-devops所有课程相关考试

    DevOps是一种旨在促进开发(Development)和运维(Operations)团队之间协作与沟通的软件工程实践。随着敏捷开发的普及,DevOps应运而生,它强调快速交付高质量的软件产品,通过自动化流程来提高效率,确保软件在...

    devops--PPT演讲系列(11).rar

    devops主题系列演讲一共有14个部分,这是第11部分,每个部分里有10个大佬演讲的PPT,每个PPT都是独立的。 龙井-龙门阵之DevOps门外汉须知 罗伟-蘑菇街基于容器的全生命周期 DevOps 运营平台建设 牛晓玲&景韵-转型...

    简述DEVOPS.ppt

    DEVOPS 概述 DEVOPS 的历史可以追溯到计算机刚刚出现的时期,当时软件开发还是少数人通过高学历才能够掌握的技能。那时只有程序(Program),但没有软件(Software),所以那个时候编写程序的人员被称为程序员...

    DevOps实践:驭DevOps之力强化技术栈并优化IT运行

    《DevOps实践:驭DevOps之力强化技术栈并优化IT运行》是一本深入探讨DevOps理念、工具和技术的著作,旨在帮助企业提升IT运营效率,优化技术栈,促进开发与运维团队之间的协作。这本书中文高清版包含了完整的PDF内容...

    DevOps白皮书 EXIN_Devops_Whitepaper

    DevOps作为一种软件开发方法论,自2009年开始逐渐流行起来,其目的在于缩短系统的开发周期、提升软件质量、增强部署速度,从而更好地支持企业的业务战略并优化业务流程。《DevOps白皮书》是由EXIN出品,旨在向业界...

    DevOps Master认证考试样题.pdf

    DevOps Master认证考试是针对那些希望深入理解和实践DevOps理念的专业人士的一项专业资格认证。这份样题涵盖了DevOps的关键概念,包括精益管理、轻量级IT服务管理、知识体系以及团队多元性的价值。 1. 精益管理:在...

    研发运营一体化DevOps能力成熟度模型评估(完整版)表单

    DevOps是一种旨在促进开发(Development)和运维(Operations)团队之间协作与沟通的软件工程实践,以实现更快、更高质量的软件交付。随着数字化转型的推进,DevOps已经成为企业提升IT效率、敏捷性和创新能力的关键...

    Devops统一研发体系建设方案共31页.ppt

    DevOps 统一研发体系建设方案 本文档旨在介绍 DevOps 统一研发体系建设方案的整体架构和实施过程。该方案的目标是构建一个统一的研发平台,实现敏捷和 DevOps 的转型,提高应急管理能力和业务响应速度。 在 DevOps...

    Go/Golang DevOps运维开发实战集训营

    在“Go/Golang DevOps运维开发实战集训营”中,我们主要探讨的是如何利用Go语言,也称为Golang,进行DevOps实践以及与Kubernetes(k8s)的集成应用。这个集训营课程专注于2022年5月29日的最新技术趋势,旨在帮助...

    DevOps基础课程讲义

    DevOps 基础课程讲义 DevOps 是一种实践,旨在将开发和运维团队紧密合作,以提供高效、可靠的服务。它涵盖了从设计和开发过程一直到生产支持的整个服务生命周期。 DevOps 还要求运维人员在他们的系统工作中使用...

    Python DevOps运维开发实战集训营【高级班】冲刺班

    在本“Python DevOps运维开发实战集训营【高级班】冲刺班”中,学员将深入学习Python在DevOps领域的应用,以及与之相关的k8s(Kubernetes)技术。这个课程面向的是已经有一定基础的开发者,旨在通过实战训练提升其在...

    2020年中国DevOps现状调查报告精品报告2020.pdf

    在2020年的中国DevOps现状调查报告中,我们可以看到DevOps在中国的落地实践现状,包括DevOps的成熟度、应用现状、企业对于DevOps工具和技术的选择、DevOps转型现状以及面临的问题和挑战。报告基于1858份有效问卷,并...

    07-DevOps开发运维一体化.pdf

    标题“07-DevOps开发运维一体化.pdf”和描述“DevOps开发运维一体化”所要传达的核心知识点涉及DevOps的概念、价值、工具链和流程,以及它在企业中实施的优势和挑战。这些知识点是当代IT行业特别是软件开发和运维...

    state of devops 2018

    当前DEVOPS的发展变化情况. The Accelerate State of DevOps Report is the largest and longestrunning research of its kind. It represents five years of work surveying over 30,000 technical professionals ...

    DevOps.for.Web.Development.2016.10.pdf

    ### DevOps for Web Development #### 知识点一:DevOps 概念及核心原则 - **定义**:DevOps 是一种文化和实践方法,旨在通过自动化软件交付过程和基础设施变更来缩短系统变更从构建到生产的时间,同时保持高质量...

    DevOps开发运维一体化平台建设解决方案共36页.ppt

    "DevOps开发运维一体化平台建设解决方案" DevOps(Development and Operations)是指将软件开发(Dev)和运维(Ops)两个领域结合起来,实现软件的快速交付和高质量的运维。DevOps 的出现是为了解决传统的软件开发...

    开发运维一体化(devops)能力成熟度模型-1-3.rar

    开发运维一体化(DevOps)是一种旨在促进开发人员和运维团队之间紧密协作与沟通的文化、实践和工具集,以实现更快的软件交付和更高质量的产品。它借鉴了软件工程中的能力成熟度模型(CMMI,Capability Maturity ...

Global site tag (gtag.js) - Google Analytics