DevOps
DevOps概念
- DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
- 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 做法,有助于开发团队协同工作、在团队成员之间划分编码任务,并存储所有代码,以便在需要时轻松恢复。
- 版本控制也是其他做法(如持续集成和基础结构即代码)中的必要元素。
敏捷软件开发
- Agile 是一种软件开发方法,注重团队协作、客户和用户反馈,以及高度适应在短期发布周期内的变化。采用 Agile 的团队向客户提供持续的更改和改进,收集他们的反馈,然后吸取经验并根据客户的需求和需要进行调整。Agile 与其他更传统的框架(如瀑布框架)有本质的不同,瀑布框架包括由顺序阶段定义的较长的发布周期。看板和 Scrum 是两种与 Agile 相关的热门框架。
基础结构即代码
- 基础结构即代码以一种描述性的方式定义系统资源和拓扑,团队可以像编码一样管理这些资源。这些定义也可以存储并在版本控制系统中进行版本控制以及像代码一样进行评审和还原。
- 使用基础设施即代码有助于团队以可靠、可重复和可控的方式部署系统资源。基础设施即代码也有助于自动化部署并降低人为错误的风险,特别是对于复杂的大型环境。这种可重复、可靠的环境部署解决方案允许团队维护与生产环境相同的开发和测试环境。将环境复制到不同的数据中心和云平台同样变得更加简单和高效。
配置管理
- 配置管理是指管理系统中资源(包括服务器、虚拟机和数据库)的状态。使用配置管理工具,团队能够以一种可控和系统的方式推出更改,因此降低了修改系统配置的风险。团队使用配置管理工具来跟踪系统状态并帮助避免配置漂移,即避免系统资源的配置随时间推移偏离为其定义的目标状态。
- 通过与基础结构即代码结合使用,系统定义和配置都可以轻松地进行模板化和自动化,有助于团队大规模运营复杂环境。
持续监视
- 持续监视意味着能够全面、实时地了解整个应用程序堆栈(从运行应用程序的基础结构到更高级别的软件组件)的性能和运行状况。可查看的内容包括遥测和元数据集合,以及需要引起操作员注意的预定义条件警报的设置。遥测包括从系统各个部分收集的事件数据和日志,这些数据和日志存储在可对其进行分析和查询的地方。
- 高绩效的 DevOps 团队会确保他们设置了可操作且有意义的警报,并收集了丰富的遥测数据,以便可以从大量数据中获得见解。这些见解有助于团队实时解决问题,并了解如何在未来的开发周期中改进应用程序。
文章紧扣主题,观点鲜明,展现出深刻的思考维度。
?哲理类评语?
文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。
文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。