我院软件研发效能实验室荣国平老师课题组在AIOps研究上取得系列重要进展

发布日期:2020-08-17 浏览次数:


       随着近几年云计算、微服务等技术的流行,软件系统去中心化的趋势使得软件运维面临着愈来复杂的困难和挑战。我院荣国平老师课题组面向实际企业场景的技术难题,基于实证研究,综合运用机器学习、程序分析等多种技术手段提出了对应的解决方案,在智能化软件运维(AIOps)方面取得了一系列重要进展。


进展一提出了一种用于定位服务请求成功率异常的高维根因的算法

       在微服务架构广泛应用的当下,在服务请求的成功率指标出现异常后,如何快速定位到导致成功率异常的根因是亟待解决的问题。通常情况下,互联网企业会引入APM (Application Performance Management)工具来监控服务请求,并且会记录下每条请求所附带的维度信息(比如,城市、运营商、平台、网络类型等多个维度),而每个维度下具有各种维度值(比如,平台下有iOS、Android等类别)。而某些维度下可能具有上万个维度值,导致可能的维度值组合数量达到十万级别以上。当整体的成功率指标发生异常后,需要定位到导致该异常的维度值组合(比如某地某运营商)。本研究设计了两类型的衡量指标以及通过剪枝树的方式来缩小搜索空间,并给出Top-N个可能的根因。试验测试结果表明,该方法用来定位高维根因的准确性显著优于当前流行的若干算法,同时具有极好的时效性。该成果和美团CAT团队合作,主要算法实现和验证由20级硕士生汪浩等完成,被电气和电子工程师协会(IEEE)举办的软件可靠性工程国际会议ISSRE 2020录用。此外,团队还开发完善了原型工具,被国际计算机协会(ACM)举办的软件工程领域的顶级国际会议《自动化软件工程》ASE 2020录用为工具原型论文。



图1 高维根因算法流程


进展二:在实际企业场景下探究日志实践中的开发者的意图和考量

       日志记录了软件系统在运行过程中的动态行为,为开发者进行软件质量管理实践(如错误诊断,性能分析等)提供了关键的信息。在现代软件开发运维过程中,日志信息已经广为应用。目前,主流的日志实践仍旧依靠开发者们手动地编写日志语句并将其插入到源码中合适的位置。因此,日志语句的内容(记录了什么信息?)和位置(在哪里记录信息?)在很大程度上受到开发者的个人因素的影响。

       开发者在编写和插入日志语句时,通常会带有一定的意图(Intention)和相应的考量(Consideration),并做出适当权衡。显然,开发者的意图和考量对于理解和改善日志实践是非常有价值的。如果忽视这些信息,只关注于研究应该记录哪些信息、应该在哪里记录信息这些问题,就容易陷入"知其然,不知其所以然"的窘境。此外,开发者的意图和考量都应该被正确地体现在其编写的日志语句中。



图2 个案研究过程


       为了理解日志实践中的开发者的意图和考量,以及更进一步地,探究它们是否在实际生产环境中得到正确的反映,我院研究团队与上海星环科技进行了合作个案研究,通过一系列访谈,以及对其项目代码进行的分析,从两个源头分别收集了数据,并开展了比较、分析和验证。结果表明,开发者的日志实践意图和考量非常容易受到实际开发上下文的影响。此外,通常的日志指南、工具等作用也远没有很多文献所宣称那样有效。该成果主要由19级硕士生徐杨晨等完成,已被国际电气和电子工程师协会(IEEE)举办的《软件维护与演化》国际会议ICSME 2020录用。


       以上工作由国家重点研发计划重点专项项目、重点实验室创新项目以及国家重大科技项目培养专项等资助。