系统架构设计师备考第45天——软件架构演化评估方法和维护

一、 软件架构演化评估方法

1 演化过程已知的评估

目标 :通过度量架构演化过程,分析内部结构差异与外部质量属性变化的关系。
评估流程

  1. 拆分原子操作
    • 将演化过程分解为原子操作序列(如添加/删除组件),生成中间版本架构序列 (A_0, A_1, \ldots, A_n)。
  2. 度量中间版本
    • 对每个中间版本 (A_i) 计算质量属性度量值 (Q_i),形成序列 (Q_0, Q_1, \ldots, Q_n)。
    • 关键质量属性
      • 可维护性:六元组度量(圈复杂度、扇入扇出度、耦合度、响应值、紧/松内聚度)。
      • 可靠性:单一实数值(潜在风险率)。
  3. 计算质量属性距离
    • 可维护性距离 :归一化笛卡尔距离(公式):

      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\|

      (值越大,可靠性差异越大)
  4. 评估应用
    • 修改影响分析:关联原子操作与质量属性变化(如删除组件→耦合度降低)。
    • 演化监控:绘制质量属性变化曲线,识别突变点(如可靠性骤降)。
    • 关键过程定位:通过 (D[i-1,i]) 定位高风险演化步骤。

考点提示

  • 区分可维护性(多维指标)与可靠性(单值)的距离计算差异。
  • 质量属性距离不可累加((D[0,n] \neq \sum D[i-1,i]))。

2 演化过程未知的评估

适用场景 :无法追踪演化步骤,仅能获取演化前后架构版本。
评估流程

  1. 逆向推测
    • 对比演化前后版本的度量结果(如可维护性六元组、可靠性值)。
    • 通过差异推测可能的原子操作(如组件替换、连接件删除)。
  2. 驱动原因分析
    • 关联演化操作与高层目标(如修复错误、性能优化)。
  3. 验证演化有效性
    • 若质量属性变化符合预期(如重构后圈复杂度降低),则演化成功;否则需进一步优化。

考点提示

  • 重点掌握"差异分析→操作推测→目标验证"的逻辑链条。

二、网站系统架构演化实例

目标 :通过十阶段演进展示架构如何应对用户增长、高并发与海量数据挑战。
关键阶段及技术方案

阶段 问题 解决方案 架构图特征
1 低流量 单体架构(应用+数据库+文件同一服务器) 单服务器
2 性能与存储瓶颈 应用/文件/数据库分离 三台独立服务器
3 数据库读压力大 引入缓存(本地缓存+远程分布式缓存) 增加缓存层
4 单应用服务器瓶颈 应用服务器集群+负载均衡 多应用服务器+调度器
5 数据库写压力大 数据库读写分离(主从同步) 主数据库写,从数据库读
6 跨区域访问延迟 CDN加速+反向代理缓存 边缘节点+中心代理
7 海量数据存储 分布式文件系统+分布式数据库 分库分表
8 复杂查询需求 引入NoSQL与搜索引擎(如Elasticsearch) 多数据源+统一访问模块
9 业务复杂度高 业务拆分(独立应用部署) 分产品线独立部署
10 系统耦合度高 分布式服务(微服务化) 共用业务服务层+应用界面调用

核心逻辑

  • 分而治之:通过分离、拆分、分布式化逐步解耦。
  • 渐进增强:每阶段解决当前瓶颈,保留扩展能力。

三、 软件架构维护

1. 知识管理
  • 记录架构决策、约束与演化历史,形成可追溯的知识库。
2. 修改管理
  • 隔离区域(Region of Quiescence)
    • 限定修改影响范围(如局部替换组件),避免波及无关模块。
  • 修改类型:组件/连接件/约束的增删改,需评估波及效应。
3. 版本管理
  • 量化波及效应
    • 静态演化:通过邻接矩阵分析组件依赖(如王映辉模型)。
    • 动态演化:基于语义网络模型追踪变更路径。
4. 可维护性度量实践
  • 度量指标 :针对组件图计算六项子指标:

    plaintext 复制代码
    圈复杂度 (CCN) = (总边数 - 总节点数) + 2 × 组件图数量  
    扇入扇出度 (FFC) = CCN × (出边数 + 提供接口数) × (入边数 + 使用接口数)²  
    耦合度 (CBO) = (出边数 + 入边数 + 提供接口数 + 使用接口数) / 总节点数  
    响应值 (RFC) = 子组件数 + 出边数 + 使用接口数  
    紧内聚度 (TCC) = 直接连接子组件对数 / 最大可能连接对数  
  • 案例:Web系统组件度量(详见表10-3, 10-4),需区分有无子组件的内聚度计算。

考点提示

  • 可维护性度量需区分"组件级指标"与"架构级平均值"(除CCN外)。
  • 无子组件时内聚度记为"not applied"。

本章核心考点总结

  1. 演化评估方法
    • 已知过程:原子操作→中间版本度量→质量距离计算→影响分析。
    • 未知过程:逆向推测操作→验证目标一致性。
  2. 网站架构演化
    • 十阶段演进逻辑(核心:分离→缓存→集群→分布式→微服务)。
  3. 架构维护
    • 修改隔离、版本波及效应分析、可维护性六指标计算。
  4. 公式应用
    • 可维护性距离 (D_m)、可靠性距离 (D_r)、圈复杂度(CCN)计算。
相关推荐
长安城没有风7 小时前
从入门到精通【Redis】Redis 典型应⽤ --- 缓存 (cache)
数据库·redis·后端·缓存
骇客野人7 小时前
【软考备考】软件架构设计需要考虑系统性能 如何使用缓存提高系统性能知识点七
缓存
学无止境w7 小时前
Redis在电商中的深度应用:商品缓存、秒杀锁、排行榜的实现与避坑指南
数据库·redis·缓存
Tony Bai7 小时前
释放 Go 的极限潜能:CPU 缓存友好的数据结构设计指南
开发语言·后端·缓存·golang
象象翔7 小时前
Redis实战篇---添加缓存(店铺类型添加缓存需求)
数据库·redis·缓存
库库8399 小时前
Redis分布式锁、Redisson及Redis红锁知识点总结
数据库·redis·分布式
沧澜sincerely9 小时前
Redis 缓存模式与注解缓存
数据库·redis·缓存
蒙特卡洛的随机游走9 小时前
Spark核心数据(RDD、DataFrame 和 Dataset)
大数据·分布式·spark
NO.102410 小时前
本地缓存怎么在分布式环境下保持一致性
分布式·缓存