Learn DevOps-第一章:Introduction

发布时间 2023-11-02 09:25:43作者: Offer多多

Introduction

DevOps的定义有很多种,AWS对其定义如下:

DevOps is the combination of cutural philosophies, practices, and tools that increases an organization's ability to deliver applications and services at high velocity.”

即DevOps是一种理念、实践和工具的组合,可以帮助组织高速交付应用程序。此定义的重点是持续交付和保证正确性和保证正确性和可靠性。通俗来说,它是一种软件开发和运维的实践和文化,旨在加强开发团队和运维团队之间的协作、自动化和效率。他的目标是缩短软件开发周期,提高软件质量,以及使交付软件更加可靠和可预测。

接下来我们将看一下软件开发是如何向DevOps发展的,软件开发的最初几十年是围绕瀑布模型展开的。瀑布模型处理软件开发的方式与处理构建房地产项目的方式相同,我们将在多个阶段中构建软件,这些阶段可能会持续几周到几个月。如下图所示,每个阶段都可能花费几周的时间,因此业务部门需要几个月才能看到应用程序的工作版本。

构建优秀的软件程序有几个关键的要素,首先是沟通的重要性,软件开发是一项涉及多种技能的多学科工作,人和人之间的沟通交流对于软件项目的成功至关重要。构建优秀软件的下一个要素是自动化,软件开发涉及广泛的活动,手动操作速度慢且容易出错,引入自动化是至关重要的。最后一个要素是快速获得反馈,我们不能等几个月才知道程序存在问题。

 

Agile

Agile将业务团队和开发团队合并成一个团队,这个团队致力于在称为sprints的小迭代中构建大的的软件。Agile专注于在一个sprint中完成所有阶段,而不是在每个开发阶段花费数周或者数月。我们可以从一个称为用户故事的小需求(如图中的plan)开始,然后带着它经历各种开发周期。

这有对加强团队合作有什么帮助呢?正如我们前面所提到的,Agile将业务和开发团队结合在一起。业务团队负责定义要构建的内容,开发团队负责构建符合要求的产品。当我们提到开发的时候,我们将所有从事设计、编码、测试和打包软件的人。两个团队是通过引入一个叫做产品所有者(product owner)的业务代表而结合在一起的。Agile团队可以随时联系产品所有者,更加清楚地理解业务目标,这样做就可以确保团队构建的最终产品是业务所需要的。

Agile团队关注的自动化领域是什么呢?

Agile团队的主要关注点是尽可能早地发现缺陷。在开发软件时,存在各种各样的缺陷。功能缺陷是指产品不符合预期要求。代码质量错误等技术错误缺陷使得软件的维护变得困难,一般来说,Agile团队专注于编写出色的单元测试来测试方法和类,此外还专注于编写出色的自动化集成测试来测试模块和应用程序。代码质量检查也通过使用Sonar之类的工具来评估应用程序的静态代码质量而引入。现在,如果我们有单元测试,集成测试,和很好的代码质量检查,这就足够了吗?我们需要连续进行这些检查。一旦我们将代码提交到Github仓库中,我们就想运行单元测试,做代码质量检查,我们还想打包应用程序,运行集成测试,这就是所谓的持续整合

那么下一个问题是,Agile是如何促进获得即时反馈的?

最重要的因素是,企业不需要等待好几个月才能看到最终产品,在每一个sprint结束时,都会向包括架构和业务团队在内的所有利益相关者演示产品。所有的反馈都被用于为下一个sprint确定用户故事的优先级。这样做的结果是,来自架构和业务团队的反馈被用于增强每一个sprint的产品。因此,团队构建的最终产品是业务部门非常满意的。

实现快速反馈的另一个因素是持续集成(continuous integration)。如果我将一些代码提交到版本控制中,但是有一个缺陷,会发生什么事?一个Unit test会失败,我们能立刻知道。那如果我编写的某段代码不符合代码质量标准呢?Build会立刻失败,我会收到电子邮件提醒。到目前为止,我们研究了Agile如何帮助团队更好地沟通,获得即时反馈和自动化。现在我们想知道,Agile真正成功了吗?我想是的,通过专注于改善开发和业务团队之间的沟通,专注于发现早期的各种缺陷,Agile将软件开发带到了下一个层次。那么是否意味着旅程停止了?不,新的挑战已经出现,我们开始转向微服务架构,构建许多小型的API,而非大型应用程序。新的挑战是什么呢?新的挑战在于运营,我们不再是一个月发布一个单体,而是每周发布数百个微小服务,有时候甚至每天都发布。调试微服务中的问题并了解微服务中发生的情况变得非常重要,是时候在软件开发中使用一个新的流行语了,即DevOps,接下来,我们将详细讨论。

DevOps

DeVOps的重点是什么呢?是加强开发团队和运营团队之间的沟通。我们如何简化软件部署呢?如何让开发团队更容易看到运营团队所做的工作呢?

DevOps做的第一件事就是让运营团队与开发团队非常接近,在成熟的企业中,开发和运营被合并到一个团队中,分享共同的目标,了解另一个团队面临的挑战。在处于DevOps演进早期阶段的企业中,通过将运营团队中的演示着引入Scrum团队,并让他们参与sprint活动,改善了沟通。因此,DevOps试图通过让运营团队尽可能接近开发团队来加强沟通。

下一个问题是,DevOps关注的automation是什么?除了Agile的重点领域(持续集成和自动化测试)之外,DevOps还专注于自动化运营团队的活动。运营团队通常参与服务器配置、在这些服务器上安装软件、配置软件和部署应用程序,DevOps专注于自动化这些步骤。

与DevOps相关的关键术语是持续部署(Continuous Deployment),持续交付(Continuous Delivery)和基础架构(IAC,Infrastructure as code)即代码。持续部署是指在测试环境中持续部署新版本的软件,持续集成的重点是运行测试和代码质量检查。持续部署通过在环境中添加部署而将其提升到一个新的水平。

在Google、Facebook等更成熟的组织中,持续交付有助于持续将软件部署到生产环境。除了运行测试、构建软件和打包应用程序之外,还将应用程序部署到测试环境中,并在获得QA团队和UAT团队的正式批准后,将软件直接部署到下一个环境中,直至生产环境。

下一个重点领域是IAC,是关于像对待应用程序代码一样对待基础结构。这一切都是关于使用代码和配置以自动化的方式创建基础架构,即服务器、负载平衡器和数据库。

 

那么如何获得即时反馈呢?

正如我们之前提到的,DevOps拉近了运营和开发团队的距离,开发和运营是同一个团队的一部分,所以整个团队都了解与运营相关的挑战和与开发相关的挑战。任何操作问题都会得到开发人员的快速关注,在软件上线过程中遇到的任何挑战都会引起运营团队的早期关注。由于持续交付,如果进行了可能破坏测试或者临时环境的代码更改或配置更改,在几个小时内我们就可以知道。而由于IAC,开发人员可以自行配置环境、部署代码和查找问题,而无需运营团队的任何帮助。总而言之,DevOps旨在将软件开发提升到新的水平。

总而言之,Agile和DevOps是帮助我们改进软件开发的两种有效的方法。