软件交付周期越来越短,而另一方面,应用程序的规模越来越大。软件开发人员和IT运营商面临着找到解决此问题的压力。而有一个全新的角色,叫做DevOps,它致力于支持软件构建和交付。
本章包括以下主题:
- 软件交付方法是如何改变的?
- 什么是微服务,为什么人们采用这种架构?
- DevOps如何支持构建应用程序并将其交付给用户?
Software delivery challenges
(软件交付挑战)
构建一个计算机应用程序并将其交付给客户,已经过了充分的论证,并且随着时间的推移不断演变。它与软件开发生命周期(SDLC)息息相关;有这么几种经典
的演变过程、方法论和发展历史,在本节中,我们将详细描述它。
Waterfall and physical delivery
(瀑布模型与物理交付)
早在20世纪90年代,软件交付就采用了物理方法,如软盘或CD-ROM。因此,SDLC是一个非常长期的计划,因为它不容易(重新)交付给客户。
当时,一个主要的软件开发方法是瀑布模型,它有需求/设计/实现/验证/维护阶段,如下图所示:
在这种情况下,我们不能回到前一个阶段。例如,在开始或完成实现阶段之后,不允许返回到设计阶段(例如,查找技术可扩展性问题),因为这将会影响到进度和成本,项目倾向于继续并完成发布,然后进入下一个发布周期,包括新的设计。
它与物理软件交付完全匹配,因为它需要与物流管理部门协调,后者向用户发布软盘/光盘。过去,瀑布模型和实物交付需要一年到几年的时间。
Agile and electrical delivery
(敏捷与电子交付)
几年后,互联网被广泛接受,随后软件交付方式也从物理方式转变为电子方式,如在线下载。因此,许多软件公司(也被称为网络公司)试图找出如何缩短SDLC流程,以便交付能够击败竞争对手的软件。
许多开发人员开始采用新的方法,如增量、迭代或敏捷模型,然后更快地交付给客户,这样即使发现了新的缺陷,也更容易更新并通过电子交付作为补丁交付给客户,Microsoft Windows update也从Windows 98开始引入的。
在这种情况下,软件开发人员只编写一个小逻辑或模块,而不是一次性地编写整个应用程序。随后它便被交付给QA,开发人员继续添加一个新模块,然后再次交付给QA。
当所需的模块或功能准备就绪时,将按下图所示进行发布:
该模型使得SDLC周期和软件交付速度更快,并且在过程中易于调整,因为整个周期缩短至几周到几个月,可以快速调整。
尽管这种模式目前受到大多数人的青睐,但在当时,应用软件交付意味着软件二进制,例如设计用于在客户PC上安装和运行的EXE程序。另一方面,基础设施(如服务器和网络)几乎是静态的,并且需要预先设置好。因此,SDLC还不打算将这些基础设施也纳入其中。
Software delivery on the cloud
(云软件交付)
又过了几年,智能手机(如iPhone)和无线技术(如Wi-Fi和4G网络)被广泛接受,软件应用也从二进制变成了在线服务。web浏览器是应用软件的接口,不再需要安装。另一方面,基础设施变得动态,因为应用程序需求不断变化,生产效率也需要提高。
虚拟化技术和软件定义网络(SDN)使服务器机器具有动态性。现在,Amazon Web services(AWS)和Google cloud Platform(GCP)等云服务可以很容易地创建和管理动态基础设施。
现在,基础设施是软件开发交付周期的一个重要组成部分,因为应用程序是在服务器端而不是在客户机上安装和运行的。
正因为如此,软件和服务交付周期现在只需要几天到几周的时间。
Continuous Integration
(持续集成)
如前所述,软件交付环境不断变化;然而,交付周期越来越短。为了实现更高质量的快速交付,开发人员和QA开始采用一些自动化技术。持续集成(CI)是目前流行的自动化技术之一。CI包含一些工具的组合,如版本控制系统(VCS)、构建服务器和测试自动化工具。
VCS帮助开发人员在中央服务器上维护程序源代码。它可以防止重写或与其他开发人员的代码冲突,还可以保留历史记录。因此,保持源代码的一致性并将其传递到下一个周期变得更容易。
与VCS一样,有一个集中的构建服务器,它连接VCS,以便在开发人员将代码更新到VCS时定期或自动检索源代码,同时触发新的构建。如果构建失败,它会及时通知开发人员。因此,,它可以帮助开发人员避免将有BUG的代码提交到VCS。
测试自动化工具还与构建服务器进行集成测试,后者在构建成功后调用单元测试程序,然后将结果通知开发人员和QA。它有助于识别何时有人编写了错误代码并存储到VCS中。
CI的整个流程如下图所示:
CI不仅可以帮助开发人员和QA提高质量,还可以缩短应用程序或模块包的归档周期。在向客户提供电子交付的时代,CI已经足够了。但是现在则远远不够,因为在当前,交付给客户意味着部署到服务器。
Continuous Delivery
(持续交付)
CI plus部署自动化是服务器应用程序向客户提供服务的理想过程。然而,还有一些技术挑战需要解决。如何向服务器交付软件?如何优雅地关闭现有应用程序?如何替换和回滚应用程序?如果系统库也需要更改,如何升级或替换?如何根据需要修改操作系统中的用户和组设置?等等。
因为基础设施包括服务器和网络,所以它都依赖于诸如Dev/QA/staging/production这样的环境。每个环境都有不同的服务器配置和IP地址。
持续交付(CD)是一种可以实现的实践;它是CI工具、配置管理工具和编排工具的组合:
Configuration management
(配置管理)
配置管理工具有助于配置一个操作系统,包括用户、组和系统库,还可以管理多个服务器,如果替换服务器,这些服务器将与所需的状态或配置保持一致。
它不是脚本语言,因为脚本语言执行基于脚本的命令。如果我们执行两次脚本,可能会导致一些错误,例如,尝试创建同一个用户两次。另一方面,配置管理会查看状态,因此如果已经创建了用户,配置管理工具不会执行任何操作。但是,如果我们意外或故意删除用户,配置管理工具将再次创建该用户。
它还支持将应用程序部署或安装到服务器。如果告诉配置管理工具下载应用程序,然后设置它并运行它,它会尝试去运行这些步骤。
此外,如果告诉配置管理工具关闭应用程序,然后下载并替换到新的软件包(如果可用),然后重新启动应用程序,它将保持最新版本。
当然,有些用户只想在需要时更新应用程序,例如蓝绿部署。配置管理工具也允许您手动触发执行。
tips
蓝绿部署是一种准备两组应用程序栈的技术,然后只有一个环境(例如:Blue)为生产服务。然后,当需要部署新版本的应用程序时,部署到另一侧(例如:Green),然后执行最终测试。如果工作正常,更改负载均衡器或路由器设置,将网络流从Blue切换到Green。然后,Green变为生产,而Blue变为休眠状态,等待下一个版本的部署。
Infrastructure as code
基础设施即代码
配置管理工具不仅支持操作系统或虚拟机,还支持云基础设施。如果需要在云上创建和配置网络、存储和虚拟机,则需要一些云平台操作。
但配置管理工具有助于通过配置文件自动设置云基础设施,如下图所示:
配置管理相对于维护操作手册标准操作程序(SOP)有一些优势。例如,使用Git等VCS控制软件维护配置文件,可以跟踪环境设置如何更改的历史记录。
复制环境也很容易。例如,您需要在云上的其他环境,如果遵循传统方法(即读取SOP文档以操作云),则它始终会存在潜在的人为错误和操作错误。另一方面,我们可以执行配置管理工具,该工具可以快速、自动地在云上创建环境。
Orchestration
(编排)
编排工具也被归类为配置管理工具之一。但是,在配置和分配云资源时,它更加智能和动态。例如,编排工具管理多个服务器资源和网络,然后当管理员希望增加应用程序实例时,编排工具可以确定可用的服务器,然后自动部署和配置应用程序和网络。
尽管编排工具超出了SDLC的范围,但当需要扩展应用程序和重构基础设施资源时,它有助于持续交付。
总的来说,SDLC已经通过几个过程、工具和方法来实现快速交付。最终,软件(服务)交付只需要几个小时到一天的时间。同时,为了实现更大型和更丰富的应用,软件体系结构和设计也在不断发展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。