🧩 一、概述:系统的"骨架"与"灵魂"
软件架构是有关软件整体结构与组件的抽象描述,它定义了系统的高层组织,包括组成系统的构件、构件之间的交互关系,以及指导系统设计和演化的原则。它是软件系统的"骨架",支撑起整个系统的功能实现和质量属性;同时它也是系统的"灵魂",决定了系统的质量特性、技术风险和长期演进能力。
对于系统分析师而言,理解软件架构的概念是进入架构设计领域的"第一道门"。你需要建立这样的认知:架构不是"画几张图"那么简单,而是关于重大设计决策的系统性思考,这些决策将深刻影响项目的成败。
本节的知识框架:
· 软件架构的多种定义
· 软件架构的组成要素
· 软件架构与相关概念的区别
· 软件架构的重要性和作用
· 架构关注的质量属性
· 架构设计的决策与产出
🏗️ 二、详细讲解:软件架构的核心内涵
1️⃣ 软件架构的定义
软件架构的定义有多种视角,最经典的是IEEE标准1471-2000中的定义:
软件架构是一个系统在其所处环境中的基本概念或属性,体现在它的构件、外部可见关系以及设计和演化的原则中。
更通俗的定义来自软件工程领域权威专家:
专家 定义核心 侧重点
Mary Shaw & David Garlan 软件架构是"对系统整体结构设计的描述,包括构件、连接件、约束以及它们之间的相互关系" 构件+连接件+约束
Len Bass, Paul Clements, Rick Kazman "软件架构是系统的一组结构,包含软件元素、它们的外部可见属性以及它们之间的关系" 结构+外部可见性
Martin Fowler "架构是关于重要事物的抽象,那些一旦做出就很难更改的决策" 重大决策
综合而言,软件架构包含三个核心要点:
-
构件:系统的组成单元(不同粒度,可以是子系统、模块、类等)
-
结构:构件之间的组织方式(如层次、分布、拓扑)
-
关系:构件之间的连接和交互(如调用、消息传递、依赖)
📌 速记口诀:"构件结构加关系,架构定义三核心;IEEE标准更全面,还有演化原则需"。
2️⃣ 软件架构的组成要素
一个完整的软件架构描述通常包含以下要素:
要素 描述 示例
构件 承担特定计算功能的单元,是系统的功能载体 Web服务器、数据库、业务模块
连接件 构件之间的交互机制,定义构件如何通信 RPC、消息队列、HTTP协议
约束 对构件和连接件的限制条件 只能通过API访问、必须异步通信
配置 构件和连接件如何组织成整体结构 三层结构、微服务拓扑
属性 构件或连接件的非功能特征 性能、可靠性、安全性要求
原理 指导架构设计和演化的原则 分层原则、松耦合原则
构件与连接件是架构的核心元素,类比硬件系统中的"芯片"和"导线":
· 构件:实现特定功能的"芯片"
· 连接件:连接芯片的"导线",定义交互协议
约束与配置描述了构件和连接件如何组装成一个有机整体,类似于"电路板布局图"。
属性反映了对质量的要求,原理则是架构决策背后的指导思想。
📌 速记口诀:"构件连接件,约束配置属性原理,六要素定架构"。
3️⃣ 软件架构与相关概念的区别
概念 定义 与架构的关系
设计模式 在特定上下文中解决常见设计问题的通用解决方案 模式是架构的"局部解决方案",架构可以包含多个模式
框架 特定领域的可复用半成品软件,定义了整体结构和交互流程 框架是实现架构的一种方式,体现了特定的架构风格
体系结构 有时与架构同义,但更强调系统的整体结构和组织 通常与软件架构混用,但在系统工程中可能更广义
模块 按功能划分的软件单元,是构件的具体表现形式 模块是构件的一种,模块化是架构的重要原则
组件 可独立部署、复用的软件单元,比构件更具体 在基于组件的开发中,组件是实现构件的技术形式
关键区别:
· 架构是"宏观设计",关注整体结构和重大决策
· 设计模式是"中观设计",关注局部问题的可重用方案
· 框架是"半成品",提供了实现架构的基础设施
· 组件是"可复用单元",架构中的构件可能由组件实现
📌 速记口诀:"架构宏观定格局,模式中观解局部,框架半成供设施,组件复用构细节"。
4️⃣ 软件架构的重要性和作用
软件架构在软件工程中扮演着多重角色,是项目成功的关键因素:
作用 说明 受益方
沟通媒介 为项目干系人提供统一的交流语言,降低沟通成本 所有干系人
设计决策的载体 记录早期重大技术决定,便于理解和维护 开发团队、维护团队
可复用资产 形成组织级架构知识库,为后续项目提供经验 组织
质量预测的基础 通过架构分析可以预测系统的性能、安全性等质量属性 测试团队、质量保障
复杂性管理工具 通过分解、抽象、分层等手段控制系统复杂度 架构师、开发人员
项目规划的输入 为任务分解、团队组织、资源配置提供依据 项目经理
演化的蓝图 指导系统的后续扩展和修改,确保演化的一致性 维护团队
沟通媒介是架构最直接的作用。用户、管理者、开发人员、测试人员可以通过架构图建立对系统的共同理解。
设计决策是架构的"记忆"。架构不仅记录"结果",还应记录"为什么"------做出这些决策的依据和权衡。
可复用资产是架构的长期价值。成熟的架构风格、参考架构可以在组织内传承,避免重复犯错。
质量预测是架构的"前瞻性"。在编码之前,通过架构评估就能发现潜在的质量风险,这是性价比最高的质量保证手段。
📌 速记口诀:"沟通决策可复用,质量预测管复杂,规划演化六作用,架构价值处处显"。
5️⃣ 架构关注的质量属性
软件架构设计要满足一系列质量属性,这些属性分为运行期质量和开发期质量两大类:
类别 质量属性 描述
运行期质量 性能 系统的响应时间、吞吐量、资源利用率
安全性 系统抵御未授权访问和攻击的能力
可用性 系统在故障时仍能提供服务的能力(如99.99%可用性)
可靠性 系统在指定条件下正常运行的概率
可伸缩性 系统在负载增加时保持性能的能力
可观测性 系统运行状态可监控、可诊断的程度
开发期质量 可维护性 系统易于修改和扩展的能力
可测试性 系统易于测试的程度
可部署性 系统能够方便部署到运行环境的能力
可复用性 系统的构件可在其他项目中复用的程度
可理解性 系统结构和代码易于理解的程度
质量属性之间的权衡:架构设计常常需要在不同质量属性之间做出权衡。例如:
· 性能 vs 安全性:加密解密会消耗时间,降低性能
· 可伸缩性 vs 一致性:分布式系统的高可用往往需要牺牲强一致性(CAP定理)
· 可维护性 vs 性能:高度模块化的设计可能引入额外开销
架构设计的本质就是在这些质量属性之间找到最合适的平衡点,满足项目的业务目标和约束。
📌 速记口诀:"运行期五性:性安可伸观;开发期五性:维试部解复;属性之间需权衡,架构本质求平衡"。
6️⃣ 架构设计的过程与产出
架构设计过程(简化版):
```
需求分析\] → \[架构目标定义\] → \[候选方案提出\] → \[方案评估与选择\] → \[架构文档化\] → \[架构验证
```
阶段 主要活动 产出
架构目标定义 从需求中提取关键质量属性,设定架构目标 质量属性场景
候选方案提出 基于架构风格、参考架构提出多个可选方案 架构方案草图
方案评估与选择 使用ATAM等方法评估各方案,做出决策 选型决策报告
架构文档化 使用4+1视图、C4模型等描述架构 架构文档
架构验证 通过原型、评审验证架构的可行性 验证报告
架构设计的核心产出:
· 架构视图集:从不同角度描述系统(4+1视图)
· 架构决策记录:记录重大决策的理由和权衡
· 质量属性分析:说明架构如何满足质量需求
· 技术选型清单:关键技术的选择和依据
· 架构约束和原则:指导后续开发的规则
📝 三、重点总结与速记方法
✅ 核心重点
-
软件架构的定义:系统的一组结构,包含构件、外部可见关系和设计演化原则(IEEE定义)。
-
六大组成要素:构件、连接件、约束、配置、属性、原理。
-
架构与相关概念的区别:架构(宏观)、设计模式(中观)、框架(半成品)、组件(可复用单元)。
-
架构的六大作用:沟通、决策记录、可复用、质量预测、复杂性管理、项目规划、演化蓝图。
-
质量属性两大类别:运行期质量(性能、安全、可用、可靠、可伸缩、可观测)和开发期质量(可维护、可测试、可部署、可复用、可理解)。
-
架构设计的本质:在相互冲突的质量属性之间寻找平衡,满足业务目标。
⚡ 速记口诀
1️⃣ 定义"三要素"口诀
"构件结构加关系,三要素定架构;加上演化原则,IEEE定义全"
2️⃣ 六大要素"六字诀"
"构件连接件,约束配置属性原理"
3️⃣ 相关概念"四层次"口诀
"架构宏观定格局,模式中观解局部,框架半成供设施,组件复用构细节"
4️⃣ 架构作用"六角色"口诀
"沟通决策可复用,质量预测管复杂,规划演化六作用"
5️⃣ 质量属性"十属性"口诀
"运行期:性安可伸观;开发期:维试部解复"
(性能、安全、可用、可靠、伸缩、观测;维护、测试、部署、理解、复用)
6️⃣ 一句话总纲
软件架构 = (构件+连接件+约束) 定义系统的宏观结构,承载质量属性的权衡,是重大设计决策的记录,也是项目干系人沟通的媒介和系统演化的蓝图。
掌握12.1节,意味着你对软件架构建立了正确的认知------它不仅是技术图景,更是沟通工具、决策载体和质量保障的基石。这是系统分析师迈向架构师角色的重要理论基础。