系统架构设计师备考第45天——软件架构演化评估方法和维护
一、 软件架构演化评估方法
1 演化过程已知的评估
目标:通过度量架构演化过程,分析内部结构差异与外部质量属性变化的关系。
评估流程:
- 拆分原子操作
- 将演化过程分解为原子操作序列(如添加/删除组件),生成中间版本架构序列 (A_0, A_1, \ldots, A_n)。
- 度量中间版本
- 对每个中间版本 (A_i) 计算质量属性度量值 (Q_i),形成序列 (Q_0, Q_1, \ldots, Q_n)。
- 关键质量属性:
- 可维护性:六元组度量(圈复杂度、扇入扇出度、耦合度、响应值、紧/松内聚度)。
- 可靠性:单一实数值(潜在风险率)。
- 计算质量属性距离
- 可维护性距离:归一化笛卡尔距离(公式):
[
D_m(A, B) = \sqrt{\sum_{k=1}^{6} \left( \frac{a_k - b_k}{a_k + b_k} \right)^2}
]
(值越大,可维护性差异越大) - 可靠性距离:简化笛卡尔距离(公式):
[
D_r(A, B) = |a - b|
]
(值越大,可靠性差异越大)
- 可维护性距离:归一化笛卡尔距离(公式):
- 评估应用
- 修改影响分析:关联原子操作与质量属性变化(如删除组件→耦合度降低)。
- 演化监控:绘制质量属性变化曲线,识别突变点(如可靠性骤降)。
- 关键过程定位:通过 (D[i-1,i]) 定位高风险演化步骤。
考点提示:
- 区分可维护性(多维指标)与可靠性(单值)的距离计算差异。
- 质量属性距离不可累加((D[0,n] \neq \sum D[i-1,i]))。
2 演化过程未知的评估
适用场景:无法追踪演化步骤,仅能获取演化前后架构版本。
评估流程:
- 逆向推测:
- 对比演化前后版本的度量结果(如可维护性六元组、可靠性值)。
- 通过差异推测可能的原子操作(如组件替换、连接件删除)。
- 驱动原因分析:
- 关联演化操作与高层目标(如修复错误、性能优化)。
- 验证演化有效性:
- 若质量属性变化符合预期(如重构后圈复杂度降低),则演化成功;否则需进一步优化。
考点提示:
- 重点掌握“差异分析→操作推测→目标验证”的逻辑链条。
二、网站系统架构演化实例
目标:通过十阶段演进展示架构如何应对用户增长、高并发与海量数据挑战。
关键阶段及技术方案:
阶段 | 问题 | 解决方案 | 架构图特征 |
---|---|---|---|
1 | 低流量 | 单体架构(应用+数据库+文件同一服务器) | 单服务器 |
2 | 性能与存储瓶颈 | 应用/文件/数据库分离 | 三台独立服务器 |
3 | 数据库读压力大 | 引入缓存(本地缓存+远程分布式缓存) | 增加缓存层 |
4 | 单应用服务器瓶颈 | 应用服务器集群+负载均衡 | 多应用服务器+调度器 |
5 | 数据库写压力大 | 数据库读写分离(主从同步) | 主数据库写,从数据库读 |
6 | 跨区域访问延迟 | CDN加速+反向代理缓存 | 边缘节点+中心代理 |
7 | 海量数据存储 | 分布式文件系统+分布式数据库 | 分库分表 |
8 | 复杂查询需求 | 引入NoSQL与搜索引擎(如Elasticsearch) | 多数据源+统一访问模块 |
9 | 业务复杂度高 | 业务拆分(独立应用部署) | 分产品线独立部署 |
10 | 系统耦合度高 | 分布式服务(微服务化) | 共用业务服务层+应用界面调用 |
核心逻辑:
- 分而治之:通过分离、拆分、分布式化逐步解耦。
- 渐进增强:每阶段解决当前瓶颈,保留扩展能力。
三、 软件架构维护
1. 知识管理
- 记录架构决策、约束与演化历史,形成可追溯的知识库。
2. 修改管理
- 隔离区域(Region of Quiescence):
- 限定修改影响范围(如局部替换组件),避免波及无关模块。
- 修改类型:组件/连接件/约束的增删改,需评估波及效应。
3. 版本管理
- 量化波及效应:
- 静态演化:通过邻接矩阵分析组件依赖(如王映辉模型)。
- 动态演化:基于语义网络模型追踪变更路径。
4. 可维护性度量实践
- 度量指标:针对组件图计算六项子指标:
圈复杂度 (CCN) = (总边数 - 总节点数) + 2 × 组件图数量 扇入扇出度 (FFC) = CCN × (出边数 + 提供接口数) × (入边数 + 使用接口数)² 耦合度 (CBO) = (出边数 + 入边数 + 提供接口数 + 使用接口数) / 总节点数 响应值 (RFC) = 子组件数 + 出边数 + 使用接口数 紧内聚度 (TCC) = 直接连接子组件对数 / 最大可能连接对数
- 案例:Web系统组件度量(详见表10-3, 10-4),需区分有无子组件的内聚度计算。
考点提示:
- 可维护性度量需区分“组件级指标”与“架构级平均值”(除CCN外)。
- 无子组件时内聚度记为“not applied”。
本章核心考点总结
- 演化评估方法:
- 已知过程:原子操作→中间版本度量→质量距离计算→影响分析。
- 未知过程:逆向推测操作→验证目标一致性。
- 网站架构演化:
- 十阶段演进逻辑(核心:分离→缓存→集群→分布式→微服务)。
- 架构维护:
- 修改隔离、版本波及效应分析、可维护性六指标计算。
- 公式应用:
- 可维护性距离 (D_m)、可靠性距离 (D_r)、圈复杂度(CCN)计算。