Page 174 - 《软件学报》2026年第2期
P. 174

余广坝 等: 面向大规模在线系统的故障根因变更识别                                                        653


                 缺陷软件变更导致的, 那么它只会影响到已变更服务实例的性能, 而不会影响到未变更服务实例的性能. 而如果一
                 个故障不是由缺陷软件变更导致的            (例如网络中断), 那么已变更和未变更的服务实例的性能都会受到该故障的影响.

                                                   服务 A          变更操作
                                                               已变更服务实例
                                                 A 1
                                                                  A 1  和 A 2
                                                              请求延迟剧烈上升
                                                 A 2
                                                               未变更服务实例
                                                 A 3
                                                                 A 3  和 A 4
                                                              请求延迟保持稳定
                                                 A 4
                                  图 6 服务   A  在灰度变更过程中服务实例请求响应延迟曲线的变化

                    具体来说, 本文采用了       DiD  算法  [23] , 它是经济学领域中用于评估在特定时间点实施的干预措施效果的常用方
                 法. 在本方法中, DiD   用于比较已变更服务实例组与未变更服务实例组的                   KPI 随时间的变化, 并将      KPI 差异归因
                 于软件变更的实施. 对给定同一个服务不同服务实例的                  KPI 曲线, DiD  首先根据变更时间和变更操作对它们进行
                 如下划分.
                                                                 T = 1 表示. 控制组由尚未变更的服务实例组成, 用
                    ● 测试组和控制组: 测试组由已变更的服务实例组成, 用
                 T = 0 表示.
                                                                               P = 1 表示; 变更前区间表示变更
                    ● 变更后区间和变更前区间: 变更后区间表示变更操作实施后的时间段, 用
                 操作实施前的时间段, 用       P = 0 表示.
                    令  K i  为  i 的测量值, 那么  DiD  模型可以表示为:
                           KPI
                                                                                                      (2)
                                                 K i = α 0 +α 1 T +α 2 P+α 3 T×P+ϵ i
                 其中,  α 0  表示控制组在变更前的基础值.       α 1  和  α 2  分别表示变更和时间的主要影响.     α 3  是  DiD  影响估计值, 它表示
                 变更对影响的因果效应, 它可以形式化为:

                             α 3 = (E [Y|C = 1,P = 1]− E [Y|C = 1,P = 0])−(E [Y|C = 0,P = 1]− E [Y|C = 0,P = 0])  (3)
                 其中,  E (·) 表示期望值. 如果 KPI 的值变化是由软件变更以外的因素造成的, 那么已变更服务实例和未变更服务实
                                             α 3  的值应该接近于              α 3  远远大于  0  或者小于  0, 那么可以判定相
                 例的相对性能不会有明显变化. 此时                           0. 相反, 如果
                 对性能的差异是由于变更导致的. 本文设置了一个阈值                  λ 来判断   α 3  是否显著, 我们选取   DiD  方法中典型的阈值
                 λ = 0.15. 如果一个已变更服务实例的       α 3 > λ, 那么就判定这个服务实例为由缺陷变更导致的异常服务实例.
                    在轮询判断每个已变更的服务实例以后, 可以获得所有的变更异常的已变更服务实例的数目. KPI 差异得分
                 计算模块计算得分的核心思想是: 如果一个服务被判定为由变更导致的异常已变更服务实例越多, 那么这个服务
                 的变更越有可能是根因变更. 具体的           KPI 差异得分计算的逻辑可以形式化为:

                                                              N apost
                                                       Score diff =                                    (4)
                                                               N post
                 其中,  N apost  是被判定为由变更导致的异常的已变更服务实例的数目,               N post  是所有已变更服务实例数目. 如果一个
                 服务异常的已变更服务实例数目越多, 它的差异得分越高. 通过计算差异得分, 能够解决挑战 3, 由外部因素和故
                 障传播导致的     KPI 异常服务将获得低的差异得分.
                  4.6.2    时间衰减得分计算
                    对于部分隐蔽性较强的变更故障, 其故障模式往往呈现出典型的“间接传播”特征. 这类故障不会立即在变更
                 服务的直接    KPI 指标上显现异常, 而是通过服务依赖链进行潜在传播, 最终在其他上下游服务表现出可见故障. 这
                 种情况下仅考虑      KPI 的线索来进行根因变更识别是不够的. 为了有效捕捉这类隐蔽故障模式, 本节引入时间维度
                 作为关键分析因素. 它的核心思想基于“时间衰减效应”, 变更与故障的时间间隔越短, 关联性越强. 如果一个服务
                 变更后, 系统很快出现异常, 那么该变更与系统异常会有更强的时间关联性. 相反, 如果变更很长时间后系统才出
   169   170   171   172   173   174   175   176   177   178   179