前置知识: 计算机基础

软件体系结构

5 minAdvanced2026/6/14

软件体系结构:架构风格、质量属性、架构评估与文档化

1. 软件体系结构概述

1.1 定义

软件体系结构是系统的组织结构,包括软件组件、组件间的关系以及指导系统设计和演化的原则。

1.2 架构与设计

层面关注点决策范围
架构全局结构、质量属性系统级
设计局部结构、实现细节模块

2. 架构风格

2.1 数据流风格

管道-过滤器

数据源 → 过滤器1 → 过滤器2 → 过滤器3 → 数据汇

特点:数据驱动,松耦合,可重用。示例:Unix 管道、ETL。

批处理

输入文件 → 处理步骤1 → 处理步骤2 → 输出文件

特点:步骤间完全解耦,延迟高。

2.2 调用/返回风格

主程序-子程序:传统结构化设计。

面向对象:封装、继承、多态。

层次结构

表示层 → 业务层 → 持久层 → 数据库

特点:每层只依赖下层,可替换层实现。

2.3 独立组件风格

进程通信:独立进程通过消息传递协作。

事件驱动

事件源 → 事件总线 → 事件处理器1
                   → 事件处理器2

特点:松耦合,可扩展,但流程不直观。

2.4 仓库风格

数据库系统:共享数据为中心。

黑板系统

知识源1 ──→ 黑板 ←── 知识源2

           控制器

特点:适用于不确定求解策略的问题(如语音识别)。

2.5 现代架构风格

微服务

  • 每个服务独立部署
  • 通过 API 通信
  • 去中心化数据管理

事件溯源

  • 所有状态变更以事件形式存储
  • 当前状态通过重放事件计算
  • 天然审计日志

CQRS

  • 命令(写)和查询(读)分离
  • 可独立优化读写性能

六边形架构(端口与适配器)

外部系统 ←→ 适配器 ←→ 端口 ←→ 应用核心 ←→ 端口 ←→ 适配器 ←→ 数据库

核心业务逻辑不依赖任何外部技术。

3. 质量属性

3.1 运行时质量属性

属性定义策略
性能响应时间、吞吐量缓存、并发、负载均衡
可用性系统正常运行时间冗余、故障转移、心跳
安全性抵御攻击的能力认证、授权、加密
易用性用户完成任务的能力一致性、反馈、撤销

3.2 开发时质量属性

属性定义策略
可修改性修改的难易程度模块化、信息隐藏
可测试性验证正确性的难易可观察性、可控性
可移植性跨平台运行的能力抽象层、标准接口
可重用性在其他系统使用的可能性通用接口、配置化

3.3 质量属性场景

描述质量需求的标准化方式:

刺激源 → 刺激 → 环境 → 制品 → 响应 → 响应度量

示例(性能):

用户 → 请求 → 正常负载 → 系统 → 响应 → < 200ms

4. 架构评估

4.1 ATAM 方法

架构权衡分析方法(Architecture Tradeoff Analysis Method):

  1. 介绍 ATAM
  2. 介绍业务驱动
  3. 介绍架构
  4. 识别架构方法
  5. 生成质量属性效用树
  6. 分析架构方法
  7. 头脑风暴和优先级排序场景
  8. 分析架构方法
  9. 报告结果

4.2 效用树

效用
├── 性能
│   ├── 场景P1: 峰值负载响应时间 < 500ms (高)
│   └── 场景P2: 平均响应时间 < 100ms (中)
├── 可用性
│   ├── 场景A1: 单节点故障不影响服务 (高)
│   └── 场景A2: 数据零丢失 (高)
├── 可修改性
│   └── 场景M1: 新增支付方式 < 2人周 (中)
└── 安全性
    └── 场景S1: 抵御SQL注入 (高)

4.3 权衡点与敏感点

敏感点:影响某个质量属性的关键架构决策。

权衡点:影响多个质量属性的架构决策(可能互相矛盾)。

示例:加密强度 ↑ → 安全性 ↑ 但 性能 ↓

5. 架构文档化

5.1 视

关注点受众
模块代码组织开发者
组件-连接器视运行时结构架构师
分配视软件到硬件的映射运维

5.2 4+1 视模型

逻辑视图(功能需求)
开发视图(程序员视角)
进程视图(并发/同步)  ← 场景 →
物理视图(部署视角)

5.3 C4 模型

层级名称范围受众
Level 1系统上下文整个系统所有人
Level 2容器应用/数据存储开发者
Level 3组件模块/服务开发者
Level 4代码/函数开发者

6. 架构模式与反模式

6.1 常见反模式

反模式问题解决方案
大泥球无架构,代码混乱逐步重构
上帝对象一个做所有事职责分离
金锤过度使用某技术评估替代方案
复制粘贴编程重复代码抽象和复用
架构黑洞架构文档与实现不符持续验证

6.2 康威定律

“设计系统的组织,其产生的设计等同于组织的沟通结构。”

逆康威实验:通过调整团队结构来驱动期望的架构。