[系统架构设计师]软件架构的演化与维护(十)
[系统架构设计师]软件架构的演化与维护(十)
一.软件架构演化和定义的关系
1.演化的重要性
保证软件系统具备诸多好的特性
有效管控软件系统的整体复杂性和变化性,降低软件检修和修改成本
保证软件系统演化的一致性和正确性,增加便捷性
2.演化和定义的关系
软件架构:组件,连接件,约束
二.面向对象软件架构演化过程
1.对象演化
AO:系统需要添加新的对象来实现某种新的功能,或需将现有对象的某个功能对立以增加架构灵活性时发生
DO:系统需移除某个现有的功能,或需合并某些对象及其功能来降低系统架构的复杂度的时候发生
2.消息演化
AM:增添一条新的消息
DM:删除当前的一条消息
SMO:交换两条消息的时间顺序
OM: 反转消息的发送对象与接收对象
CMM: 改变消息的发送对象和接收兑现
3.复合片段演化
AF: 在某几条消息上新增复合片段
DF: 删除某个现有的复合片段
FTC:改变复合片段的类型
FCC: 改变复合片段现有的内部执行的条件
4.约束演化
AC: 直接添加新的约束信息
DC: 直接移除某条约束信息
三.软件架构演化方式的分类
1.软件架构演化时期
设计时演化,运行时演化,有限制运行时演化,运行时演化
2.软件架构静态演化
静态演化需求:设计时演化需求,运行前演化需求
静态演化一般过程:软件理解–需求变更分析–演化计划–系统重构–系统测试
静态演化的原子演化操作:
可维护性:AMD,RMD,AMI,RMI,AM,RM,SM,AGM
可靠性:AMS,RMS,AO,RO,AF,RF,CF,AU,RU,AA,RA
3.软件架构动态演化
需求:软件内部执行导致的体系结构的改变,软件系统外部的请求对软件进行的重配置
类型:
动态性等级:交互动态性,结构动态性,架构动态性
内容:属性改名,行为变化,拓扑结构改变,风格改变
动态软件架构(DSA):
基本原理:运行时刻体系结构相关信息的改变可用来触发,驱动系统自身的动态调整
DSA描述语言,DSA演化工具
动态软件架构应用实例:PKUAS:容器系统,公共服务,工具,微内核
动态重配置:
动态重配置模式:主从模式,中央控制模式,客户端/服务器模式,分布式模式
例子:可重用,可配置的产品线架构
动态配置难点:约束定义困难,性能约束难以静态衡量,难以管理所有方面,需同时保证组件系统完整性和重配置策略的正确性和安全性
四.软件结构演化原则
可持续演化原则:
演化成本控制原则,进度可控原则,风险可控原则,主体维持原则,系统总体结构优化原则,平滑演化原则,
目标一致原则,模块独立演化原则,影响可控原则,复杂性可控原则,有利于重构原则,有利于重用原则,设计原则遵循性原则,适应新技术原则,环境适应性原则,标准依从性原则,质量向好原则,适应新需求原则
五.软件架构演化评估方法
演化过程已知的评估,演化过程未知的评估
六.大型网站系统架构演化实例
1.第一阶段:单体架构
应用程序,数据库,文件等资源都在同一台服务器上
2.第二阶段:垂直架构
应用和数据分离,网站使用3台服务器:应用服务器,文件服务器,数据服务器
3.第三阶段:使用缓存改善网站性能
应用服务器上的本地缓存,专门的分布式缓存服务器上的远程缓存
4.第四阶段:使用服务集群改善网站并发能力
通过负载均衡服务器,将来自浏览器的访问请求分别分发到应用服务器集群中的任何一台服务器上,解决高并发,海量数据问题
5.第五阶段:数据库读写分离
写数据,访问主数据库
主服务器通过主从复制机制将数据更新同步到从服务器
读数据,访问从数据库
6.第六阶段:反向代理和CDN加速网站响应。基本原理都是缓存
CDN部署在网络提供商的机房,用户在请求网站服务时,可在距离最近的网络提供商机房获取数据
反向代理部署在网站的中心机房,用户请求到达中心机房后,先访问反向代理服务器
7.第七阶段:分布式文件系统和分布式数据库系统
业务分库,不同业务数据部署在不同的物理服务器上
8.第八阶段:使用NoSQL和搜索引擎
9.第九阶段:业务拆分
将一个网站拆分成许多不同的应用,每个应用独立部署
10.第十阶段:分布式服务
七.软件架构维护
1.软件架构知识管理
架构知识定义:架构知识=架构设计+架构设计决策
含义:侧重于软件开发和实现过程所涉及的架构静态演化,在架构文档等信息来源中捕捉架构知识,提供架构的质量属性及其设计依据进行记录和评价
需求:防止关键的架构知识"沉没"在软件架构中
2.软件架构修改管理
主要建立隔离区域,保障该区域中任何修改对其他部分影响最小
3.软件架构版本管理
为软件架构演化的版本演化控制,使用和评价提供可靠依据
4.软件架构可维护性度量实践
捕捉架构知识,提供架构的质量属性及其设计依据进行记录和评价
需求:防止关键的架构知识"沉没"在软件架构中
2.软件架构修改管理
主要建立隔离区域,保障该区域中任何修改对其他部分影响最小
3.软件架构版本管理
为软件架构演化的版本演化控制,使用和评价提供可靠依据
4.软件架构可维护性度量实践
架构可维护性的6个度量指标:圈复杂度(CNN),扇入扇出度(FFC),模块间耦合度(CBO),模块的响应(RFC),紧内聚度(TCC),松内聚度(LCC)