美文网首页
服务间的链路跟踪技术

服务间的链路跟踪技术

作者: robot_test_boy | 来源:发表于2022-11-06 00:48 被阅读0次

日志监控系统中有一个ID字段能在整个系统内跟踪请求的执行路径,另外还可以通过重现微服务的请求过程,展示各个服务间的执行流程,同时展示每步操作所耗费的时间。这不仅有助于了解请求在各个服务间的流动顺序,还有助于发现可能的系统瓶颈。为此,将使用分布式链路追踪系统Jaeger和一套与OpenTracing API相兼容的类库。

分布式链路追踪开放标准

OpenTracing API是一个与供应商无关的分布式链路追踪开放标准。许多分布式跟踪系统(如Dapper、Zipkin、HTrace、X-Trace)都提供了链路追踪功能,但使用的是互不兼容的API。选择其中一个系统通常意味着可能要与使用不同编程语言的系统紧密耦合到一起,从而形成一个解决方案。OpenTracing目的是为链路追踪的信息收集提供一组约定的、标准化的API。类库可用于不同的语言和框架。

请求关联参数概念:trace和span

trace由单个或多个span组成的有向无环图(Direct Acyclic Graph,DAG),这些span的边称为reference。trace用于聚合和关联整个系统的执行流,一个trace记录整个流程。

从服务依赖的角度展示了1个trace由8个不同的span组成的。这些span可以由同一个应用触发,也可以由不同的应用触发。唯一的要求是在触发新的span时,要传递父span的ID,这样新的span就拥有了父span的引用。

每个span包含如下信息:操作名称、起始时间戳和完成时间戳、零个或者多个span标签(键值对)、零个或多个span日志(带时间戳的键值对)、span上下文(context)以及引用零个或多个span的参考(通过span上下文)。span上下文包含了引用的span所需要的信息,这个span可以是自己服务的也可以是另一个服务的。

分布式链路追踪系统Jaeger

受Dapper和OpenZipkin启发,Jaeger是一个由Uber技术公司开源发布的分布式链路追踪系统,可以用于基于微服务的分布式系统中进行监控和故障排查。

1. 初始化链路追踪器并传输创建的trace和span

首先,在待链路追踪的服务中添加一些类库并初始化链路追踪器,创建trace和span并将其传输到Jaeger服务。

Flask==0.12.0

requests==2.18.4

jaeger-client==3.7.1    ---  Jaeger客户端类库将服务与链路追踪系统连接起来

opentracing>=1.2,<2  ---  Python的OpenTracing平台类库

opentracing_instrumentation>=2.2,<3  ---  用于简化带有不同框架和应用集成的注解工具集合

这样,Jaeger收到消息后,就可以展示trace与span,并将这些span关联起来。将这些span关联起来能够帮助我们详细了解在某个服务的一次调用中每个操作的耗时及其相对整体执行时间的占比。

2. 链路追踪可视化

以向SimpleBank profile服务的端点发出一个请求为例,

1)profile服务创造了一个span A。

2)profile服务与外部服务交互以获取IP,并将其包装在一个新的span B中。

3)profile服务在新建的span C中与内部的SimpleBank settings服务交互以获取用户信息,并将父span的上下文传递给下游服务。

4)两个服务将span信息传递至Jaeger服务。

为了将追踪可视化,需要访问运行在16686端口的Jaeger界面。

单击底部的Find Traces按钮,可以查到某个服务的链路追踪。

为了了解分布式系统的运行情况,可以将不同服务之间的请求流以可视化的方式展示出来,并了解每个操作执行完成所需要的时间。这种简单的设置一方面能够让我们理解微服务架构中的执行流程,另一方面又能够发现可以改进的潜在瓶颈。

还可以使用Jaeger来了解系统中不同组件之间的关系。顶部导航菜单栏有一个Dependencies链接。单击该链接,然后在出现的页面中选择DAG(Direct Acyclic Graph)选项卡。

摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》

相关文章

  • 服务间的链路跟踪技术

    日志监控系统中有一个ID字段能在整个系统内跟踪请求的执行路径,另外还可以通过重现微服务的请求过程,展示各个服务间的...

  • 简单了解 Spring Cloud 的微服务架构

    1 前言 Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1、Sleuth-链路跟踪为服务之间...

  • SOA和RPC区别

    RPC SOA SOA又叫服务治理,入springcloud,服务进行监控,熔断,链路跟踪。

  • 区块链开发技术的审计跟踪

    区块链开发技术的审计跟踪 就由山东科冠信息技术来给大家介绍一下。 区块链技术的审计跟踪是运用客户端服务器基础设施,...

  • skywalking搭建

    skywalking是分布式微服务请求链路跟踪的框架,可以实现无侵入的链路跟踪、统计、拓扑架构绘制等,本文介绍如何...

  • 14. SpringCloud之Sleuth+Zipkin链路追

    1、链路追踪简介 其实链路追踪就是日志追踪,微服务下日志跟踪,微服务系统之间的调用变得非常复杂,往往一个功能的调用...

  • 3.14:全链路跟踪

    本文将从以下三个方面阐述全链路跟踪设计与实践 为什么要做全链路跟踪 怎么做全链路跟踪 开源框架选型 为什么要做全链...

  • spring-cloud-sleuth-zipkin实现微服务的

    spring-cloud-sleuth-zipkin实现微服务的链路跟踪 简介 在微服务数量较多的系统架构中,一个...

  • Java调用链跟踪关键技术(一)总体介绍

    一、调用链跟踪的作用 调用链跟踪包括 1.前端到后端的调用链 2.单个服务内部方法之间的调用链 3.微服务之间的调...

  • SpringCloud第十六篇:微服务利剑之APM平台(二)Pi

    1. Pinpoint概述 Pinpoint是一个由韩国人编写的为大型分布式系统服务的链路跟踪平台,并提供大量链路...

网友评论

      本文标题:服务间的链路跟踪技术

      本文链接:https://www.haomeiwen.com/subject/ucgstdtx.html