干货:软件架构分析详解

本文详细探讨了软件架构的定义、相关概念,以及从设计到运行期的各个阶段。架构设计是解决非功能性需求的关键,包括高性能、可靠性、稳定性、可用性等目标。文章介绍了单体架构、分布式架构,如面向服务架构(SOA)和微服务架构(MSA),强调了架构在软件生命周期中的重要性,以及如何随技术和业务发展演进。
摘要由CSDN通过智能技术生成

什么是架构

计算机科学和程序设计的飞速发展,使得软件设计应用到从航空航天到日常生活的方方面面。单个人开发一段小程序的做法早就过时,大范围协作的工程化时代随即到来。

随着大范围协作的效率问题和软件复杂度的爆炸式增长,管理和技术方面的各种不确定性也爆发性增加,导致软件开发的质量无法得到有效保证,周期和成本无法得到有效控制。

人们一直在寻求找到这些问题的解决办法。然而 Fred Brooks 在 1975 年出版的软件工程圣经《人月神话》中说,没有(能解决所有问题的)银弹(There is no silver bullet)。

自此,人们发展了项目研发过程管理来控制管理活动的不确定性,同时也发展了软件架构设计方法来控制技术方面的不确定性。

进而在实践中不断的总结和改进,用于有效指导和最大程度的保障软件开发的质量、周期和成本。

架构的定义

架构(Architecture)一词源于建筑领域,其本身就是建筑的意思,也是体系结构的意思。维基百科英文版里对 Architecture 的解释是:规划、设计和建造建筑物的过程及产物。

鉴于软件工程与建筑工程一样是一项系统的工程性工作,引入到计算机领域后,软件架构就成为了描述软件规划设计技术的专有名词。

特别地,软件架构师一词在英文里,和建筑师也是同一个词(Architect)。

维基百科里对软件架构的定义:

软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。软件架构是一个系统的草图。

软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

比较公认的软件架构定义是在 2000 年的 ANSI/IEEE 1471 标准中定义的:

  1. 架构过程:在系统整个生命周期中构思、定义、表达、记录、交流,验证合适实现,维护和改进架构的过程,也就是设计过程。

  2. 架构:一个系统体现在其环境中的元素、关系的基本概念或属性,以及其设计和进化原则。

  3. 架构描述:表达一个架构的工作产出物(通常指的是各种架构图和设计文档)。

  4. 架构视图:通过系统的某些关注点的视角,表达一个系统的工作产出物(例如部署视图、开发视图等)。

  5. 系统:包含了一个或多个进程、硬件、软件、工具与可以满足需求的人的集合。

  6. 环境:决定了开发、操作、策略和其他影响系统的设置和条件。

在 UML 中,架构则被认为是系统的组织结构和相关行为。架构可被分解为通过接口互联部分的关系,以及相互作用。

通过接口相互作用的部分包括类、组件和子系统。这样就可以通过 UML 的各种架构图来描述这些对象和关系,从而表达清楚一个系统的架构。

总结

软件架构是一个用于指导系统实现的草图,这个草图越详细对于系统实现的指导意义越重大,贯穿于软件的整个生命周期。

在建筑领域,大楼尚未建造前,就已经存在于建筑师的脑海里;同样地,系统开始编写第一行代码之前,就已经存在于软件架构师的心里。

几个相关概念

模式(Pattern)

UML 中给出的解释更通俗易懂:模式是对于普遍问题的普遍解决方案。

我们可以把一类问题的共性抽象出来,这样就可以用同样的处理办法去解决这些问题,从而形成模式,所以模式是一些经验的总结。

类库(Library)

类库是一组可复用的功能或工具的集合,应用系统通过调用它们从而达到复用功能的目的。

例如,Windows 应用开发里的各种静态或动态链接库 DLL 文件,Java 开发中项目里依赖的或者 Maven 中央库里的各种 jar 包,都是 Library,比如 Apache Commons IO、HttpClient,Log4j 等。

框架(Framework)

框架是基于一组类库或工具,在特定领域里根据一定的规则组合成的、开放性的应用骨架。

比如 SSM/SSH 框架,更大范围来说 Dotnet Framework、JDK 都算是一种框架。

关于框架与架构的关系,Vasyl Boroviak 曾在 Stack Overflow 网站上通过两张图做了形象的对比,如下所示。

  • 框架:

  • 架构:

模块(Module)

模块是业务或系统的安装特定维度的一种切分,同时也可以看做是各种功能按照某种分类聚合的一种形式。

例如我们的一个电商系统,可以从业务上划分为用户模块、商品模块、订单模块、支付模块、物流模块、售后模块等。

另一方面,我们也可以说用户模块聚合了用户注册、用户验证等业务功能。

组件(Component)

组件是一组可以复用的业务功能的集合,包含一些对象及其行为。

组件可以直接被用做业务系统的组成部分,粒度一般小于模块,也是一种功能的聚合形式。比如日志组件、权限组件等。

服务(Service)

服务是一组对外提供业务处理能力的功能,服务需要使用明确的接口方式(比如 WebService 或 Rest 等)。

服务描述里应该包括约束和策略(比如参数、返回值,使用什么通讯协议和数据格式等)。

平台(Platfo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值