Graph-Based Trace Analysis for Microservice Architecture Understanding and Problem Diagnosis

文章主要提出了eBay的自己实现的一套基于图的微服务跟踪分析方法。图表示增加了business flow和EP chain的概念。 存储采用Neo4j作为图数据库、Druid作为分析数据库,两者结合。

运行时产生的大量trace使得实时捕捉所需信息成为挑战,其中有两个特别的挑战:

  • 需要有效地处理trace数据,以产生不同层次和高质量的聚合trace表示
  • 鉴于大型服务生态系统可能由各种应用框架和不同的系统组成,利用跟踪数据建立有效的应用需要解决跟踪数据的质量问题,如错误的链和断链

GRAPH-BASED MICROSERVICE TRACE ANALYSIS (GMTA) SYSTEM

基于图形的微服务跟踪分析(GMTA)系统包括三个模块:处理、存储和访问。

处理模块将spans组装成traces、paths或者business flows。 存储模块结合了图数据库和实时分析数据库,并使用精心设计的存储结构。 访问模块在三个层面上提供灵活有效的trace data访问接口:business flow、path和trace。

Graph-based Representation

图的表示基本一样,包括

  • trace
  • span
  • path
  • operation
  • hop
  • business flow:访问了同样关键组件的path
  • EP chain:错误传播链,它是一个传播错误的跨度的序列

Data Processing

Trace Assembling and Repairing. trace组装是一个持续的过程,在这个过程中,来自不同服务实例的大量span以流的方式产生和接收。 为了有效地处理流数据,我们采用了时间窗口策略。我们在给定的时间窗口(例如5分钟)内收集并分组具有相同traceID的span。 一些span日志可能包括不正确或不完整的信息,使得出的trace无效。目前,GMTA检测并修复了两种这样的问题:无效的操作名称和破碎的trace。

无效的操作名称通常是由日志中错误传递的参数引起的。 例如,请求中包含的用户ID可能被错误地传递为操作名称的一部分。 一个服务的操作数量通常是稳定的,而且不大。 因此,我们可以通过监测同一服务的不同操作名称的数量变化来识别span日志中的无效操作名称。 我们提示用户检查识别出的无效操作名称,并要求用户提供匹配和替换规则,例如使用正则表达式。 然后,后来到达的无效操作名称可以被自动匹配并替换为正确的名称。 通过这种方式,可以避免由无效的操作名称引起的错误路径。

断裂的trace通常是由于开发规范和历史遗留系统在日志中传递的数据不完整造成的。 例如,父spanID在span中丢失。基于trace的树状结构,我们检测并修复三种断裂的trace。

  1. 一个trace没有根:只需添加一个根节点(假根)并使其成为没有父span的span的父节点
  2. 一个trace有一个以上的根:通过时间戳匹配来修复破碎的跟踪,将森林中满足叶子时间早于根时间的两棵树合并,最后就只有一棵树
  3. 一个trace有一个根,但是一些span没有父span:同上

在轨迹组装过程中,我们还根据span的错误标签来识别EP链。 给定一个有错误标签的span,我们检查该span的一个子span是否也有一个错误标签。 如果没有,当前span被认为是EP链的起点,并且在span中加上一个特殊的标签和链的长度

Path Identification. 合并有相同的树状结构的两个traces。为了避免开销有一些优化。

Business Flow Identification. 业务流可以由开发人员和操作工程师按需定义。 业务流可以被定义为以下两种类型的任何数量的基本条件的逻辑组合(使用AND/OR操作)。 (1) 一个服务操作被调用。 (2) 一项服务操作在另一项操作之前或之后被调用。

Data Access

数据的访问要求可以分为以下三个层次。

  • trace级访问
  • path级访问
  • business flow级访问

Data Storage

使用Neo4j作为图数据库,使用Druid作为分析数据库。 设计点在于怎么区分什么数据库存储什么东西。