系统架构设计师
核心考点笔记

覆盖软件架构设计、软件系统设计、数据库系统设计三大模块, 保留全部知识点,按考试重点重新组织结构,便于快速复习与查阅。

软件架构 系统建模 数据库设计 选做题高频考点
01

软件架构设计

PART · I

质量属性

软件系统常见的八大质量属性:

性能 可靠性 可用性 安全性 可修改性 功能性 可变性 互操作性

质量属性效用树

ATAM 方法采用效用树(Utility Tree)这一工具来对质量属性进行分类和优先级排序。效用树的结构包括:

树根 ── 质量属性 ── 属性分类 ── 质量属性场景(叶子节点)

ATAM 主要关注 4 类质量属性,因为这是利益相关者最为关心的:

记忆口诀

性(性能)、安(安全性)、可(可修改性)、用(可用性)
谐音 → "心安可用"

关键概念辨析

敏感点 为实现某种特定的质量属性,一个或多个构件所具有的特性。
权衡点 影响多个质量属性的特性,即多个质量属性的敏感点。
风险点 某做法有隐患,可能导致问题,即为风险点。
非风险点 某件事可行、可接受,则为非风险点。

注:风险点与非风险点不是标准专业术语,而是常规概念。架构风险指架构设计中潜在的、存在问题的架构决策所带来的隐患。

软件架构风格

软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的

架构风格对比(高频考点)

架构风格 子风格 常考关键字 简介
数据流 批处理 一个接一个,数据以整体的方式传递
管道-过滤器 传统编译器、网络报文处理 一个接一个,前一个输出是后一个输入
调用/返回 主程序/子程序 显式调用,主程序直接调用子程序
面向对象 构件是对象,通过对象调用封装的方法和属性
层次型 分层,每层最多影响其上下两层,有调用关系
C/S 三层 C/S:客户端、应用服务器、数据库服务器
B/S 三层 B/S:浏览器、Web 服务器、数据库服务器
以数据为中心 仓库 现代编译器 IDE,又称数据共享风格 中央共享数据源,独立处理单元
黑板 包括知识源、黑板和控制三部分。适用于复杂非结构化问题,如信号处理、问题规划、编译器优化
虚拟机 解释器 自定义一套规则开发构件,增加灵活性,能跨平台适配
规则系统
独立构件 进程通信
事件系统 事件触发调用,如语法高亮、语法错误提示
C2 风格 构件和连接件、顶部和底部
闭环-过程控制 汽车巡航定速、空调温度调节 设定参数并不断调整

常考架构的主要特点

  1. 管道-过滤器:过滤器相对独立
  2. 解释器风格:系统核心是虚拟机
  3. 面向对象构件是对象,对象通过函数和过程的调用来交互
  4. 事件系统:构件不直接调用一个过程,而是触发或广播一个或多个事件
  5. 层次型构件组成一个层次结构,每一层为上层提供服务,并作为下层的客户,只对相邻的层可见
  6. 仓库:由中央数据结构(说明当前数据状态)和一组独立构件(对中央数据进行操作)组成

MVC 架构

MVC 架构形成了 模型、视图、控制器 三个核心模块:

Model 模型 应用程序中用于处理应用程序数据逻辑的部分
View 视图 应用程序中处理数据显示的部分
Controller 控制器 应用程序中处理用户交互的部分

MVC 优势

  • MVC 分层有助于管理复杂的应用程序,因为可以在一个时间内专门关注一个方面
  • 简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑

J2EE 架构

J2EE 多层架构由四个层次组成:

客户层组件 J2EE 应用程序可以是基于 Web 方式的,也可以是基于传统方式的、静态的 HTML 页面和 Applets
Web 层组件 J2EE Web 层组件可以是 JSP 页面或 Servlet
业务层组件 业务层代码的逻辑用来满足特定领域的业务逻辑处理
信息系统层 处理企业信息系统软件,包括 ERP、大型机事务处理、数据库系统和其他遗留信息系统

面向服务的架构 SOA

SOA 是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能。 各个服务通常以独立的形式部署运行,服务之间通过网络进行调用。

企业服务总线 ESB

简单来说 ESB 是一根管道,用来连接各个服务节点。 ESB 的存在是为了集成基于不同协议的不同服务,做了消息的转化、解释以及路由的工作,让不同的服务互联互通。

ESB 的特点

  1. SOA 的一种实现方式,ESB 在面向服务的架构中起到的是总线作用,将各种服务进行连接与整合
  2. 描述服务的元数据和服务注册管理
  3. 服务请求者和提供者之间传递数据,以及对这些数据进行转换的能力,支持同步模式、异步模式等
  4. 发现、路由、匹配和选择的能力,支持服务之间的动态交互,解耦服务请求者和服务提供者。高级能力包括安全支持、服务质量保证、可管理性、负载平衡等

ESB 的主要功能(7 项)

① 服务位置透明性 ② 传输协议转换 ③ 消息格式转换 ④ 消息路由 ⑤ 消息增强 ⑥ 安全性 ⑦ 监控与管理
02

软件系统设计

PART · II
选做题,几乎每年必考 1 题,不会涉及大范围的系统分析与设计原理,而是偏向于软件设计与建模的范围。 主要考查 UML 中的图、关系的识别;设计模式识别;数据流图、E-R 图;信息安全相关技术;项目管理-进度管理-关键路径。 答案基本都在题目描述里,从题目描述抽象总结出问题答案。本题考查比较简单,一般可以拿到 20 分

数据流图 DFD

基本图形元素

数据流图中的基本图形元素包括 数据流、加工、数据存储和外部实体

① 数据流 数据的流向。流向情况:加工→加工;加工→数据存储(写);数据存储→加工(读);外部实体→加工(输入);加工→外部实体(输出)。
数据流必须与加工有关。除流向/流出数据存储的数据流可不命名外,每个数据流都必须有一个明确的名字。
② 加工 描述输入数据流到输出数据流之间的变换。一个加工至少有一个输入数据流和一个输出数据流
异常情况:"黑洞"—有输入无输出;"奇迹"—无输入有输出;"灰洞"—输入不足以产生输出。
③ 数据存储 用来存储数据。具体实现时可用文件系统或数据库系统实现,存储介质可以是磁盘、磁带或其他存储介质。
④ 外部实体 存在于软件系统之外的人员或组织,指出系统所需数据的发源地系统所产生数据的归宿地

主要考点

考点一:补充外部实体

外部实体就是与信息系统进行交互的实体,可以是人员、组织或外部系统。 根据外部实体与信息系统之间的数据流得到外部实体,仅看上下文数据流图就可以。

考点二:补充数据存储

数据存储出现在 0 层数据流图中,反应系统内部数据的存储。 可以直接根据数据流图中数据存储的输入数据流和输出数据流判断该数据存储的名字 (一般为输入数据流名 + 表/信息表/文件)。
快速定位数据存储:找从加工流向数据存储的加工所在的功能描述。

考点三:补充加工

一般情况下,数据流图中的加工名称与信息系统的功能标题一一对应

数据平衡原则

  1. 父图与子图平衡:如果某图 A 中的某个加工分解成一张子图 B,则 A 是 B 的父图,B 是 A 的子图。 父图与子图平衡指:任何一张 DFD 子图边界上的输入/输出数据流必须与其父图中对应加工的输入/输出数据流保持一致
  2. 每张图的图内平衡:对于图内的每一个加工,要求既要有输入数据流,也要有输出数据流,避免出现黑洞、奇迹、灰洞

E-R 图

E-R 模型即实体-联系模型,用来描述现实世界的概念模型(接近于人的思维方式,容易理解)。 三个主要概念:实体、联系和属性

① 实体(矩形)

每个实体由一组属性表示,包括 候选键、主键、外键。实体集是指具有相同属性的实体集合。

候选键能唯一地标识一行元组的属性集
主键从候选键中选一个作为主键
外键在另一个关系模式中充当主键的属性

② 联系(菱形)

实体集之间的对应关系称为联系,分为:

一对一 1:1 一对多 1:n 或 1:* 多对多 m:n 或 *:*

③ 属性(椭圆)

是实体某方面的特性。E-R 模型中的属性分为:

  1. 简单和复合属性:简单属性是原子的、不可再分的;复合属性可以划分为多个子属性,如通信地址
  2. 单值和多值属性:对一个特定实体只有一个单独的值是单值属性(如员工号、员工姓名);而员工的亲属姓名可能有多个,称为多值属性
  3. NULL 属性:某属性没有值或属性值未知时使用 NULL 值,表示无意义或不知道
  4. 派生属性:可以从其他属性得来。例如"工作年限"可以由当前时间和参加工作时间得到

弱实体集

一个实体的存在必须以另一个实体为前提,这类实体称为弱实体集。例如:职工的家属必须以职工在职为前提,依赖于职工。

UML 建模

UML 中的四种关系

依赖 关联 泛化 实现

UML 中的五种主要图

① 用例图 三种关系:包含关系、扩展关系、泛化关系
② 类图 展示系统的静态结构,包含类、接口及其关系
③ 顺序图(序列图) 描述对象之间的交互(消息的发送与接收),重点在于强调顺序
④ 活动图 描述过程行为和并行行为。是一种特殊的状态图,展现系统内从一个活动到另一个活动的流程
⑤ 状态图 描述对象状态及其转换。就是一个状态机,由状态、转换、事件等组成。 状态是指对象在其生命周期中的某个条件或状态。转换可通过事件触发,事件触发后相应的监护条件会进行检查。 状态图关注系统的动态视图,强调对象行为的事件顺序。状态包括简单状态和组合状态(含有子状态的状态称为组合状态)。
活动图关键术语

活动图中的分岔和汇合线是一条水平粗线。牢记图中 并发分岔、并发汇合、监护表达式、分支、流等名词及含义。 每个分岔的分支数代表了可同时运行的线程数。活动图中能够 并行执行的是在一个分岔粗线下的分支上的活动。

软件项目管理

① 甘特图

✔ 优点

能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。

✘ 缺点

不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。

② 项目活动图(PERT 图)

掌握关键路径的计算,会依据表格和题目描述画图,然后求出关键路径。

03

数据库系统设计

PART · III
选做题,几乎每年必考 1 题,主要考查数据库的一些新技术的比较,如 关系型数据库、非关系型数据库 NoSQL 以及内存数据库 Redis 等, 还会包括反规范化技术、主从复制、负载均衡等。

ORM 技术

ORM(Object-Relational Mapping) 在关系型数据库和对象之间作一个映射, 这样在具体操作数据库的时候,就不需要再去和复杂的 SQL 语句打交道,只需像操作对象一样即可

核心映射关系

面向对象编程把所有实体看成对象 (object),关系型数据库则是采用实体之间的关系 (relation) 连接数据

数据库的表 (table) → 类 (class)
记录 (record, 行数据) → 对象 (object)
字段 (field) → 对象的属性 (attribute)

优缺点对比

✔ 优点
  • 使用 ORM 可以大大降低学习和开发成本
  • 程序员不用再写 SQL 来进行数据库操作
  • 减少程序的代码量
  • 降低由于 SQL 代码质量差而带来的影响
✘ 缺点
  • 不太容易处理复杂查询语句
  • 性能较直接用 SQL 差

数据库类型比较

关系型数据库 建立在关系模型基础上的数据库,借助集合代数等数学概念和方法来处理数据。 是由多张能互相联接的二维行列表格组成的数据库
NoSQL 泛指非关系型的数据库。为了解决大规模数据集合多重数据种类带来的挑战, 尤其是大数据应用难题,包括超大规模数据的存储。 例:Mongodb、Redis、Hbase、neo4j、Cassandra 等。
内存数据库 将数据库整体存储在内存中,提高性能。 典型代表:Redis。

缓存技术

Redis

Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。

MemCache

MemCache 是一个高性能的分布式的内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。 MemCache 通过在内存里维护一个统一的巨大的 Hash 表,能够用来存储各种格式的数据, 包括图像、视频、文件以及数据库检索的结果等。

Redis 与 MemCache 的差异

对比维度 Redis MemCache
数据类型 支持 Key-Value、List、Set、Hash 等多种数据结构 仅支持 Key-Value,可缓存图片、视频等
内存管理 并不是所有数据都一直存储在内存中,物理内存用完时可将很久没用到的 Value 交换到磁盘 数据都缓存在内存中
持久化 支持持久化,两种主要策略:RDB 快照和 AOF 日志 不支持数据持久化操作
数据备份 支持 master-slave 模式的数据备份;数据丢失后可通过 AOF 恢复 宕机后数据不可恢复

缓存中的常见问题

缓存击穿 在高并发访问下,被频繁访问的数据项在缓存中失效时,大量并发请求直接涌入后端数据库,导致数据库负载增大。
解决:使用互斥锁、分布式锁、热点数据预加载等。
缓存雪崩 缓存层整体失效,导致大量请求涌入后端。
解决:设置不同的过期时间、使用多个独立的缓存集群等。
缓存穿透 请求查询一个不存在于缓存和数据库中的键。
解决:使用布隆过滤器来判断请求的键是否有效,从而减轻数据库压力。
记忆口诀

无数据 → 穿透热点 key 失效 → 击穿大量 key 失效 → 雪崩

分布式锁

分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。 它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性

实现分布式锁的三种方式

  1. 使用 MySQL,基于唯一索引
  2. 使用 Zookeeper,基于临时有序节点
  3. 使用 Redis,基于 setnx 命令

Redis 实现简单分布式锁过程

  1. 获取锁:使用 setnx 命令加锁(key 不存在时加锁成功),并使用 expire 命令为锁添加一个超时时间(避免死锁),超过该时间则自动释放锁,锁的 value 值为一个随机生成的 UUID
  2. 释放锁:通过 UUID 判断是不是该锁,若是该锁,则执行 delete 进行锁释放

解决死锁的策略

设置锁的超时时间、使用 Redlock 算法、引入锁的等级、使用一致性哈希算法以及使用锁粒度更小的方式等。

不规范化带来的四大问题

设关系模式 R(SNAME, CNAME, TNAME, TADDRESS), 属性分别表示学生姓名、选修课程名、任课教师姓名和教师地址。该模式存在下列存储异常的问题:

① 数据冗余 数据被重复存储。如某课程有 100 个学生选修,关系中就要出现 100 个元组,教师姓名和地址也随之重复 100 次。
② 修改异常 修改导致数据不一致。如要修改教师地址时,要修改 100 个元组中的地址值,否则会出现地址值不一致的现象。
③ 插入异常 插入时异常。如不知道听课学生名单,教师的任课情况和家庭地址就无法进入数据库,否则就要在学生姓名处插入空值。
④ 删除异常 删除了不该删除的数据。如只有一条记录时,要删除学生选课信息,会将课程名、教师名和教师地址都给删除。

反规范化技术

规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术。

✔ 益处

降低连接操作的需求、降低外键和索引的数目,还可能减少表的数目,能够提高查询效率。

✘ 可能带来的问题

数据的重复存储,浪费磁盘空间;可能出现数据的完整性问题, 为保障数据一致性,增加了数据维护的复杂性,会降低修改速度

五种常用反规范化方法

方法说明
增加冗余列 多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作
增加派生列 在表中增加可以由本表或其它表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数
重新组表 如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能
水平分割表 根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用
垂直分割表 对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少 IO 次数

并发控制

并发操作就是在多用户系统中,可能出现多个事务同时操作同一数据的情况。并发操作会导致 3 种数据不一致的问题:

① 丢失更新 当两个事务 T1 和 T2 读入同一数据做修改,并发执行时,T1 把 T2 或 T2 把 T1 的修改结果覆盖掉,造成了数据的丢失更新问题。
② 不可重复读 事务 T1 读取了数据 R,事务 T2 读取并更新了数据 R。当事务 T1 再读取数据 R 以进行核对时,得到的两次读取数据不一致。
③ 读脏数据 事务 T1 更新了数据 R,事务 T2 读取了更新后的数据 R,事务 T1 由于某种原因被撤销回滚,数据 R 恢复原值,事务 T2 读取了脏数据。
根本原因

造成以上 3 种数据不一致的主要原因是事务的并发操作破坏了事务的隔离性

封锁协议

并发控制的主要技术是封锁(Lock)技术。

加锁基本原则

如果该事务只读数据,就只加读锁;如果该事务要写数据,就加写锁。

分布式数据库

分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上, 网络中的每个节点具有独立处理的能力(称为场地自治), 它可以执行局部应用,同时每个节点也能通过网络通信子系统执行全局应用

分布式数据库系统的特点

  1. 数据独立性。除了数据的逻辑独立性与物理独立性外,还有数据分布独立性(分布透明性)
  2. 集中与自治共享结合的控制结构。各局部 DBMS 可以独立地管理局部数据库,具有自治的功能; 同时,系统又设有集中控制机制,协调各局部 DBMS 的工作,执行全局应用。
  3. 适当增加数据冗余度。在不同的场地存储同一数据的多个副本,可以提高系统的可靠性和可用性,同时也能提高系统性能。
  4. 全局的一致性、可串行性和可恢复性

分布式数据库的优点

  1. 分布式数据库可以解决企业部门分散而数据需要相互联系的问题
  2. 企业需要增加新的相对自主的部门来扩充机构时,可在对当前机构影响最小的情况下进行扩充
  3. 分布式数据库可以满足均衡负载的需要
  4. 当企业已存在几个数据库系统,而且实现全局应用的必要性增加时,可由这些数据库自下而上构成分布式数据库系统
  5. 故障的影响仅限于局部数据应用,因此就整个系统来说,它的可靠性是比较高

数据分片

数据分片将数据库整体逻辑结构分解为合适的逻辑单位(片段),然后由分布模式来定义片段及其副本在各场地的物理分布, 其主要目的是提高访问的局部性,有利于按照用户的需求,组织数据的分布和控制数据的冗余度。

四种数据分片方式

水平分片 将一个全局关系中的元组分裂成多个子集,每个子集为一个片段。分片条件由关系中的属性值表示。重构全局关系可通过并操作实现。
垂直分片 将一个全局关系按属性分裂成多个子集,应满足不相交性(关键字除外)。重构全局关系可通过连接运算实现。
导出分片 又称为导出水平分片,即水平分片的条件不是本关系属性的条件,而是其他关系属性的条件
混合分片 在分片中采用水平分片和垂直分片两种形式的混合

分布透明性的三个层次

分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数据库的数据模型。

  1. 分片透明性:分布透明性的最高层次,用户或应用程序只对全局关系进行操作而不必考虑数据的分片
  2. 位置透明性:用户或应用程序应当了解分片情况,但不必了解片段的存储场地
  3. 局部数据模型透明性:用户或应用程序应当了解分片及各片段存储的场地,但不必了解局部场地上使用的是何种数据模型

数据仓库

数据仓库集成是把多种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和存储容量。 数据仓库主要用于决策支持,在数据处理过程中强调分析。

数据仓库的四大特点

① 集成的数据 ② 面向主题 ③ 数据相对稳定 ④ 包含历史信息

数据仓库的四层结构

① 数据源 是数据仓库系统的基础,是整个系统的数据源泉。
② 数据的存储与管理 是整个数据仓库系统的核心
③ OLAP(联机分析处理)服务器 对分析需要的数据进行有效集成,按多维模型组织,以便进行多角度、多层次的分析,并发现趋势。
④ 前端工具 主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。