业界比较有名的服务追踪系统实现有阿里的鹰眼、Twitter 开源的 OpenZipkin,还有 Naver 开源的 Pinpoint,它们都是受 Google 发布的 Dapper 论文启发而实现的。其中阿里的鹰眼解决方案没有开源,而且由于阿里需要处理数据量比较大,所以鹰眼的定位相对定制化,不一定适合中小规模的业务团队.

OpenZipkin

image.png

组成:

  1. Collector:负责收集探针 Reporter 埋点采集的数据,经过验证处理并建立索引。
  2. Storage:存储服务调用的链路数据,默认使用的是 Cassandra,是因为 Twitter 内部大量使用了 Cassandra,你也可以替换成 Elasticsearch 或者 MySQL。
  3. API:将格式化和建立索引的链路数据以 API 的方式对外提供服务,比如被 UI 调用。
  4. UI:以图形化的方式展示服务调用的链路数据。

工作原理:

image.png

Pinpoint

image.png

组成:

  1. Pinpoint Agent:通过 Java 字节码注入的方式,来收集 JVM 中的调用数据,通过 UDP 协议传递给 Collector,数据采用 Thrift 协议进行编码。
  2. Pinpoint Collector:收集 Agent 传过来的数据,然后写到 HBase Storgage。
  3. HBase Storage:采用 HBase 集群存储服务调用的链路信息。
  4. Pinpoint Web UI:通过 Web UI 展示服务调用的详细链路信息。

工作原理:

image.png

选型对比