学名(Distributed TracingSystem 分布式追踪系统)
支持的客户端语言情况
奉上谷歌论文Dapper
新美大之CAT(开源)
大厂子自己造的轮子
安装运行
代码执行
12345678910111213141516171819202122232425262728root@es_002:/home/tb/tbdown/zipkin# lsquickstart.sh zipkin-server-2.11.7-exec.jarroot@es_002:/home/tb/tbdown/zipkin# java -jar zipkin-server-2.11.7-exec.jar********** *** *** **** **** **** ********************** ********** **** ************************************************************************************** **** ******* ************* ** ***** ** ** ** ** **** ** ** * *** ** **** **** ** ***** **** ** ** ********* ** ** ** ** ** ** **:: Powered by Spring Boot ::上图
- 是没有jaeger的好看,丰富
- 有数据的
依赖
逻辑图
总
分
层次
更贴近业务的复杂调用
- 是没有jaeger的好看,丰富
- Zipkin of php类库了解一下
|
|
- Zipkin of php类库了解一下
|
|
- 数据持久化到mysql
|
|
以mysql为存储方式启动(222为另外一台机器):
|
|
|
|
与下图匹配
- 更形象化的例子
与下图匹配
1. 在10ms的时候,client send发起一个请求
2. 服务端在9ms后(10+9),之后,收到这个请求 server receive
3. 12ms后,server处理完了业务逻辑,返回给客户端 server send
4. 1ms后,client收到了这个响应 client receive
实战代码
- new trace是一个span的名称,这三个span是同级别12345678910111213141516171819202122232425262728293031$span_root = $tracer->newTrace();$span_root = $tracer->newTrace();$span_root->setName('pre_con_redis');$span_root->start();try {//1000毫秒 =1秒=1000000微秒 usleep 单位是微妙usleep(1000000);} finally {$span_root->finish();}//new trace是一个span的名称$span_root_2 = $tracer->newTrace();$span_root_2->setName('do_redis');$span_root_2->start();try {//1000毫秒 =1秒=1000000微秒 usleep 单位是微妙usleep(2000000);} finally {$span_root_2->finish();}$span_root_3 = $tracer->newTrace();$span_root_3->setName('do_redis');$span_root_3->start();try {//1000毫秒 =1秒=1000000微秒 usleep 单位是微妙usleep(3000000);} finally {$span_root_3->finish();}
对应下面的1s,2s,3s
- 父子关系
|
|
实现截图
001
002
003
004
实际问题
- 如果做到对现有代码的低侵入
对中间件、类库的二次包装? - 如果兼顾代码执行效率、性能、稳定性
根据load动态调整? - 扩展及降级怎么最方便
- 该记录什么信息?怎么记录?hook
- 和ELK结合
-
如果图片无法加载,请点此查看完整多图