软件架构设计师考试 — 核心考点知识卡片
数据驱动,前一步输出是后一步输入
数据像水一样流过管道
控制流驱动,函数调用并返回
A 调用 B,B 返回结果
事件驱动,构件间松耦合
发布事件,谁关心谁处理
抽象执行环境,解释执行
在虚拟环境里跑自定义逻辑
以数据为中心,构件围绕共享数据协作
所有人围着一块黑板读写
典型应用:传统编译器(词法→语法→语义→代码生成)、ETL 数据处理、网络报文处理、图像处理流水线
子风格区分:批处理 = 整批处理完再下一步,无交互;管道-过滤器 = 流式传输,弱交互
典型应用:传统单体应用、分层架构(表现层→业务层→持久层)、客户端-服务器架构
典型应用:事件驱动架构、微服务间通信、消息驱动系统
| 项目 | 解释器 | 规则系统 |
|---|---|---|
| 本质 | 执行程序 | 执行规则 |
| 数据来源 | 输入程序 | 规则库 + 数据 |
| 智能性 | 较低 | 较高 |
| 复杂度 | 中等 | 高 |
| 核心组成 | 被解释程序、解释器引擎、状态存储、数据存储 | 规则集(知识库)、事实集、规则解释器、工作内存、选择机制 |
典型应用:编程语言解释器、DSL(领域特定语言)、规则引擎(如 Drools)、专家系统、决策支持系统、工作流引擎
典型应用:数据共享系统、协同编辑系统、专家系统(黑板架构)、语音识别、图像处理、知识推理
| 维度 | 数据流 | 调用/返回 | 独立构件 | 虚拟机 | 仓库 |
|---|---|---|---|---|---|
| 驱动方式 | 数据驱动 | 控制流驱动 | 事件驱动 | 规则/程序驱动 | 数据共享驱动 |
| 耦合度 | 松耦合 | 较紧耦合 | 松耦合 | 中等 | 中等 |
| 交互性 | 差 | 好 | 中等 | 中等 | 中等 |
| 可扩展性 | 好 | 好 | 好 | 好 | 好 |
| 可维护性 | 好 | 好 | 中等 | 中等 | 中等 |
| 控制流 | 顺序 | 明确 | 难预测 | 由规则决定 | 难预测 |
| 调试难度 | 低 | 低 | 高 | 中等 | 高 |
| 性能 | 较差 | 好 | 中等 | 较差 | 中等 |
| 并行支持 | 好 | 差 | 好 | 差 | 中等 |
| 风格 | 构件关系 | 通信方式 |
|---|---|---|
| 数据流 | 前后顺序 | 管道 / 数据流 |
| 调用 / 返回 | 调用者 → 被调用者 | 函数调用 |
| 独立构件 | 无直接关系 | 事件 / 消息 |
| 虚拟机 | 解释器 → 被解释程序 | 解释执行 |
| 仓库 | 围绕共享数据 | 读写共享存储 |
| 对比项 | 独立构件风格 | 调用返回风格 |
|---|---|---|
| 交互方式 | 事件驱动 | 函数调用 |
| 构件关系 | 不直接交互 | 直接调用 |
| 耦合性 | 松耦合 | 紧耦合 |
| 控制方式 | 分散 | 集中 |
遇到架构风格识别题,按以下顺序依次判断:
(数据流 → 调用返回 → 独立构件 → 虚拟机 → 仓库)
架构风格决定了系统的扩展方向和扩展手段。考试中可能结合架构风格判断扩展方案的合理性。
| 风格 | 扩展方式 | 核心手段 | 难度 |
|---|---|---|---|
| 数据流 | 流水线并行 + 过滤器水平扩展 | 各过滤器独立部署,多实例并行处理;管道各阶段可重叠执行 | 较易 |
| 调用/返回 | 分层独立扩展 + 负载均衡 | 各层独立水平伸缩,负载均衡分发请求;增加服务器节点 | 中等 |
| 独立构件 | 事件处理器弹性伸缩 | 构件独立部署;消息队列解耦,按事件量动态增减处理器实例 | 容易 |
| 虚拟机 | 优化解释引擎 + 引擎实例扩展 | 解释器优化(JIT、缓存);规则引擎多实例分布式推理 | 较难 |
| 仓库 | 存储层扩展 + 计算节点扩展 | 分布式存储、数据分片、读写分离、缓存;增加知识源节点 | 中等 |