什么是 DevOps?
了解 DevOps 如何统一人员、流程和技术,以更快的速度为客户带来更好的产品。
DevOps 定义
DevOps 是开发 (Dev) 和运营 (Ops) 的复合词,它将人、流程和技术结合起来,不断地为客户提供价值。
DevOps 对团队意味着什么? DevOps 使以前孤立的角色(开发、IT 运营、质量工程和安全)可以协调和协作,以生产更好、更可靠的产品。通过采用 DevOps 文化、做法和工具,团队能够更好地响应客户需求,增强对所构建应用程序的信心,更快地实现业务目标。
DevOps 的好处
采用 DevOps 的文化、做法和工具的团队能够提升效率,以更快的速度构建更好的产品,从而获得更高的客户满意度。若要实现以下业务目标,这种改进的协作方式和生产能力不可或缺:
缩短上市时间
适应市场和竞争
保持系统稳定性和可靠性
缩短平均恢复时间
DevOps 和应用程序生命周期
DevOps 影响应用程序生命周期的规划、开发、交付和运营阶段。每个阶段都依赖于其他阶段,并且这些阶段并非特定于角色。在真正的 DevOps 文化中,每个角色在某种程度上都涉及到每个阶段。
计划
在计划阶段,DevOps 团队构思、定义和描述他们即将构建的应用程序和系统的特性和功能。他们在低粒度和高粒度级别上跟踪从单个产品任务到跨多个产品组合的任务进展。DevOps 团队以敏捷和直观地方式进行规划的一些方法包括创建积压工作 (backlog)、跟踪 bug、使用 scrum 管理敏捷软件开发、使用看板以及使用仪表板直观呈现进度。
开发
开发阶段包括编码的各个方面(编写、测试、评审)、团队成员集成代码,以及将代码构建为可部署到各种环境中的生成工件。DevOps 团队寻求在不牺牲质量、稳定性和生产效率的情况下快速创新。为此,他们使用高效的工具、自动化单调和手动步骤,并通过自动化测试和持续集成以小增量迭代。
交付
交付是以一致且可靠的方式将应用程序部署到生产环境中的过程。交付阶段还包括部署和配置构成这些环境的基础结构,该基础机构受到完全治理。
在交付阶段,团队定义了具有明确手动批准阶段的发布管理流程。他们还设置了自动入口,用于推动应用程序经历各个阶段,直到提供给客户。这些流程的自动化使这些流程可伸缩、可重复并且可控制。这样,使用 DevOps 的团队就可以轻松、自信、放心地频繁交付。
运营
运营阶段包括维护、监视和对生产环境中的应用程序进行故障排除。在采用 DevOps 做法时,团队致力于确保系统的可靠性、高可用性,并在加强安全性和治理的同时实现零停机的目标。DevOps 团队希望在问题影响客户体验之前发现问题,并在问题发生时迅速解决问题。保持这种警惕性需要丰富的遥测、可操作的警报以及全面了解程序和基础系统。
DevOps 文化
采用 DevOps 做法可以通过技术来实现流程的自动化和优化,但这一切都需要从组织内部的文化和参与的人员开始。培养 DevOps 文化的挑战在于需要深入改变人们的工作和协作方式。但是,通过推行 DevOps 文化,组织可以创造一个有利于高绩效团队成长的环境。
协作、可见性和一致性
健康的 DevOps 文化的一个标志是团队间能够协作,首要的便是可见性。开发和 IT 运营等不同团队必须能够相互分享 DevOps 流程、优先级和关注点。这些团队还必须能够共同规划工作,并统一与业务相关的成功目标和衡量标准。
范围和责任的转变
当团队统一时,他们拥有所有权并参与其他生命周期阶段,而不仅仅是他们的角色对应的阶段。例如,开发人员不仅要对开发阶段的创新和质量负责,还要对他们的改变在运营阶段带来的性能和稳定性负责。同时,IT 操作员一定要在规划和开发阶段中包括治理、安全性和合规性。
缩短发布周期
DevOps 团队通过在短周期内发布软件保持敏捷。因为进度是渐进式的,缩短发布周期可以让计划和风险管理更容易,同时也可减少对系统稳定性的影响。缩短发布周期还可以让组织适应和应对不断变化的客户需求和竞争压力。
持续学习
高绩效的 DevOps 团队形成了一种成长思维。他们快速失败,然后将经验教训融入到他们的流程中,不断改进,提高客户满意度,加速创新和适应市场。DevOps 是一个旅程,所以总有成长的空间。
DevOps 做法
除形成 DevOps 文化之外,团队还通过在整个应用程序生命周期中实施特定做法,以充分利用 DevOps。其中一些做法有助于加速、自动化和改进特定阶段。其他的跨越几个阶段,帮助团队创建可帮助提高生产效率的无缝进程。
持续集成和持续交付 (CI/CD)
配置管理是指管理系统中资源(包括服务器、虚拟机和数据库)的状态。使用配置管理工具,团队能够以一种可控和系统的方式进行更改,因此降低了修改系统配置的风险。团队使用配置管理工具来跟踪系统状态并帮助避免配置漂移,即避免系统资源的配置随时间偏离为其定义的目标状态。
通过与基础设施即代码结合使用,系统定义和配置都很容易进行模板化和自动化,帮助团队大规模地操作复杂的环境。
版本控制
版本控制是管理各版本中代码的做法,用于跟踪修订和更改历史记录,使代码易于评审和恢复。通常使用版本控制系统(比如 Git)来实现这种做法,这些系统允许多个开发人员协作编写代码。有关合并在相同文件中发生的代码更改、处理冲突以及将更改回滚到早期状态,这些系统具有一个清楚的流程。
使用版本控制是一个基本的 DevOps 做法,可帮助开发团队协同工作,在团队成员之间划分编码任务,并存储所有代码,以便在需要时轻松恢复。
版本控制也是其他做法(如持续集成和基础结构即代码)中的必要元素。
敏捷软件开发
敏捷是一种软件开发方法,注重团队协作、客户和用户反馈,以及高度适应在短期发布周期内的变化。采用敏捷的团队向客户提供持续的更改和改进,收集他们的反馈,然后吸取经验并根据客户的需求和需要进行调整。敏捷与其他更传统的框架(如瀑布框架)有本质的不同,瀑布框架包括由顺序阶段定义的较长的发布周期。看板和 Scrum 是两种与敏捷相关的热门框架。
基础结构即代码
基础结构即代码以一种描述性的方式定义系统资源和拓扑,团队可以像编码一样管理这些资源。这些定义也可以存储并在版本控制系统中进行版本控制以及像代码一样进行评审和还原。
使用基础设施即代码有助于团队以可靠、可重复和可控的方式部署系统资源。基础设施即代码也有助于自动化部署并降低人为错误的风险,特别是对于复杂的大型环境。这种可重复、可靠的环境部署解决方案允许团队维护与生产环境相同的开发和测试环境。将环境复制到不同的数据中心和云平台同样变得更加简单和高效。
配置管理
配置管理是指管理系统中资源(包括服务器、虚拟机和数据库)的状态。使用配置管理工具,团队能够以一种可控和系统的方式进行更改,因此降低了修改系统配置的风险。团队使用配置管理工具来跟踪系统状态并帮助避免配置漂移,即避免系统资源的配置随时间偏离为其定义的目标状态。
通过与基础设施即代码结合使用,系统定义和配置都很容易进行模板化和自动化,帮助团队大规模地操作复杂的环境。
持续监视
持续监视意味着能够全面、实时地了解整个应用程序堆栈(从运行应用程序的基础结构到更高级别的软件组件)的性能和运行状况。可查看的内容包括遥测和元数据集合,以及需要引起操作员注意的预定义条件警报的设置。遥测包括从系统各个部分收集的事件数据和日志,这些数据和日志存储在可以分析和查询的地方。
高绩效的 DevOps 团队会确保他们设置了可操作且有意义的警报,并收集了丰富的遥测数据,以便能够从大量数据中获得见解。这些见解有助于团队实时解决问题,并了解如何在未来的开发周期中改进应用程序。
DevOps 工具
团队有许多 DevOps 工具来帮助他们促进组织中的 DevOps 文化。大多数团队依赖于多种工具,构建自定义工具链,以满足应用程序生命周期中每个阶段的需求。虽然采用某个特定工具或技术与采用 DevOps 不同,但当 DevOps 文化存在并定义了流程时,如果人们选择了适当的工具,就可以实现和简化 DevOps 做法。获取工具使用 DevOps:
DevOps 和云
云的采用从根本上改变了团队生成、部署和操作应用程序的方式。再加上采用 DevOps,团队现在有更多的机会改进他们的做法,更好地为客户服务。
云敏捷性
由于能够使用无限资源快速预配和配置多区域云环境,因此团队可以敏捷地部署应用。现在,团队不必购买、配置和维护物理服务器,而是在几分钟内创建复杂的云环境,当不再需要时关闭它们。
Kubernetes
随着越来越多的应用程序使用容器技术,Kubernetes 正在成为大规模编排容器的行业解决方案。在 Kubernetes 时代,将通过 CI/CD 管道构建和部署容器并且在生产环境中监视这些容器的过程自动化正在成为基本做法。
无服务器计算
由于大部分基础结构管理任务转移到了云提供商,团队可以专注于应用,而不是基础结构。利用无服务器计算可以在不配置和维护服务器的情况下运行应用程序。一些选项降低了部署和操作的复杂度和风险。
开始 DevOps 之旅
随着各种各样的做法和解决方案的出现,DevOps 起初看起来似乎势不可挡。关键是从小处着手,并向他人学习。
常见问题解答
-
DevOps 需要通过组织中的不同角色来实施,并且其中几个角色需要密切协作。在大多数情况下,DevOps 角色包括开发、IT、运营、安全和支持。
-
DevOps 不限于单个角色。参与应用程序生命周期各阶段的每个人都必须接受 DevOps 文化。然而,在一些组织中,一些人员或团队仅关注实现自动化、定义做法和实施 CI/CD 管道。有时,这些角色的官方头衔是 DevOps 工程师或 DevOps 专家。
-
在大型组织中采用 DevOps 可能极具挑战。改变大型组织的文化以及标准化流程和工具需要耐心和毅力。在大多数大型组织中,都有 DevOps 做法的早期采用者。随着这些做法走向成熟并产生积极的结果,其他团队通常会跟着开始他们的 DevOps 之旅。
-
DevOps 的真正意义是为客户提供持续的价值。衡量采用 DevOps 的结果时必须考虑业务目标。DevOps 团队围绕这些目标进行调整,并使用短发布周期实现这些目标。周期非常短,因此可以对市场做出敏捷的反应,并通过客户反馈不断吸取经验。
-
DevOps 和敏捷都是用于生产产品、进行发布或发行的现代软件开发框架。DevOps 是一种文化,促进软件开发和维护中所有角色之间的协作。敏捷是一种开发方法,在需求不断变化的常见现实中保持工作效率和促进发布。DevOps 和敏捷并不是相互排斥的,而是经常搭配使用。
-
持续集成与持续交付和持续部署都是自动化软件交付阶段的做法。