第一部分:架构评估概述
1. 什么是架构评估?
架构评估是一个在系统被构建之前,用于分析系统架构是否满足特定质量目标的过程。其核心目的是早期发现风险,避免在开发后期或部署阶段因架构缺陷导致高昂的修改成本。
简单来说:在盖楼之前,请专家团审查设计图,看它是否满足抗震(可用性)、防火(安全性)、空间布局合理(可修改性)等要求。
2. 主要评估方法
在软考中,最需要掌握的是 ATAM。
-
SAAM :较早的方法,主要用于评估可修改性。
-
ATAM :架构权衡分析方法。这是软考的重点和常考点。
- 核心思想 :质量属性之间是存在权衡关系的,不可能所有属性都达到最优。提高性能可能会牺牲可修改性,增强安全性可能会影响易用性。ATAM的目的就是揭示这些权衡点,并帮助决策者做出明智的选择。
3. ATAM 评估流程
ATAM的流程可以概括为四个阶段和九个步骤,但其核心产出物非常明确。
核心参与角色:
-
评估小组:外部的架构专家。
-
项目决策者:项目经理、客户代表等。
-
架构师:系统架构的设计者。
关键产出物:
-
架构决策 与 质量属性效用树:
-
这是ATAM的核心。它将系统的"效用"(整体目标)分解为具体的质量属性目标 ,并对其进行优先级排序。
-
结构 :
质量属性 -> 刺激(在什么情况下) -> 响应(系统应该如何反应) -> 优先级(高、中、低)
-
示例:
-
(安全性) -> (受到SQL注入攻击时) -> (系统在1分钟内检测并阻断,且不泄露任何用户数据) -> (高)
-
(性能) -> (在双十一高峰期,每秒处理10万笔下单请求时) -> (系统响应时间保持在2秒以内) -> (高)
-
-
-
风险、非风险、敏感点、权衡点:
-
风险:可能导致无法满足质量属性要求的架构决策。
-
非风险:经过验证的、能保证质量属性实现的良好决策。
-
敏感点:一个或多个构件的特性,它对某个质量属性有显著影响。
- 示例 :加密算法的强度是安全性的一个敏感点。
-
权衡点 :影响多个质量属性的架构决策,并且这些影响是冲突的。
- 示例 :为提高性能 而引入数据缓存,但可能会引入脏数据,从而降低可用性 和数据一致性。这就是一个典型的权衡点。
-
第二部分:核心质量属性详解
以下是在软考和实际架构设计中最为关键的几个质量属性。
1. 性能
-
定义:系统在给定资源和时间限制下完成指定任务的能力。
-
刺激源:内部或外部的事件触发。
-
架构战术/决策:
-
引入并发:使用多线程、异步处理。
-
资源调度:采用先进先出、固定优先级、动态优先级调度算法。
-
增加资源:更快的硬件、更多的服务器。
-
负载均衡:将请求分发到多个服务器。
-
缓存:在内存中存储频繁访问的数据,减少对慢速存储的访问。
-
减少计算开销:优化算法,减少中间步骤。
-
2. 可用性
-
定义:系统在需要时能够正常运行和访问的比例。通常用"几个9"来衡量(如99.999%)。
-
刺激源:系统故障(硬件、软件、网络)。
-
架构战术/决策:
-
Ping/Echo:心跳检测,监控组件是否存活。
-
异常处理:捕获并处理错误,防止系统崩溃。
-
主动冗余:主备模式,备机同步运行,随时准备接管。
-
被动冗余:备机不处理业务,只在主机故障时启动。
-
事务:使用ACID事务保证操作的原子性,从错误状态恢复。
-
进程监控:监控进程状态,失败时能自动重启。
-
3. 安全性
-
定义:系统保护自身数据和资源免受未经授权的访问和攻击的能力。
-
刺激源:恶意攻击者。
-
架构战术/决策:
-
身份认证:确认用户身份(如用户名/密码、双因子认证)。
-
授权:控制已认证用户能访问哪些资源(如RBAC模型)。
-
审计:记录用户操作,用于事后追溯。
-
数据加密:对存储和传输的数据进行加密。
-
限制暴露点:使用防火墙、API网关,减少系统对外暴露的攻击面。
-
入侵检测:实时监控并识别攻击行为。
-
4. 可修改性
-
定义:系统能够以高性价比、低风险的方式被变更的容易程度。包括可维护性、可扩展性、可移植性等。
-
刺激源:开发者需要增加/修改功能、适配新平台等。
-
架构战术/决策:
-
高内聚/低耦合:这是最核心的原则。模块内部高度相关,模块之间依赖关系简单。
-
抽象:使用接口、抽象类来定义契约,隐藏实现细节。
-
信息隐藏:模块只暴露必要的接口,隐藏其内部数据和实现。
-
语义一致性:将功能相关的类放在同一个模块中。
-
使用中间件:通过消息队列、API网关等解耦服务。
-
模块化 、分层架构 、微服务架构 都是提升可修改性的宏观架构风格。
-
5. 可测试性
-
定义:软件发现故障并隔离其根本原因的容易程度。
-
刺激源测试人员/开发者执行测试用例。
-
架构战术/决策:
-
记录/回放:记录系统状态和输入,便于回放和调试。
-
抽象:将接口与实现分离,便于实现Mock和Stub。
-
提供专用接口:为测试提供特殊的钩子或接口,用于注入测试数据或检查内部状态。
-
内置监控:在系统中内置健康检查和性能指标接口。
-
6. 易用性
-
定义:用户学习和使用系统所需的努力程度。
-
刺激源:用户与系统交互。
-
架构战术/决策:
-
MVC/MVP/MVVM模式:将用户界面逻辑与业务逻辑分离,使得UI可以独立修改和测试。
-
用户操作模型化:将用户的常见操作流程封装成清晰的模型。
-
运行时自定义:允许用户在运行时调整界面布局、主题等。
-
分离UI与后端:前后端分离架构,使得前端可以专注于用户体验的优化。
-
第三部分:软考考点与应试技巧
-
概念辨析:必须清晰理解每个质量属性的定义、刺激源和典型架构战术。能够区分相似概念,例如:
-
性能 vs 可用性:性能关心"快不快",可用性关心"有没有"。
-
可修改性 vs 可测试性:可修改性关心"改起来方不方便",可测试性关心"测起来容不容易"。
-
-
ATAM流程与核心产物:
-
一定会考效用树的概念和作用。
-
一定会考敏感点 、权衡点 、风险的定义和识别。给你一个场景,要能判断属于哪一类。
-
例题 :"为了提高系统响应速度(性能),架构师决定将所有业务模块部署在同一进程中,但这导致任何一个模块的bug都会导致整个系统崩溃。这个决策在ATAM评估中被称为?" 答案:权衡点(在性能和可用性之间权衡)。
-
-
场景分析题(大题):
-
题目会描述一个系统的背景和需求(例如:"一个大型电商平台,需要应对秒杀活动,保证7x24小时可用,并且要防止恶意刷单")。
-
问题1:请列出该系统重点需要关注的质量属性,并说明理由。
- 答:性能(应对高并发请求)、可用性(7x24小时)、安全性(防止恶意刷单)。
-
问题2:针对某个质量属性,提出至少两种架构设计决策(战术)。
- 答:针对性能,可以采用(1)引入Redis缓存,减少数据库压力;(2)使用负载均衡,将用户请求分发到多台应用服务器。
-
问题3:指出设计中可能存在的权衡点。
- 答:引入复杂的缓存机制虽然提升了性能,但也增加了数据不一致的风险(牺牲了数据一致性),并使得系统架构更复杂,降低了可修改性。
-
-
关联记忆:
-
将架构战术与具体的架构模式/技术关联起来。例如:
-
微服务 -> 高内聚低耦合 -> 提升可修改性 ,但可能因网络调用增加而影响性能。
-
缓存 -> 提升性能 ,但可能引发数据一致性问题。
-
主从复制 -> 提升可用性 和性能(读),但存在主从延迟。
-
-
-