架构师必知必会系列:持续交付与敏捷开发

发布于:2023-09-27 ⋅ 阅读:(98) ⋅ 点赞:(0)

作者:禅与计算机程序设计艺术

1.简介

“架构师”这个职业名词在国际上越来越受到关注。特别是在IT领域中,越来越多的人正从事着“架构师”或“设计师”的工作。而“架构师”作为一个新的职位名称,给予了更多的机遇与挑战。

就目前而言,“架构师”职位的需求量远远超出了当前的IT行业发展潮流。许多技术人员需要不断地对技术发展方向进行调整、优化、重构,以提升业务运营效率、降低成本、提高用户体验等。基于这个现象,如何将架构师的工作成果转化为实际价值?如何在架构师面临的复杂环境中快速取得突破?如何更好地保障架构师的生命安全?这些都是众多技术人员研究并解决的问题。

为什么要写这篇文章

“持续交付”(Continuous Delivery/Deployment)是指频繁地将软件应用部署到生产环境,频繁发布新版本供消费者使用,及时响应客户反馈,保证软件质量。而“敏捷开发”(Agile Development)则是一种敏捷的软件开发方式,其中包括精益和适应性的方法论。相对于传统的开发模式,它强调迭代开发、循序渐进、小步快走,以及引入用户参与的方式。因此,作为一名“架构师”,你的责任就是帮助团队实现持续交付、敏捷开发,并带领团队实现架构演进。

如今,云计算、容器化、微服务架构已经成为主流架构风格。而在这些架构下,软件的规模变得愈加庞大,越来越难以仅靠人力完成软件架构设计、开发和测试。另外,复杂系统中存在着各种非功能性要求,如可用性、可伸缩性、容错性、可维护性等。如何在架构设计过程中考虑这些非功能性要求、并使之落实到产品的开发阶段,是每个架构师都应该关心的问题。然而,由于软件架构往往是一个跨界、跨部门的整体工作,很少有统一的体系能够有效支持企业在架构设计、开发过程中的协同合作。这就导致企业架构师往往需要单枪匹马的独自承担其复杂的任务,这样既无法达成共识,也无法汇总成果,最终造成效率低下,产品质量下降。为了避免这种局面,“架构师必知必会系列:持续交付与敏捷开发”的文章可以为读者提供一些参照和借鉴。

本系列文章主要内容

1、背景介绍

云计算(Cloud Computing)的蓬勃发展,带动了IT行业的革命性转型,改变了传统IT组织结构的格局。传统的组织架构中的一线办公室与中心数据中心正在被互联网、移动端、云端等新技术所代替。而新兴的云计算平台则提供了高度可扩展性、弹性、成本效益以及灵活配置等优势。在云计算平台上构建企业级架构,成为一项全新的架构设计任务。

2、基本概念术语说明

(1)交付

交付,英文Delivery,是指在计划、文档、测试等环节之后,软件工程师向终端用户、管理层、顾客或其他相关方提供产品或者服务的过程。即把产品或者服务交付给最终的消费者。

(2)敏捷开发

敏捷开发(agile development)是一种软件开发方法,强调迭代开发、循序渐进、快速反馈、可重复使用、简单而直接。它是一种能够满足瀑布模型的日常工作流程,旨在以最短时间内完成交付,并且具有较高的软件可靠性。敏捷开发的目标是在相当短的时间周期内,提供一个可用的产品,并通过不断的反馈和改进不断完善。

(3)迭代

迭代,英文Iteration,是指项目的某一阶段,反映的是产品或项目某个特性的变化,同时也是一种软件开发过程。其间通常会由多个小组成员、人员合作完成。每一次迭代结束后都会产生新版或更新的产品或软件,迭代也称为Sprint,1个Sprint通常包含多个特性或故事。

(4)持续集成

持续集成(continuous integration)是一种软件开发实践,强调开发人员频繁提交代码,让整个开发流程自动运行。持续集成的好处有很多,首先,频繁的代码提交减少了代码冲突,可以更及时的发现错误,提高代码质量;第二,自动化测试可以提前发现问题,改善开发流程;第三,不同的开发人员可能在不同分支上开发,而CI可以帮助代码合并,降低代码的冲突程度。

(5)蓝绿部署

蓝绿部署(blue-green deployment)是指在部署新版本的时候,先用一组服务器处理生产流量,如果顺利的话,就立即切换过去;如果出现问题,再把流量切回老的主机上。其目的是尽量减少用户的体验损失。

(6)A/B测试

A/B测试(A/B testing),中文名称是双样本对照试验,是一种比较两个产品之间差异的一种科学的方法。A/B 测试的目的在于确定在某项试验中哪种方案的效果更好,测试方法一般有两种,双盲法和双固定法。双盲法指的是同时让两组受试者盲目接受两种方案,随后让对照组做选择性记忆测试,判断哪种方案的效果更好。双固定法指的是两组受试者分别固定一个方案,让另一组受试者作决定。

(7)快速回滚

快速回滚(rollback)是指在软件发布上线过程中,出现了意外情况,需要紧急修复,为了保证软件的稳定性,需要临时关闭或回退掉部分功能或服务。快速回滚的目的是尽快恢复到正常状态,以防止影响到用户的使用体验。

(8)弹性负载均衡

弹性负载均衡(elastic load balancing),简称ELB,是AWS推出的一种负载均衡解决方案,用于帮助用户轻松地创建、配置和管理负载均衡器,实现网络请求的透明转发。

(9)水平扩展

水平扩展(horizontal scaling)是指通过增加服务器的数量来横向扩充应用程序的能力,即通过提高CPU、内存、磁盘空间等硬件资源,来实现性能的增长。

(10)垂直扩展

垂直扩展(vertical scaling)是指通过提升单台服务器的性能来纵向扩充应用程序的能力,即通过升级硬件的配置、安装软件,来实现性能的增长。

(11)缓存

缓存(cache)是指在运行速度或数据库查询延迟方面达到一个极限的技术手段,其目的是为了加速网站的访问,在用户不感知的情况下,提升网站的运行速度。

(12)微服务

微服务架构(microservice architecture)是SOA(Service-Oriented Architecture)的一个变种,是一种通过将应用组件化的方式来增强应用健壮性和可伸缩性的架构模式。它的主要特征是按业务领域划分服务,每个服务独立运行,允许各个服务独立部署和迭代,从而实现业务的快速响应能力。

(13)容器

容器(container)是一种轻量级虚拟化技术,它使得用户可以在标准的隔离环境中运行应用程序。容器封装了一个应用、其依赖项和库,可以作为单个实体来进行移植、部署和管理。容器通过资源限制、进程抽象、文件系统隔离和网络隔离等技术,确保了应用的安全性和独立性。容器和虚拟机(VM)类似,但比VM更轻量,占用资源更少,启动速度更快,所以在可扩展性、资源利用率和成本方面都更具优势。

(14)弹性伸缩

弹性伸缩(auto scaling)是一种自动的计算机集群动态扩展、自动化缩放能力,是一种自动化的解决方案,用于扩展应用系统的处理能力,根据实际的负载或资源利用率,调整集群节点的数量,以满足系统的运行要求。

(15)异步消息队列

异步消息队列(asynchronous message queue)是一种分布式应用组件,它将应用的业务逻辑和消息处理解耦,支持一对多、多对多或一对一的通信模式,允许应用系统以无缝的方式与外部系统集成,并提高系统的可扩展性、韧性和容错能力。

(16)RESTful API

RESTful API(Representational State Transfer),中文翻译为表述性状态转移,是一个设计风格,它定义了客户端如何与RESTful API交互,以及服务器返回的数据结构。RESTful API使用HTTP协议,基于资源的定位方式(Resource Identification)、HTTP方法、状态码和Header,以及数据格式等规范,为Web应用提供了统一的接口。

(17)API Gateway

API Gateway(API网关),中文翻译为API网关,它是系统架构中的一个重要角色,它位于客户端和后端服务的交互点,作为一个中介,屏蔽了客户端和后端服务之间的通信细节,并提供统一的访问入口,使各服务间的数据交互更加简单、可控。

(18)CAP原理

CAP原理(CAP Theorem)是加州大学伯克利分校计算机科学系教授威廉姆斯·麦卡利( )于2000年提出的分布式计算领域的著名理论,其目的是理解一致性、可用性、分区容忍性这三个属性在分布式系统中的重要意义。该原理认为,对于分布式存储系统来说,不能同时做到一致性(Consistency),可用性(Availability)和分区容忍性(Partition Tolerance)。在实际应用场景中,通常需要权衡这三者之间的取舍,来选择最佳的分布式系统架构。

3、核心算法原理和具体操作步骤以及数学公式讲解

(1)水平扩展

水平扩展(horizontal scaling)是指通过增加服务器的数量来横向扩充应用程序的能力,即通过提高CPU、内存、磁盘空间等硬件资源,来实现性能的增长。增加服务器的数量,可以实现对应用的无缝扩展,让应用的负载均衡机制得以执行,提高系统的吞吐量。

一般情况下,水平扩展的方式有两种:第一种是增加物理服务器的数量,第二种是增加虚拟服务器的数量。在物理服务器的数量增加的情况下,可以通过增加CPU、内存等资源,来提升应用的性能。在虚拟服务器的数量增加的情况下,则可以通过虚拟化技术,模拟出多个物理服务器,实现应用的无缝扩展。

(2)垂直扩展

垂直扩展(vertical scaling)是指通过提升单台服务器的性能来纵向扩充应用程序的能力,即通过升级硬件的配置、安装软件,来实现性能的增长。垂直扩展的方式有两种:第一种是增加处理器、内存、磁盘等硬件性能,第二种是购买更大的硬件服务器。在硬件性能的提升的情况下,可以通过升级CPU、内存、网络等硬件资源,来提升应用的性能。在更大的硬件服务器的购买的情况下,则可以通过购买更好的硬件配置,来实现更好的性能。

(3)缓存

缓存(cache)是指在运行速度或数据库查询延迟方面达到一个极限的技术手段,其目的是为了加速网站的访问,在用户不感知的情况下,提升网站的运行速度。缓存的主要目的是减少对数据库的请求次数,从而减少数据库的压力,提高系统的性能。一般情况下,缓存分为硬件缓存和软件缓存,硬件缓存又分为内存缓存和分布式缓存。内存缓存通过存储介质如内存、 SSD等来缓存数据,而分布式缓存则通过分布式缓存集群来缓存数据。

(4)异步消息队列

异步消息队列(asynchronous message queue)是一种分布式应用组件,它将应用的业务逻辑和消息处理解耦,支持一对多、多对多或一对一的通信模式,允许应用系统以无缝的方式与外部系统集成,并提高系统的可扩展性、韧性和容错能力。异步消息队列的典型架构如下图所示。

异步消息队列的作用主要有以下几点:

  1. 异步化消息处理:异步消息队列实现异步化消息处理,即生产者发送消息后,不等待消费者接收和处理,只管把消息扔到消息队列里,让其他的消费者自己去拉消息进行处理。因此,异步消息队列能提高系统的响应能力、可用性和容错能力。

  2. 可扩展性:异步消息队列通过集群架构的部署,能够支持海量消息的高效处理。

  3. 服务解耦:异步消息队列将业务逻辑与消息处理分开,业务逻辑只负责消息的投递,而消息处理则由消息队列来完成。因此,异步消息队列能实现业务逻辑与消息处理的解耦,从而提高系统的模块化和可测试性。

  4. 最终一致性:异步消息队列支持最终一致性,即消费者可以根据自己的消费速度来消费消息,从而保证数据的一致性。

(5)微服务

微服务架构(microservice architecture)是SOA(Service-Oriented Architecture)的一个变种,是一种通过将应用组件化的方式来增强应用健壮性和可伸缩性的架构模式。它的主要特征是按业务领域划分服务,每个服务独立运行,允许各个服务独立部署和迭代,从而实现业务的快速响应能力。微服务架构的典型架构如下图所示。

微服务架构的优点有以下几点:

  1. 快速响应:由于微服务架构的特点,各个服务可以独立开发、测试、部署,使得开发效率得到大幅度提升。

  2. 模块化:微服务架构的服务拆分粒度颗粒度细,能更好地实现模块化。

  3. 弹性伸缩:微服务架构的服务可以分布式部署,可以实现弹性伸缩,即增加或减少服务的实例,实现系统的水平扩展。

  4. 复用性:微服务架构的服务可以复用,只要符合接口契约,就可以组合起来实现各种功能。

  5. 技术异构:微服务架构可以利用不同编程语言、框架、中间件,实现不同技术栈的组合使用,从而实现技术异构。

(6)A/B测试

A/B测试(A/B testing),中文名称是双样本对照试验,是一种比较两个产品之间差异的一种科学的方法。A/B 测试的目的在于确定在某项试验中哪种方案的效果更好,测试方法一般有两种,双盲法和双固定法。双盲法指的是同时让两组受试者盲目接受两种方案,随后让对照组做选择性记忆测试,判断哪种方案的效果更好。双固定法指的是两组受试者分别固定一个方案,让另一组受试者作决定。

(7)蓝绿部署

蓝绿部署(blue-green deployment)是指在部署新版本的时候,先用一组服务器处理生产流量,如果顺利的话,就立即切换过去;如果出现问题,再把流量切回老的主机上。其目的是尽量减少用户的体验损失。

蓝绿部署方式下的架构如下图所示。

蓝绿部署方式的优点有以下几点:

  1. 提高部署效率:蓝绿部署方式可以让部署变得更加容易、快捷,同时不会影响生产环境的使用。

  2. 降低风险:蓝绿部署方式可以减少部署失败的风险。

  3. 不停服务:在蓝绿部署方式下,应用可以同时保持两套环境,确保不停服务。

  4. 快速回滚:在出现问题的时候,可以快速切换回老环境,而不是等待所有流量切换。

(8)CAP原理

CAP原理(CAP Theorem)是加州大学伯克利分校计算机科学系教授威廉姆斯·麦卡利( )于2000年提出的分布式计算领域的著名理论,其目的是理解一致性、可用性、分区容忍性这三个属性在分布式系统中的重要意义。该原理认为,对于分布式存储系统来说,不能同时做到一致性(Consistency),可用性(Availability)和分区容忍性(Partition Tolerance)。在实际应用场景中,通常需要权衡这三者之间的取舍,来选择最佳的分布式系统架构。

CAP原理认为,一个分布式系统不可能同时满足一致性(Consistency),可用性(Availability)和分区容忍性(Partition Tolerance)。如下图所示,在分布式系统中,一致性表示数据的强一致性,可用性表示服务一直处于可用的状态,分区容忍性表示系统在遇到任何网络分区故障的时候仍然可以继续运行。

因此,在设计分布式系统的时候,需要选择其中两个属性来做出取舍。比如,在一个金融交易系统中,希望确保数据的强一致性,此时可以选择CP系统,即选择CAP中的C和P。但是,在一个搜索引擎系统中,对数据的可用性非常苛刻,此时可以选择CA系统,即选择CAP中的C和A。


网站公告

今日签到

点亮在社区的每一天
去签到