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

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


                 员在新增的代码中引入导致内存泄露的代码缺陷时, 内存泄露会导致服务的内存使用率增加, 请求响应时间延长,
                 最终可能因为内存耗尽而导致请求响应成功率下降. 然而, 由于内存泄露需要一段时间才能显现出明显异常, 这种
                 异常可能会在程序变更完成后才出现. 因此, 在程序变更完成后, 持续对服务进行监控是必要的.

                                               表 2 典型软件变更故障及其表现

                         变更类型                变更内容                            异常表现
                                           遗漏函数参数                   函数调用失败, 请求响应成功率下降
                                          错误的参数顺序                   函数调用失败, 请求响应成功率下降
                              后台变更
                                          新代码内存泄露           内存使用率缓慢上升, 请求延迟升高, 请求响应成功率下降
                                           遗漏处理异常            变更服务频繁崩溃, 服务请求失败, 请求响应成功率下降
                   缺陷变更                   错误的调用端口              服务请求失败, 服务连接失败, 请求响应成功率下降
                              配置变更        错误的配置文件            读取配置文件失败, 服务启动失败, 请求响应成功率下降
                                          错误的访问密钥                 请求下游服务失败, 请求响应成功率下降
                              资源变更       减少服务实例数目                变更服务资源使用率上升, 请求处理延迟升高
                              模型变更       上线错误推荐模型                     用户点击率下降, 广告收益下降
                              后台变更         新增调用逻辑                 响应成功率保持稳定, 请求响应延迟升高
                   正常变更
                              资源变更       更换高性能服务器          请求响应成功率保持稳定, CPU利用率下降, 请求响应延迟降低

                    另一个观察结果是, 变更服务在指标表现上的异常并不一定意味着这次软件更改存在缺陷. 这是因为一些软
                 件更改可能会导致监控数据异常, 但这种异常是符合预期的行为. 例如, 用新的高性能服务器替换旧服务器可能会
                 导致  CPU  使用率下降和响应延迟下降, 但这种下降是符合预期的. 表                2  的最后  2  行列举了两个这种类型的软件变
                 更. 因此, 运维工程师应该考虑如何过滤掉预期的变化, 以减少误报的发生.
                    发现  4. 在指标上表现异常的变更服务并不一定意味着这次的软件变更存在缺陷.
                  3.7   问题  5: 告警系统识别缺陷变更的效果
                    为了回答问题      5, 首先对微信中的告警系统进行简单介绍. 微信内部告警系统采用结合有监督的图神经网络
                 模型和灵活的转移矩阵设计的           PageRank  算法来实现根因定位. He 等人     [35] 在其相关论文中对微信告警系统进行了
                 详细介绍. 在问题     5  中, 本文对微信告警系统输出的根因服务与根因变更对应服务之间的差异性进行了分析. 需要
                 注意的是, 在问题     5  中, 本文排除了由客户端更改导致的故障, 因为微信的告警系统主要负责监控和管理微信后台
                 服务. 此外, 不会触发告警的缺陷变更也被排除在分析范围之外.
                    图  4  展示了微信告警系统输出结果与根因变更对应服务之间的差异性. 在图中, 标签“告警服务”表示告警服
                 务与根因变更服务相同. 而“上游          i”表示根因变更服务是距离告警服务            i 层的上游服务. 以一个例子来说明, 假设
                 服务  A  调用  B, 而  B  又调用  C, 如果告警服务是  C, 而根因变更服务是      A, 那么可以将    A  表示为“上游   2”. “下游  i”
                 表示根因变更服务是距离告警服务            i 层的下游服务. “其他”表示根因变更服务位于告警服务的两层调用之外或没
                 有调用关系.

                                             60
                                                          51.42
                                            比例 (%)  40  20
                                             20
                                                8.57            8.57  8.57
                                                                          2.86
                                              0
                                               上游 2 上游 1 告警服务 下游 1 下游 2   其他
                                            图 4 根因变更服务与告警服务的位置关系

                    图  4  的结果显示, 对于约    51%  的事件, 告警系统能够将根因变更对应的服务识别出来, 但并不能识别是否与
                 缺陷变更相关. 对于其他情况, 约         47%  的根因变更服务位于告警服务的两层调用之内的上游或下游服务中. 此外,
                 大约有   2%  的根因变更服务位于告警服务的两层调用之外, 或者与告警服务没有任何调用关系. 这一发现揭示了
   165   166   167   168   169   170   171   172   173   174   175