Page 70 - 《软件学报》2021年第7期
P. 70

1988                                     Journal of Software  软件学报 Vol.32, No.7,  July 2021

                 1 类方法需始终高频采样感知对象,易造成感知数据量激增且带来巨大的数据处理与存储开销.因此,本文主要
                 借鉴了第 2 类方法的思想,对精英感知对象的感知周期进行动态调整,以获取重要状态数据且不产生过大的系
                 统开销.
                    目前第 2 类方法主要应用于云计算领域,调整感知周期采用的主要指标为数据平稳度,其反映了一段时间
                 内环境状态数据的波动情况.数据平稳度越大,则运行环境越平稳,云计算领域的环境监测方法可增大感知周期
                 而获得较少的状态数据刻画当前环境,减少采样开销.若平稳度越低,则说明环境波动越明显,监测方法则需减
                 小感知周期对环境状态进行密集采样             [34] .然而,如果在自适应软件中仅考虑数据平稳度去调整感知周期,则易导
                 致系统自主调整其结构或行为时出现的正常环境状态波动被误认为是发生了事件,而进行不必要的感知周期
                 调整.
                    因此,在考虑数据平稳度的前提下,本文另外建立状态异常程度指标以评估系统当前的状态,用于判断当前
                 环境状态的波动是正常波动还是发生了事件.同时,引入上节计算的基本事件后验概率去衡量精英感知对象发
                 生的状态变化是否有较大概率造成更严重的顶事件.基于这 3 类计算指标,本文可实现对感知周期的实时调整,
                 并有效避免仅依据数据平稳度调整感知周期的缺陷.
                    在实时调整精英感知集合中每个感知对象的感知周期时,需针对各个感知对象分别计算其各自的数据平
                 稳度与后验概率.而由于状态异常程度评估的是软件系统的整体运行状态,因,该指标只需计算一次即可用于调
                 整所有感知对象的感知周期.后文以某精英感知对象 s 的感知周期实时调整过程为例,介绍该过程包含的具体
                 环节.
                    状态异常程度计算.为了计算软件系统运行状态的异常程度,首先需要对系统运行状态加以建模.考虑到自
                 适应软件动态开放的运行环境和错综复杂的系统结构,系统的运行状态将包含多种属性,且属性间联系较少.因
                 此,本文选取能够反映软件状态情况的代表性感知对象,如响应时间、内存负载等,对系统运行状态中各个属性
                 进行清晰的描述.具体地,本文将系统运行状态建模为 O={O 1 ,O 2 ,…,O N },其中,O i (i=1,…,N)表示第 i 个感知对象,
                 N 表示感知对象的数量.感知对象取值按照时间可形成集合 D={d 1 ,d 2 ,…,d t ,…}.感知对象具体可分为两类,一种
                 是数值型感知对象 d ct =oc1 vt ,oc2 vt ,…,ocC vt },oci vt 表示第 i 个感知对象在 t 时刻的实时取值,例如内存使用量等;
                 另一种是非数值型感知对象 d dt ={od1 vt ,od2 vt ,…,odD vt },例如服务功能是否正常等.
                    系统正常状态的阈值为 d n ={o1 vn ,o2 vn ,…,oN vn }.t 时刻的感知对象取值与系统正常状态间的偏离程度映射为
                 两点之间的空间距离,两点之间的空间距离之和即为数据的异常程度,对于数值型感知对象在 t 时刻的状态异
                 常度表示为 A t1 ,如式(6)所示.
                                                     c                 2
                                                A         1 t   vt  ok vn ,0 ock   max         (6)
                                                    k  1
                    对于非数值型感知对象,本文首先对其取值进行离散化处理,并定义第 k 个感知对象取值的异常度为 A dk ,
                 若符合系统正常状态的阈值要求,则取 0,否则,取值为 1.对于非数值型感知对象在 t 时刻的系统状态异常度表示
                 为 A t2 ,如式(7)所示.
                                                       2 t 
                                                      A   D  A dk  / D                               (7)
                                                          j 1

                    根据式(6)和式(7),t 时刻系统状态的异常度定义为 A t ,如式(8)所示,其中,1+2=1.
                                                    A    1 A  1 t     2 A  2 t                  (8)
                                                     t
                    数据平稳度计算.定义 t 时刻滑动窗口大小为 m,并判断感知对象 s 的取值是否为非数值型数据,若是,则进
                 行离散化处理,之后汇集处理后的滑动窗口内所有感知数据,分别计算得出数据平均值 D ts1 及数据变化量 D ts2 ,
                 如式(9)、式(10)所示,并将计算结果代入式(11),得出某一感知对象 t 时刻感知数据平稳度 S ts .
                                                D   ts 1   d ts m 1    d ts m 2       d ti  m  (9)
                                D ts 2    (a d   m  ts  d ts  1    a m  1  d ts  1    d ts  2        a d ts m    2    d ts m    1  ) (m   1)  (10)
                                                                  1
                                                        S     D ts 1  D ts 2                        (11)
                                                         ts
   65   66   67   68   69   70   71   72   73   74   75