动态演化是在系统运行期间的演化,需要在不停止系统功能的情况下完成演化,较之静态演化更加困难。
1.动态演化的需求
架构的动态演化主要来自两类需求:①软件内部执行所导致的体系结构改变,例如,许多服务器端软件会在客户请求到达时创建新的组件来响应用户需求;②软件系统外部的请求对软件进行的重配置,例如,操作系统在升级时无须重新启动,在运行过程中就完成对体系结构的修改。
2.动态演化的类型
1)软件动态性的等级
CarlosE.Cuesta等人将软件的动态性分为3个级别(见图1):
①交互动态性(Interactive Dynamism),要求数据在固定的结构下动态交互;
②结构动态性(Structural Dynamism),允许对结构进行修改,通常的形式是组件和连接件实例的添加和删除,这种动态性是研究和应用的主流;
③架构动态性(Architectural Dynamism),允许软件架构的基本构造的变动,即结构可以被重定义,如新的组件类型的定义。以Cuesta划分标准衡量,目前软件架构的动态演化研究大多仅支持发生在级别1和2上的动态性,而对级别3上的动态性支持甚少,但是Cuesta坚持认为只有级别3的架构才是真正的动态架构。
图1 软件的三级动态性
2)动态演化的内容
根据所修改的内容不同,软件的动态演化主要包括以下4个方面。
- 属性改名:目前所有的ADL都支持对非功能属性的分析和规约,而在运行过程中,用户可能会对这些指标进行重新定义(如服务响应时间)。
- 行为变化:在运行过程中,用户需求变化或系统自身服务质量的调节都将引发软件行为的变化。诸如,为了提高安全级别而更换加密算法;将HTTP协议改为HTTPS协议;组件和连接件的替换和重新配置。
- 拓扑结构改变:如增删组件,增删连接件,改变组件与连接件之间的关联关系等。
- 风格变化:一般软件演化后其架构风格应当保持不变,如果非要改变软件的架构风格,也只能将架构风格变为其衍生风格,如将两层C/S结构调整为三层C/S结构,以实现负载的平衡。
目前,实现软件架构动态演化的技术主要有两种:采用动态软件架构(Dynamic Software Architecture)和进行动态重配置(Dynamic Reconfiguration,DR)。
3.动态软件架构
Perry在2000年第十六届世界计算机大会中提出,软件架构中最为重要的3个研究方向,即软件架构风格、软件架构连接件和DSA。DSA指那些在软件运行时刻会发生变化的体系结构。与静态软件架构相比,DSA的特殊之处在与它的动态性。软件架构的动态性指由于系统需求、技术、环境、分布等因素的变化而导致软件架构在软件运行时刻的变化,主要通过软件架构的动态演化来体现。
4.动态重配置
基于软件动态重配置的软件架构动态演化主要是指在软件部署之后对配置信息的修改,常常被用于系统动态升级时需要进行的配置信息修改。一般来说,动态重配置可能涉及的修改有:①简单任务的相关实现修改;②工作流实例任务的添加和删除;③组合任务流程中的个体修改;④任务输入来源的添加和删除;⑤任务输入来源的优先级修改;⑥组合任务输出目标的添加和删除;⑦组合任务输出目标的优先级修改等。