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 :