基于轨迹分析的微服务故障定位
微服务架构通过一组独立开发、独立部署且通过应用程序编程接口(API) 相互通信的松耦合服务来实现软件应用。由于其在并行开发、快速交付、灵活伸 缩等方面的优势,微服务架构已经成为云原生应用的主流选择。微服务系统运行 时环境具有高度的复杂性和动态性,且服务之间存在很多复杂的异步调用链,因 此微服务系统的故障分析和调试难以通过传统方法来实现,从而成为企业微服务 开发面临的一个重要挑战。
微服务系统作为一种新的基于云的软件系统形态,其软件故障特点还缺少相 应的总结,同时也缺少公开的微服务系统(如开源项目)可供研究。为此,本文针对微服务系统开发实践进行了一次工业调研,系统了解了工业界微服务系统的 特点,收集了一组典型微服务故障案例以及相应的故障分析与调试实践方法,并 对实践问题和挑战进行了分析。在此基础上,我们开发了一个中等规模的微服务 基准系统,重现了 22 个工业故障案例,并通过开源社区进行了发布。基于这一 开源微服务基准系统以及相应的故障案例,我们开展了一系列微服务故障辅助定 位方法和技术研究。
首先,我们对业界广泛采用的基于微服务日志及执行轨迹可视化的故障定位 方法进行了研究。我们在分析和评估现有的工业界微服务调试实践的基础上,基 于已有的分布式可视化调试工具提出了多种微服务系统故障定位策略,构建了相 应的执行轨迹可视化分析工具并进行了实验分析。结果表明,采用适当的执行轨 迹可视化工具和策略可以改善目前微服务调试的工业实践,同时进一步的改进需 要数据驱动的智能化轨迹分析和可视化方法的支持。
其次,我们针对微服务系统在服务实例、环境配置、异步交互等方面存在复 杂故障因素组合,从而导致故障难以复现和定位的问题,提出了一种基于增量调 试算法的自动化微服务系统故障定位方法。该方法定义了多个维度的故障因素, 通过优化的故障因素组合搜索与试探执行高效地寻找导致一个给定故障的最小 故障因素集合,从而辅助开发人员进行故障定位。为此,我们还设计并实现了一 个系统基础设施层,用于支持增量调试过程中的微服务系统按需部署和运行控制。实验结果表明,该方法能够有效地识别导致故障的最小故障因素集合,为故障根 源诊断提供有效支持,同时其优化执行策略使得该方法具有良好的执行效率和可 伸缩性。
最后,我们针对微服务系统生产环境中的故障发现和定位问题,提出了一种 基于执行轨迹日志机器学习的微服务潜在错误与故障根源预测方法 MEPFL。该方 法从执行轨迹日志(一种特殊的微服务系统日志)中提取微服务故障相关的一些。特征,基于这些特征并通过故障注入的方式构建微服务故障预测模型,对微服务 的潜在错误、故障位置(所在微服务)和故障类型进行预测。该方法将执行轨迹 和微服务两个层次的模型相结合进行综合预测,从而适应不同的情况。实验结果 表明,MEPFL 在潜在错误、故障微服务和故障类型的预测方面具有较高的准确性, 并能有效地应用于工业界的真实故障案例。