质量属性
软件系统常见的八大质量属性:
覆盖软件架构设计、软件系统设计、数据库系统设计三大模块, 保留全部知识点,按考试重点重新组织结构,便于快速复习与查阅。
软件系统常见的八大质量属性:
ATAM 方法采用效用树(Utility Tree)这一工具来对质量属性进行分类和优先级排序。效用树的结构包括:
ATAM 主要关注 4 类质量属性,因为这是利益相关者最为关心的:
性(性能)、安(安全性)、可(可修改性)、用(可用性)
谐音 → "心安可用"
注:风险点与非风险点不是标准专业术语,而是常规概念。架构风险指架构设计中潜在的、存在问题的架构决策所带来的隐患。
软件架构风格是描述某一特定应用领域中系统组织方式的惯用模式。架构风格定义一个系统家族,即一个架构定义一个词汇表和一组约束。词汇表中包含一些构件和连接件类型,而这组约束指出系统是如何将这些构件和连接件组合起来的。
| 架构风格 | 子风格 | 常考关键字 | 简介 |
|---|---|---|---|
| 数据流 | 批处理 | — | 一个接一个,数据以整体的方式传递 |
| 管道-过滤器 | 传统编译器、网络报文处理 | 一个接一个,前一个输出是后一个输入 | |
| 调用/返回 | 主程序/子程序 | — | 显式调用,主程序直接调用子程序 |
| 面向对象 | — | 构件是对象,通过对象调用封装的方法和属性 | |
| 层次型 | — | 分层,每层最多影响其上下两层,有调用关系 | |
| C/S | — | 三层 C/S:客户端、应用服务器、数据库服务器 | |
| B/S | — | 三层 B/S:浏览器、Web 服务器、数据库服务器 | |
| 以数据为中心 | 仓库 | 现代编译器 IDE,又称数据共享风格 | 中央共享数据源,独立处理单元 |
| 黑板 | — | 包括知识源、黑板和控制三部分。适用于复杂非结构化问题,如信号处理、问题规划、编译器优化 | |
| 虚拟机 | 解释器 | 自定义一套规则开发构件,增加灵活性,能跨平台适配 | — |
| 规则系统 | — | ||
| 独立构件 | 进程通信 | — | — |
| 事件系统 | 事件触发调用,如语法高亮、语法错误提示 | — | |
| C2 风格 | — | 构件和连接件、顶部和底部 | — |
| 闭环-过程控制 | — | 汽车巡航定速、空调温度调节 | 设定参数并不断调整 |
MVC 架构形成了 模型、视图、控制器 三个核心模块:
J2EE 多层架构由四个层次组成:
SOA 是一种设计理念,其中包含多个服务,服务之间通过相互依赖最终提供一系列完整的功能。 各个服务通常以独立的形式部署运行,服务之间通过网络进行调用。
简单来说 ESB 是一根管道,用来连接各个服务节点。 ESB 的存在是为了集成基于不同协议的不同服务,做了消息的转化、解释以及路由的工作,让不同的服务互联互通。
数据流图中的基本图形元素包括 数据流、加工、数据存储和外部实体。
外部实体就是与信息系统进行交互的实体,可以是人员、组织或外部系统。 根据外部实体与信息系统之间的数据流得到外部实体,仅看上下文数据流图就可以。
数据存储出现在 0 层数据流图中,反应系统内部数据的存储。
可以直接根据数据流图中数据存储的输入数据流和输出数据流判断该数据存储的名字
(一般为输入数据流名 + 表/信息表/文件)。
快速定位数据存储:找从加工流向数据存储的加工所在的功能描述。
一般情况下,数据流图中的加工名称与信息系统的功能标题一一对应。
E-R 模型即实体-联系模型,用来描述现实世界的概念模型(接近于人的思维方式,容易理解)。 三个主要概念:实体、联系和属性。
每个实体由一组属性表示,包括 候选键、主键、外键。实体集是指具有相同属性的实体集合。
实体集之间的对应关系称为联系,分为:
是实体某方面的特性。E-R 模型中的属性分为:
一个实体的存在必须以另一个实体为前提,这类实体称为弱实体集。例如:职工的家属必须以职工在职为前提,依赖于职工。
活动图中的分岔和汇合线是一条水平粗线。牢记图中 并发分岔、并发汇合、监护表达式、分支、流等名词及含义。 每个分岔的分支数代表了可同时运行的线程数。活动图中能够 并行执行的是在一个分岔粗线下的分支上的活动。
能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。
不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
掌握关键路径的计算,会依据表格和题目描述画图,然后求出关键路径。
ORM(Object-Relational Mapping) 在关系型数据库和对象之间作一个映射, 这样在具体操作数据库的时候,就不需要再去和复杂的 SQL 语句打交道,只需像操作对象一样即可。
面向对象编程把所有实体看成对象 (object),关系型数据库则是采用实体之间的关系 (relation) 连接数据。
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
MemCache 是一个高性能的分布式的内存对象缓存系统,用于动态 Web 应用以减轻数据库负载。 MemCache 通过在内存里维护一个统一的巨大的 Hash 表,能够用来存储各种格式的数据, 包括图像、视频、文件以及数据库检索的结果等。
| 对比维度 | Redis | MemCache |
|---|---|---|
| 数据类型 | 支持 Key-Value、List、Set、Hash 等多种数据结构 | 仅支持 Key-Value,可缓存图片、视频等 |
| 内存管理 | 并不是所有数据都一直存储在内存中,物理内存用完时可将很久没用到的 Value 交换到磁盘 | 数据都缓存在内存中 |
| 持久化 | 支持持久化,两种主要策略:RDB 快照和 AOF 日志 | 不支持数据持久化操作 |
| 数据备份 | 支持 master-slave 模式的数据备份;数据丢失后可通过 AOF 恢复 | 宕机后数据不可恢复 |
无数据 → 穿透, 热点 key 失效 → 击穿, 大量 key 失效 → 雪崩
分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。 它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。
设置锁的超时时间、使用 Redlock 算法、引入锁的等级、使用一致性哈希算法以及使用锁粒度更小的方式等。
设关系模式 R(SNAME, CNAME, TNAME, TADDRESS),
属性分别表示学生姓名、选修课程名、任课教师姓名和教师地址。该模式存在下列存储异常的问题:
规范化设计后,数据库设计者希望牺牲部分规范化来提高性能,这种从规范化设计的回退方法称为反规范化技术。
降低连接操作的需求、降低外键和索引的数目,还可能减少表的数目,能够提高查询效率。
数据的重复存储,浪费磁盘空间;可能出现数据的完整性问题, 为保障数据一致性,增加了数据维护的复杂性,会降低修改速度。
| 方法 | 说明 |
|---|---|
| 增加冗余列 | 在多个表中保留相同的列,通过增加数据冗余减少或避免查询时的连接操作 |
| 增加派生列 | 在表中增加可以由本表或其它表中数据计算生成的列,减少查询时的连接操作并避免计算或使用集合函数 |
| 重新组表 | 如果许多用户需要查看两个表连接出来的结果数据,则把这两个表重新组成一个表来减少连接而提高性能 |
| 水平分割表 | 根据一列或多列数据的值,把数据放到多个独立的表中,主要用于表数据规模很大、表中数据相对独立或数据需要存放到多个介质上时使用 |
| 垂直分割表 | 对表进行分割,将主键与部分列放到一个表中,主键与其它列放到另一个表中,在查询时减少 IO 次数 |
并发操作就是在多用户系统中,可能出现多个事务同时操作同一数据的情况。并发操作会导致 3 种数据不一致的问题:
造成以上 3 种数据不一致的主要原因是事务的并发操作破坏了事务的隔离性。
并发控制的主要技术是封锁(Lock)技术。
如果该事务只读数据,就只加读锁;如果该事务要写数据,就加写锁。
分布式数据库是由一组数据组成的,这组数据分布在计算机网络的不同计算机上, 网络中的每个节点具有独立处理的能力(称为场地自治), 它可以执行局部应用,同时每个节点也能通过网络通信子系统执行全局应用。
数据分片将数据库整体逻辑结构分解为合适的逻辑单位(片段),然后由分布模式来定义片段及其副本在各场地的物理分布, 其主要目的是提高访问的局部性,有利于按照用户的需求,组织数据的分布和控制数据的冗余度。
分布透明性是指用户不必关心数据的逻辑分片,不必关心数据存储的物理位置分配细节,也不必关心局部场地上数据库的数据模型。
数据仓库集成是把多种来源的数据集中在一起,建立数据仓库,所有数据都驻留在单个数据库服务器上,配置大型处理器和存储容量。 数据仓库主要用于决策支持,在数据处理过程中强调分析。