分布式调用链追踪zipkin

分布式调用链追踪zipkin

  • zipkin是Twitter的一个开源项目,基于论文Google Dapper(https://ai.google/research/pubs/pub36356)实现,可以用来收集各个服务器上请求链路的跟踪数据,可以通过API接口来查询数据来实现对服务系统的监控,此外zipkin还提供了UI方便直观查询跟踪信息和服务间依赖关系。

一、zipkin架构

这里写图片描述

1、zipkin的基础架构一共包括4个核心组件

  • collector:收集器组件,主要用于收集每个服务发送过来的信息,并将这些信息转换为zipkin内部处理的span格式,方便存储、分析、展示。
  • storage:存储组件,支持内存(主要测试用)和数据库存储(mysql、elasticsearch等)
  • restful API:API组件,提供了外部访问接口,方便自定义功能开发,如监控等
  • Web UI:UI组件,基于API实现,方便查看跟踪信息

2、关于zipkin的几个核心概念

  • Span:一个client服务从发出请求到被响应的过程称为span
  • Trace:client发出请求到完成处理,中间会经历一个调用链,这个过程称为一个调用链追踪
  • Transport:采集信息的传方式,最简单的http方式,高并发可以换成消息队列方式,如kafka

更多细节参考官网:https://zipkin.io/

二、golang实现

1、需要先初始化zipkin相关变量:collector、recorder、tracer

2、实现grpc客户端和服务端的拦截器UnaryServerInterceptor、UnaryClientInterceptor

3、选择储存的方式mysql、elasticsearch等