服务A响应format请求 , 调用tracer.extract从http headers中提取信息 , 构建spanContext 。
服务B代码
from flask import Flaskfrom flask import requestfrom lib.tracing import init_tracerfrom opentracing.ext import tagsfrom opentracing.propagation import Format?app = Flask(__name__)tracer = init_tracer('publisher')?@app.route("/publish")def publish(): span_ctx = tracer.extract(Format.HTTP_HEADERS, request.headers) span_tags = {tags.SPAN_KIND: tags.SPAN_KIND_RPC_SERVER} with tracer.start_active_span('publish', child_of=span_ctx, tags=span_tags): hello_str = request.args.get('helloStr') print(hello_str) return 'published'?if __name__ == "__main__": app.run(port=8082)服务B和A类似 。
之后在支持分布式追踪的软件UI上(下图是Jaeger UI) , 就可以看到类似下图的追踪信息 。我们可以看到服务hello-word和三个操作say-hello/format/println的详细追踪信息 。
文章插图
当前有很多分布式追踪软件都提供了OpenTracing的支持 , 包括:Jaeger , LightStep , Instanna , Apache SkyWalking , inspectIT , stagemonitor , Datadog , Wavefront , Elastic APM等等 。其中作为开源软件的Zipkin(http://1t.click/6Ec)和Jaeger(http://1t.click/6DY)最为流行 。
Zipkin
Zipkin(http://1t.click/6Ec)是Twitter基于Dapper开发的分布式追踪系统 。它的设计架构如下图:
文章插图
- 蓝色实体是Zipkin要追踪的目标组件 , Non-Intrumented Server表示不直接调用Tracing API的微服务 。通过Intrumented Client从Non-Intrumented Server中收集信息并发送给Zipkin的收集器Collector 。Intrumented Server 直接调用Tracing API , 发送数据到Zipkin的收集器 。
- Transport是传输通道 , 可以通过HTTP直接发送到Zipkin或者通过消息/事件队列的方式 。
- Zipkin本身是一个JAVA应用 , 包含了:收集器Collector负责数据采集 , 对外提供数据接口;存储;API和UI 。
文章插图
文章插图
Zipkin官方支持以下几种语言的客户端:C# , Go , Java , JavaScript , Ruby , Scala , php 。开源社区也有其它语言的支持 。
Zipkin发展到现在有快4年的时间 , 是一个相对成熟的项目 。
Jaeger
Jaeger(http://1t.click/6DY)最早是由Uber开发的分布式追踪系统 , 同样基于Dapper的设计理念 。现在Jaeger是CNCF(Cloud Native Computing Foundation)的一个项目 。如果你对CNCF这个组织有所了解 , 那么你可以推测出这个项目应该和Kubernetes有非常紧密的集成 。
Jaeger基于分布式的架构设计 , 主要包含以下几个组件:
- Jaeger Client , 负责在客户端收集跟踪信息 。
- Jaeger Agent , 负责和客户端通信 , 把收集到的追踪信息上报个收集器 Jaeger Collector
- Jaeger Colletor把收集到的数据存入数据库或者其它存储器
- Jaeger Query 负责对追踪数据进行查询
- Jaeger UI负责用户交互
Jaeger作为分布式追踪的后起之秀 , 随着云原生和K8s的广泛采用 , 正变得越来越流行 。利用官方给出的K8s部署模版(http://1t.click/6DU) , 用户可以快速的在自己的k8s集群上部署Jaeger 。
4.分布式跟踪系统——产品对比
当然除了支持OpenTracing标准的产品之外 , 还有其它的一些分布式追踪产品 。这里引用一些其它博主的分析 , 给大家一些参考:
- 调用链选型之Zipkin , Pinpoint , SkyWalking , CAT(http://1t.click/6tY)
- 分布式调用链调研(pinpoint,skywalking,jaeger,zipkin等对比)(http://1t.click/6DK)
推荐阅读
- 企业微信怎么赚钱?只需要做好这几点
- 微软Edge浏览器恢复DoH选项:用户可选择DNS服务提供商
- 适合小微企业申请的https证书是哪种
- 微波炉柠檬酸清洗,微波炉使用技巧
- 微信加好友封号会自动解除吗?
- 微软|坐等升级!Windows 11大更新将公测 微软添加多个给力新功能
- 微信头像国旗怎么弄上去的?
- 修复更新所致打印机蓝屏故障
- 微服务版 前后端分离开源快速开发平台
- 一文让你享用 Google 全套服务