Zipkin是twitter在google的dapper论文的基础上实现的分布式跟踪系统。关于dapper的解读,详细可以参看:https://blog.csdn.net/liumiaocn/article/details/80657661
zipkin概要信息
项目 | 说明 |
---|---|
官方网站 | https://zipkin.io/ |
开源/闭源 | 开源 |
License类别 | Apache License 2.0 |
代码管理地址 | https://github.com/openzipkin/zipkin/ |
开发语言 | Java,Javascript |
支持平台 | 可运行于Linux/Windows/MacOS等多种操作系统,并提供docker标准镜像 |
当前版本 | 2.9.1 (2018/06/11) |
更新频度 | 平均每月数次 |
使用zipkin
使用docker方式,使用如下方法,可以最简单快速地启动zipkin
docker run –name zipkin -d -p 9411:9411 openzipkin/zipkin
[root@kong ~]# docker pull openzipkin/zipkin
Using default tag: latest
Trying to pull repository docker.io/openzipkin/zipkin ...
latest: Pulling from docker.io/openzipkin/zipkin
3a9e9033596c: Pull complete
187e634e5a8a: Pull complete
fdcad99cc6cd: Pull complete
Digest: sha256:8b6d9da454dcd38ed8c34f11d4a9008d9ad664d913748ebc9b13c247596e7e6c
Status: Downloaded newer image for docker.io/openzipkin/zipkin:latest
[root@kong ~]#
[root@kong ~]#docker run --name zipkin -d -p 9411:9411 openzipkin/zipkin
6a752c4fef6283712908070661ca8e2d6e3d96c535432d04a66a24233ce81949
[root@kong ~]#
zipkin架构
zipkin由图示的四个部分组成:
- collector
- storage
- API
- web UI
Python项目依赖
为了在Python项目中使用zipkin,需要py_zipkin/pyramid/pyramid_zipkin 。在CentOS系Linux发行版上命令如下:
yum install python-devel
pip install –trusted-host pypi.org –trusted-host files.pythonhosted.org py_zipkin pyramid pyramid_zipkin
模拟dapper论文的调用链
在这篇文章中我们将会模拟在Python项目中如何跟中dapper论文中的三层架构的例子:
层次 | 服务名称 | 父span | 调用顺序 |
---|---|---|---|
前端 | Frontend:A | 无 | 1 |
中间 | MiddleTier:B | A | 2 |
中间 | MiddleTier:C | A | 3 |
后端 | Backend:D | C | 4 |
后端 | Backend:E | C | 5 |
这样的一个树形结构,表现出来的调用顺序则是:A->B->C->D->E。
模拟五个服务
使用python简单地模拟如上地A-E等五个服务,其中A和C为调用节点,而B/D/E为终端节点,A会调用B和C,其示例代码如下,C与之类似:
[root@kong python]# ls
A.py B.py C.py D.py E.py test_zipkin.sh
[root@kong python]# cat A.py
import requests
import datetime
from pyramid.response import Response
from pyramid.view import view_config
from pyramid.config import Configurator
from py_zipkin.zipkin import create_http_headers_for_new_span
from wsgiref.simple_server import make_server