系统架构设计
本章导读
系统架构设计是架构师考试的核心章节,涵盖架构风格、ABSD 方法、DSSA 和中间件等关键内容。本章将系统讲解软件架构的定义、设计方法、常见风格及其应用场景,帮助你建立完整的架构设计知识体系。
学习目标
通过本章学习,你应该能够:
- 理解软件架构的定义和在生命周期各阶段的作用
- 掌握基于架构的软件开发方法(ABSD)
- 熟练掌握各种软件架构风格及其特点
- 理解特定领域软件架构(DSSA)的概念
- 了解中间件技术和典型应用架构
软件架构基础
架构的定义
软件架构(Software Architecture)是指系统的一个或多个结构,包括:
- 软件的 构件(程序模块、类、中间件等)
- 构件的 外部可见属性
- 构件之间的 相互关系
mindmap
root((软件架构))
构件
程序模块
类
中间件
属性
外部可见特性
接口定义
关系
调用关系
依赖关系
数据流 架构与生命周期
软件架构贯穿整个软件生命周期,各阶段的作用不同:
| 阶段 | 架构工作重点 | 作用 |
|---|---|---|
| 需求分析 | 需求到架构的转换 | 便于各方交流,保持可追踪性 |
| 设计阶段 | 架构模型描述、分析 | 关注最早最多 的阶段 |
| 实现阶段 | 架构到代码的转换 | 指导编码实现 |
| 构件组装 | 可复用构件集成 | 提高系统实现效率 |
| 部署阶段 | 部署方案设计与评估 | 组织硬件架构 |
| 后开发 | 维护、演化、复用 | 支持系统演进 |
架构描述语言(ADL)
考点提示
ADL 与其他建模语言的最大区别是:更关注 连接件(构件间的互联机制)。
ADL 的主要组成部分:
graph LR
A[组件] --> B[组件接口]
C[连接件] --> D[架构配置]
A -.-> C
B -.-> D 典型的 ADL 语言:Unicon、Rapide、Darwin、Wright、C2SADL、Acme 等。
基于架构的软件开发方法(ABSD)
ABSD 核心概念
ABSD 是体系结构 驱动 的设计方法,驱动因素包括:
- 商业需求
- 质量需求
- 功能需求
ABSD 三个基础
- 功能分解:将系统功能逐层分解
- 架构风格选择:实现质量和商业需求
- 软件模板使用:提高开发效率
ABSD 描述方式
| 描述内容 | 描述方式 |
|---|---|
| 软件架构 | 视角与视图 |
| 功能需求 | 用例 |
| 质量需求 | 质量场景 |
基于架构的开发模型
graph TB
A[架构需求] --> B[架构设计]
B --> C[架构文档化]
C --> D[架构复审]
D --> E[架构实现]
E --> F[架构演化]
D -.->|发现问题| B
F -.->|需求变化| A 六个子过程详解
主要工作:获取用户需求、标识系统构件
构件标识步骤:
- 生成类图
- 对类进行分组
- 把类打包成构件
主要输出:
- 体系结构规格说明
- 测试体系结构需求的质量设计说明书
编写原则:
- 从 使用者 角度编写
- 分发给所有相关开发人员
- 保持即时更新,但不过于频繁
- 避免不必要的重复
参与人员:外部人员(用户代表、领域专家)
目的:标识潜在风险,及早发现设计缺陷
软件架构风格
核心考点
架构风格是考试的重点,需要掌握每种风格的特点、优缺点和适用场景。
架构风格概述
软件架构风格定义了:
- 词汇表:包含构件和连接件
- 约束:定义构件和连接件的组合方式
风格分类总览
mindmap
root((架构风格))
数据流风格
批处理
管道-过滤器
调用/返回风格
主程序/子程序
面向对象
层次结构
C/S
B/S
数据中心风格
仓库
黑板
虚拟机风格
解释器
规则系统
独立构件风格
进程通信
事件系统 数据流风格
管道-过滤器风格
graph LR
A[数据源] --> F1[过滤器1]
F1 --> F2[过滤器2]
F2 --> F3[过滤器3]
F3 --> B[数据汇]
style F1 fill:#e1f5fe
style F2 fill:#e1f5fe
style F3 fill:#e1f5fe | 优点 | 缺点 |
|---|---|
| 高内聚、低耦合 | 数据传输需统一标准 |
| 支持复用 | 难以支持事件交互 |
| 易于并发/顺序实现 | |
| 可扩展、灵活 |
典型应用
Linux/Unix Shell、传统编译器
批处理 vs 管道-过滤器
| 特性 | 批处理 | 管道-过滤器 |
|---|---|---|
| 数据传递 | 整体 传递 | 增量 传递 |
| 执行顺序 | 必须顺序执行 | 可并发执行 |
| 步骤依赖 | 前一步必须完成 | 可流式处理 |
调用/返回风格
层次型架构
graph TB
A[表示层] --> B[业务逻辑层]
B --> C[数据访问层]
C --> D[数据层] 性能问题
层次越多,中间调用越多,性能越差
C/S 架构
| 组成 | 功能 |
|---|---|
| 客户端 | 用户交互 |
| 服务器 | 数据管理 |
缺点:开发成本高、维护升级困难、移植困难
graph LR
A[表示层<br>用户界面] --> B[功能层<br>业务逻辑]
B --> C[数据层<br>数据管理] 瘦客户端模式,更易于维护和扩展
B/S 架构
三层结构:浏览器 → Web 服务器 → 数据库服务器
| 与 C/S 相比的不足 |
|---|
| 动态页面支持能力弱 |
| 系统扩展能力差 |
| 安全性难以控制 |
| 响应速度不足 |
| 数据交互性不强 |
数据中心风格
仓库风格
graph TB
subgraph 独立构件
C1[构件1]
C2[构件2]
C3[构件3]
end
C1 <--> DB[(中央数据存储)]
C2 <--> DB
C3 <--> DB 黑板风格
特点
- 由 中央数据当前状态 触发进程执行
- 适用于不确定性问题求解
- 典型应用:语音识别、模式识别、机器翻译
| 优点 | 缺点 |
|---|---|
| 便于数据共享 | 需达成数据结构一致 |
| 可修改、可维护 | 需同步和锁机制 |
| 支持容错 | 测试困难 |
| 可重用知识源 | 效率低、成本高 |
虚拟机风格
解释器风格
核心思想
人为构建运行环境,解析与运行自定义语言,增加架构灵活性。
典型应用:Java 虚拟机、专家系统
| 优点 | 缺点 |
|---|---|
| 平台无关 | 执行效率低 |
| 灵活性高 |
性能优化
可通过 预编译部分解释代码 提高性能
规则系统风格
组成:知识库 + 规则解释器 + 规则/数据选择器 + 工作内存
独立构件风格
事件系统(隐式调用)风格
特点
构件不直接调用过程,而是 触发或广播事件
典型应用:Windows 图形界面、调试器断点机制
性能优化
可通过 处理函数并发调用 提高性能
C2 风格
graph TB
C1[构件1] <--> CONN1[连接件]
C2[构件2] <--> CONN1
CONN1 <--> CONN2[连接件]
C3[构件3] <--> CONN2 特点:构件通过连接件连接,构件与构件之间无直接连接
特定领域软件架构(DSSA)
DSSA 概念
DSSA 是在 特定领域 中为一组应用提供组织结构参考的 标准软件体系结构。
四大特征:
mindmap
root((DSSA特征))
领域性
普遍性
抽象性
可复用性 DSSA 基本活动
| 活动 | 目的 | 产出 |
|---|---|---|
| 领域分析 | 分析领域共性需求 | 领域模型 |
| 领域设计 | 设计适应性架构 | DSSA |
| 领域实现 | 获取可重用信息 | 可重用构件 |
DSSA 三层模型
| 层次 | 主要工作者 |
|---|---|
| 领域开发环境 | 领域专家 |
| 领域特定应用开发环境 | 应用工程师 |
| 应用执行环境 | 最终用户 |
架构复用
复用类型
| 类型 | 说明 |
|---|---|
| 机会复用 | 开发中发现可复用资产就复用 |
| 系统复用 | 开发前规划决定复用内容 |
可复用资产
需求、架构设计、元素、建模分析、测试、项目规划、过程方法工具、人员、样本系统、缺陷消除
复用趋势
复用体由 小粒度向大粒度 发展
中间件技术
中间件定义
中间件是处于 操作系统和应用程序之间 的软件,用于:
- 在不同技术之间共享资源
- 连接异构的网络环境
- 整合不同的操作系统和数据库
中间件五大类型
| 类型 | 说明 |
|---|---|
| 数据库访问中间件 | 统一数据库访问接口 |
| 远程过程调用(RPC) | 远程服务调用 |
| 面向消息中间件(MOM) | 异步消息传递 |
| 分布式对象中间件 | 分布式对象管理 |
| 事务中间件 | 事务处理协调 |
典型应用架构
J2EE 架构
graph TB
A[客户层组件] --> B[Web层组件]
B --> C[业务层组件]
C --> D[信息系统层] 典型技术栈:JSP + Servlet + JavaBean + DAO
| 组件 | 作用 |
|---|---|
| JSP | 视图层,显示和收集数据 |
| Servlet | 业务逻辑层,处理复杂业务 |
| JavaBean | 数据封装 |
| DAO | 数据库操作 |
.NET 架构
.NET 框架处于操作系统和应用语言之间,仅适用于微软系统,而 J2EE 支持跨平台。
设计模式层次
三个层次
| 层次 | 说明 | 示例 |
|---|---|---|
| 架构模式 | 高层设计决策 | C/S 结构 |
| 设计模式 | 与实现语言无关的设计 | 工厂模式、单例模式 |
| 惯用法 | 特定语言的实现技巧 | C++ 引用计数 |
总结
mindmap
root((系统架构设计))
基础概念
架构定义
生命周期各阶段
ADL
开发方法
ABSD
六个子过程
架构风格
数据流风格
调用返回风格
数据中心风格
虚拟机风格
独立构件风格
高级主题
DSSA
架构复用
中间件 学习建议
- **架构风格**是核心考点,要能区分各风格的特点和适用场景
- ABSD 六个子过程要熟悉,特别是复审需要外部人员参与
- **质量属性**与架构风格的关系是常见考题
- 理解架构模式、设计模式、惯用法三个层次的区别