An automated, cross-layer instrumentation framework for diagnosing performance problems in distributed applications

Pythia,基于OSProfiler,通过辨别本该差不多、但是却表现出了high variance within the workflows of requests,来实现自动化插桩。

现在支持OpenStack、Ceph和HDFS

该框架针对新观察到的性能问题,自动探索多个堆栈层内可能的插桩选择空间,并启用帮助诊断该问题所需的插桩。 文章的两个key observations如下

第一个观察结果是,在许多分布式应用中,表现出类似similar workflows的请求应该perform similarly。 similar workflow的意思是,在分布式应用的节点内和节点间以及在较低的数据中心堆栈层内进行类似的处理。 因此,如果本应该perform similarly的请求没有这样做,那么它们的工作流程就可能有一些性能问题。 对观察到的变化的来源进行定位,可以深入了解哪里(例如在哪个节点)需要额外的插桩来识别未知的行为。 然后,可以使用重点搜索策略(例如,基于领域知识或机器学习)来探索在哪个堆栈层需要插桩,以及需要什么插桩来解释变化。 对于性能问题表现为持续缓慢的请求而不是高变化的情况,可以使用一个类似的过程,重点是识别请求响应时间的主要贡献者。

第二个观察结果是,end-to-end tracing的工具让通过向应用插桩来捕获请求的工作流成为可能。

THE VISION OF PYTHIA

桩点是预先定义好的,由pythia负责开关。pythia循环运行。 在开始的时候,Pythia会将以下内容作为输入。 1)最初的、低保真的预期,即哪些请求应该执行类似的操作; 2)用一组跟踪点创建的工作流程骨架,这些跟踪点在分布式应用和较低的堆栈层中总是被启用。

工作流程主要有以下几个步骤。

  1. 提取工作流骨架的关键路径来创建关键路径骨架
  2. 根据对哪些请求应该有类似表现的期望,将请求的关键路径骨架分组
  3. 将检查分配给不同组的请求的响应时间分布,这些请求要么表现出高变异系数(CoV),要么duration很长(即,具有高响应时间和低variance)
  4. 探索在哪里(where)对有问题的组进行插桩
  5. 使用各种搜索策略来确定插什么桩(what),以及如果以前启用的插桩不足以解释观察到的变化,则禁用它
    1. 一个简单的搜索策略是分层次地启用更细化的插桩(例如,首先是分布式应用的服务,然后是服务中的组件,然后是构成组件的节点,然后是节点中的功能)
  6. 完善预期,以适应新启用或禁用的插桩。它还将收集新的工作流程骨架。

PYTHIA’S DESIGN

Pythia可以被分成控制平面和插桩平面。

控制平面的输入。Pythia的控制平面以有向环形图的形式作为input trace,它可以显示并发和同步。 Pythia还要求输入的trace包括调用者/被调用者关系和semantically-meaningful的interval-也就是spans。

优先组件。这个组件负责将启用的插桩,根据对问题程度的衡量对组进行排序(例如,首先是最高的CoV组,然后是性能极慢的组)。 按照排名插桩,控制在一个预先设定的限度内(例如,低于x KB/s)。

Search space

将DAG转化成调用上下文树(Calling Context Trees, CCTs)。

为了确定可以为有问题的组中的高变量或高延迟span启用的额外插桩(目标#1),首先使用组的关键路径骨架代表的请求类型索引到正确的CCT。

其次,我们将使用索引来搜索CCT中的问题span。 如果有多个匹配,我们将使用编辑距离算法来比较匹配的调用上下文和关键路径骨架中的高延迟/高差异span。 我们将选择具有最低编辑距离的匹配,并返回其所有的下级,作为可以启用的插桩。

Search strategies

几个可能的策略。

  • 分层搜索。正如第2节所解释的,一种策略是启用CCT中问题边缘的所有直接子节点的跟踪点。这种方法逐层研究高变化;它很彻底,但带来了高开销。
  • 二元搜索。层次搜索可以通过探索时跳过层来加速。
  • 跨层。在具有跨层仪器的系统中,在问题被定位到单个虚拟机后,可以优先考虑不同堆栈层的仪器,以确定哪个堆栈层可能包含问题的根本原因。
  • 协方差。对于高变异组,将计算边缘对的协方差,如果它们是整体变异的重要贡献者,则在搜索空间中优先考虑两个边缘共同的跟踪点。

搜索空间也包括可以进行插桩的变量值。如果变量被选为工具,Pythia会检查它们是否对解释方差有用。 我们使用Canonical Correlation Analysis(CCA)来寻找与整体请求延迟最高度相关的变量。 如果相关度很高,这些变量就会作为可能的变异解释被纳入追踪。 分组时也考虑到这些变量,例如,如果一个二元变量是请求延迟的一个很好的指标,那么就为二元变量的任一数值构建两个组。 对那些没有显示出与方差高度相关的变量的追踪被禁用。

VALIDATING PYTHIA’S APPROACH

OSProfiler