都开发3年程序员了,还不懂微服务交付:软件交付演进过程模型?

微服务交付

软件交付作为软件工程中的一个重要环节,在过去的软件发展历程中一直不断地演进和优化。从最早的瀑布式软件开发过程到敏捷开发流程,从Scrum到DevOps,针对软件交付的方法论和技术也一直在延续发展。目前,基于容器技术的发展,软件交付的频率从按月交付转变为按天交付,交付平台工具和软件架构的发展使交付的成本越来越低,耗费的时间越来越少,不仅提高了工程师的交付、运维、生产效率,也极大地缩短了用户体验软件价值的周期。

持续集成指软件开发人员在开发完成后进行系统集成的过程,包括编译、发布、自动化测试等步骤。而持续交付建立在持续集成的基础上,它将最终产品发布给用户。

目前,越来越多开发者采用微服务进行软件构建和云原生架构的开发,对自动化运维工具的需求也越来越大。微服务拆分后,细粒度的服务足够小,可以独立部署,能做到对变化及时响应,持续集成和持续部署成为微服务规模化交付的基石。

本章我们将介绍软件交付的演进历史,同时会探讨微服务采用什么工具保证持续集成与持续交付,最后介绍脱胎于微服务架构思想的容器技术如何来帮助微服务持续集成和交付。

软件交付演进

从宏观角度来说,软件开发活动同任何事物一样,都存在诞生、成长、成熟、衰亡的生命过程,一般称为“软件生命周期”。在软件发展演进历程中,软件过程模型和交付方式都发生了革命性的演进和进化。

软件过程模型

所谓软件过程模型,就是一种开发策略,这种策略针对软件工程的各个阶段提供了一套范形,使工程的进展达到预期目的。下面我们来看不同时期的软件过程模型。

瀑布模型(Waterfall Model)瀑布模型提出了软件开发的系统化的、顺序的方法。其流程从收集需求开始,通过分析、设计、编码、测试和维护过程,最终提供一个完整的软件,并提供持续的技术支持,如下图所示。

都开发3年程序员了,还不懂微服务交付:软件交付演进过程模型?_第1张图片

模型特点:

  • 阶段间具有顺序性和依赖性。必须等前一阶段的工作完成后,才能开始后一阶段的工作。

  • 文档驱动的开发方式,没有合格的文档就是没有完成该阶段的任务。

  • 前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能得到正确的结果。

  • 每个阶段结束前都要对所完成的文档进行评审,以便及早发现问题,改正错误。但是事实上,越是早期阶段犯下的错误,暴露出来的时间越晚,排除故障改正错误所需付出的代价也就越大。因此,“及时审查”是保证软件质量、降低软件成本的重要措施。

增量模型(Incremental Model)

增量模型指把软件产品作为一系列增量构件来设计、编码、集成和测试。每次把新的构件集成到现有软件中时,所得到的软件必须是可测试的。它对软件过程的考虑是:在整体上按照瀑布模型的流程实施项目开发,以方便对项目的管理;但在软件实际开发过程中,却将软件系统按功能分解为许多增量构件,并以构件为单位逐个创建与交付,直到全部增量构件创建完成,并都被集成到系统中,交付用户使用。

模型特点:

  • 当使用增量模型时,第一个增量往往是核心的产品。

  • 客户对每个增量的使用和评估都作为下一个增量发布的新特性和功能。

  • 该模型的每一个线性序列都产生软件的一个可发布的“增量”。

基于构件的开发模型

基于构件的开发方法指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化的成品构件。基于构件的开发模型具有许多螺旋模型的特点,本质上它是演化模型,需要以迭代方式构件软件。其不同之处在于,基于构件的开发模型采用预先打包的软件构件来开发应用领域。

模型特点:

  • 应用软件可由预先编好的、功能明确的产品构件定制而成,并用不同版本的构件实现应用的扩展和更新。

  • 利用模块化方法,构件可复用。提高了开发效率,将复杂的难以维护的系统分解为互相独立、协同工作的构件,并努力使这些构件可反复重用。

  • 突破时间、空间及不同硬件设备的限制,利用客户和软件之间统一的接口实现跨平台的互操作。

统一过程模型

统一过程模型(Rational Unified Process,RUP)是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程,由UML方法和工具支持。迭代是将整个软件开发项目划分为许多“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素,如需求、分析设计、实施、测试、部署,以及内部和外部的发布,如下图所示。

都开发3年程序员了,还不懂微服务交付:软件交付演进过程模型?_第2张图片

模型特点:

  • RUP可以用二维坐标来描述。横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述的术语 主 要 包 括 周 期 ( Cycle ) 、 阶 段 ( Phase ) 、 迭 代(Iteration)和里程碑(Milestone)。

  • 纵轴以内容来组织,是自然的逻辑活动,体现开发过程的静态结构,用来描述的术语主要包括各种项目活动及工作流程。

敏捷开发(Agile Development)

敏捷开发的总体目标是通过“尽可能地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷开发使用户能够在开发周期的后期增加或改变需求。敏捷开发的典型方法有很多,每一种方法都基于一套原则,这些原则实现了敏捷开发所宣称的理念(敏捷宣言)。

持续集成、交付、部署(CI/CD)

  • 持续集成(Continuous Integration,CI):指频繁地将代码集成到主干,目的是使产品能够快速迭代,同时保持高质量。其核心措施是,代码集成到主干之前,必须通过所有的测试用例,只要有一个测试用例失败,就不允许集成到主干。

  • 持续交付(Continuous Delivery,CD):指在一个短周期内完成软件产品的产出过程,以保证软件可以稳定、持续地保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

  • 持续部署(Continuous Deployment,CD):是持续交付的下一步,指代码经过评审后,自动部署到生产环境。可以理解为QA测试完成后,应用准备部署上线生产环境,如下图所示。

都开发3年程序员了,还不懂微服务交付:软件交付演进过程模型?_第3张图片

模型特点:

  • 快速发现错误,每完成一点更新,就集成到主干,防止分支大幅度偏离主干。

  • 持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

  • 持续部署的前提是,能自动化完成测试、构建、部署等步骤。。。。

本文给大家讲解的内容是微服务交付:软件交付演进-软件过程模型

  1. 下篇文章给大家讲解的内容是微服务交付:软件交付演进-交付演进历程进阶
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

你可能感兴趣的:(微服务,架构,云原生)