Page 104 - 《软件学报》2021年第5期
P. 104

1328                                     Journal of Software  软件学报 Vol.32, No.5,  May 2021

                 演化、独立维护.理想情况下,所有共同修改都应发生在服务内部,而不应跨越服务边界:
                                                            ECF
                                                       REI =                                         (18)
                                                            ICF
                 其中,ECF 和 ICF 与上述定义相同.
                 2.4   交互复杂性
                    交互复杂性描述服务之间交互行为的复杂程度,交互复杂度越高,则故障诊断、故障修复等分析活动的难
                 度可能越高.基于 MFS 的 DSM b 和 DSM p ,服务交互复杂度的度量指标如下.
                    (1)  处理用户请求的服务个数(inter-service length,简称 ISG)
                    ISG 是指处理用户请求时经过的不同服务个数,ISG 越大,则服务间的交互越复杂.
                                                    IGS  =  1  ∑ iT= || isg                          (19)
                                                         ||  i= 1  i
                                                         T
                 其中,|T|是 MFS 中执行轨迹集合 T 的大小,isg i 是 t i ∈T 所经过的不同服务的个数.ISG 是所有执行轨迹的 isg 的
                 均值.在 DSM b 的第 i 行,统计单元格值不为空的所有列对应的操作调用(opr k ,opr m ),isg 值等于这些操作 opr 所属
                 的服务集合的大小.
                    (2)  处理用户请求的跨服务调用链长(inter-service call chain length,简称 ICL)
                    处理用户请求时跨服务调用链长 ICL 越大,则服务间交互复杂度越高.ICL 的度量方式与上述 ISG 类似.不
                 同的是,ISG 度量处理请求时所经过的不同服务的个数,ICL 度量处理请求时所经过的跨服务调用的个数.
                                                          1  iT= ||
                                                    ICL =   ∑   icl i                                (20)
                                                         T
                                                         ||  i= 1
                                                  icl i =|S|,S={(opr m ,opr n )}                     (21)
                 其中,|T|与 ISG 中的定义相同,icl i 是执行轨迹 t i ∈T 所经过的跨服务调用的个数.在 DSM b 的第 i 行,对于单元格值
                 不为空的列所对应的操作调用(opr m ,opr n ),如果 opr m 和 opr n 是由不同服务提供的操作,则将(opr m ,opr n )加入集合
                 S,最终生成的 S 大小就是 icl i 值.ICL 是所有 icl i 的均值.
                    (3)  处理用户请求的服务循环调用数(service cyclic-call number,简称 SCN)
                    服务循环调用是微服务设计的反模式              [22,23] .SCN 值越大,说明服务之间复杂交互程度越高,可分析性越差.
                 基于 MFS 的 DSM p ,度量 SCN 的公式如下:
                                    SCN=|S|,S={(i,j)|σ probability (i,j)≠None∧σ probability (j,i)≠None∧i<j}  (22)
                    在 DSM p 中,单元格(i,j)值(i<j)和其对称位置(j,i)值都不为空,则意味着服务 SC i 和 SC j 之间在很大概率上存
                 在循环依赖,则将(i,j)加入集合 S.SCN 的值等于满足上述条件下生成的集合 S 的大小.DSM p 刻画服务间频繁进
                 行直接交互和间接交互的概率,因此,SCN 既考虑直接交互构成的循环调用,也考虑间接交互构成的循环调用.
                    (4)  被其他服务依赖的程度(in-degree dependence,简称 IDD)
                    IDD 度量一个服务被其他服务调用的程度.IDD 值越大,则被耦合的程度越高,服务之间动态交互程度高.基
                 于 MFS 的 DSM p ,度量 IDD 的公式如下:
                                                    1
                                               idd = ∑  iL=  σ  (, ), j i ≠  j                       (23)
                                                                 i
                                                  j  L  i= 1  probability
                                                          1
                                                    IDD = ∑  N  idd                                  (24)
                                                         N   j= 1  j
                 其中,L 表示第 j 列单元格值不为空的单元格个数.idd j 表示一个服务 SC j 被其他所有服务依赖的平均概率.N 是
                 服务个数,IDD 是这些服务 idd j 值的平均.
                    (5)  依赖其他服务的程度(out-degree dependence,简称 ODD)
                    ODD 度量一个服务调用其他服务的程度.ODD 的值越大,则该服务耦合其他服务的程度越高,服务之间动
                 态交互程度高.与 IDD 类似,ODD 的度量也是基于 DSM p :
   99   100   101   102   103   104   105   106   107   108   109