跟踪器|Go微服务全链路跟踪详解( 三 )
跟踪库之间的互兼容性 你也许会问“如果我的程序使用Zipkin和OpenTracing而需要调用的第三方微服务使用OpenTracing与Jaeger , 它们会兼容吗?"它看起来于我们之前询问的数据库问题类似 , 但实际上很不相同 。 对于数据库 , 因为应用程序和数据库在同一个进程中 , 它们可以共享相同的全局跟踪器 , 因此更容易解决 。 对于微服务 , 这种方式将不兼容 。 因为OpenTracing只标准化了跟踪接口 , 它没有标准化跟踪上下文 。 万维网联盟(W3C)正在制定跟踪上下文(trace context)[15]1?的标准 , 并于2019-08-09年发布了候选推荐标准 。 OpenTracing没有规定跟踪上下文的格式 , 而是把决定权留给了实现它的跟踪库 。 结果每个库都选择了自己独有的的格式 。 例如 , Zipkin使用“X-B3-TraceId”作为跟踪ID , Jaeger使用“uber-trace-id” , 因此使用OpenTracing并不意味着不同的跟踪库可以进行跨网互操作 。 对于“Jaeger”来说有一个好处是你可以选择使用“Zipkin兼容性功能[16]"13来生成Zipkin跟踪上下文 ,这样就可以与Zipkin相互兼容了 。 对于其他情况 , 你需要自己进行手动格式转换(在“inject”和“extract”之间) 。
全链路跟踪设计
尽量少写代码
一个好的全链路跟踪系统不需要用户编写很多跟踪代码 。 最理想的情况是你不需要任何代码 , 让框架或库负责处理它 , 当然这比较困难 。 全链路跟踪分成三个跟踪级别:
- 跨进程跟踪 (cross-process)(调用另一个微服务)
- 数据库跟踪
- 进程内部的跟踪 (in-process)(在一个函数内部的跟踪)
进程内跟踪是最困难的 , 因为你必须为每个单独的函数编写跟踪代码 。 现在还没有一个很好的方法 , 可以编写一个通用的函数来跟踪应用程序中的每个函数(拦截器不是一个好选择 , 因为它需要每个函数的参数和返回都必须是一个泛型类型(interface {})) 。 幸运的是 , 对于大多数人来说 , 前两个级别的跟踪应该已经足够了 。
有些人可能会使用服务网格(service mesh)来实现分布式跟踪 , 例如Istio[17]或Linkerd[18] 。 它确实是一个好主意 , 跟踪最好由基础架构实现 , 而不是将业务逻辑代码与跟踪代码混在一起 , 不过你将遇到我们刚才谈到的同样问题 。 服务网格只负责跨进程跟踪 , 函数内部或数据库跟踪任然需要你来编写代码 。 不过一些服务网格可以通过提供与流行跟踪库的集成 , 来简化不同跟踪库跨网跟踪时的的上下文格式转换 。
跟踪设计:
精心设计的跨度(span) , 服务名称(service name) , 标签(tag)能充分发挥全链路跟踪的作用 , 并使之简单易用 。 有关信息请阅读语义约定(Semantic Conventions)[19]1? 。
将Trace ID记录到日志
将跟踪与日志记录集成是一个常见的需求 , 最重要的是将跟踪ID记录到整个调用链的日志消息中 。 目前OpenTracing不提供访问traceID的方法 。 你可以将“OpenTracing.SpanContext”转换为特定跟踪库的“SpanContext”(Zipkin和Jaeger都可以通过“SpanContext”访问traceID)或将“OpenTracing.SpanContext”转换为字符串并解析它以获取traceID 。 转换为字符串更好 , 因为它不会破坏程序的依赖关系 。 幸运的是不久的将来你就不需要它了 , 因为OpenTracing将提供访问traceID的方法 , 请阅读这里[20] 。
OpenTracing 和 OpenCensus
OpenCensus[21]1?不是另一个通用跟踪接口 , 它是一组库 , 可以用来与其他跟踪库集成以完成跟踪功能 , 因此它经常与OpenTracing进行比较 。 那么它与OpenTracing兼容吗?答案是否定的 。 因此 , 在选择跟踪接口时(不论是OpenTracing还是OpenCensus)需要小心 , 以确保你需要调用的其他库支持它 。 一个好消息是 , 你不需要在将来做出选择 , 因为它们会将项目合并为一个[22]1? 。
结论: 全链路跟踪包括不同的场景 , 例如在函数内部跟踪 , 数据库跟踪和跨进程跟踪 。 每个场景都有不同的问题和解决方案 。 如果你想设计更好的跟踪解决方案或为你的应用选择最适合的跟踪工具或库 , 那你需要对每种情况都有清晰的了解 。
源码:
完整源码的github链接[23]
文章插图
- 助力|上班族的小妙招:怎么弄pdf签名?编辑器来助力
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人
- 正确|新昌消防丨听说,这才是微信新表情的正确打开方式
- 优化|微软亚洲研究院发布开源平台“群策 MARO” 用于多智能体资源调度优化
- 跑腿|机器人“小北”上岗 让办事群众少跑腿
- 计算机学科|机器视觉系统是什么
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 手机|新鲜评测:让手机变身电脑的显示器见过没?只用4步即可完成!
- 机器人|外骨骼康复训练机器人助力下肢运动功能障碍患者康复训练
- 手机|原来微信一键就能拼接长图,朋友圈可发送几十张照片,涨知识了