首页 > 其他分享 >关于链路追踪所需要了解的知识

关于链路追踪所需要了解的知识

时间:2023-02-17 21:31:28浏览次数:24  
标签:采样率 调用 请求 知识 链路 客户端 追踪

链路追踪(tracing)即调用链监控,特点是通过记录多个在请求间跨服务完成的逻辑请求信息,帮助开发人员优化性能和进行问题追踪。链路追踪可以捕获每个请求遇到的异常和错误,以及即时信息和有价值的数据。

1、微服务链路追踪解决的难题

随着微服务应用数量的极速增加,服务与服务链路之间的调用关系也变得错综复杂。此时,我们也会碰到各种难题。

  • 系统出现问题后,由于服务链路过长或过于复杂,无法快速准确定位问题。客户端(如浏览器)或者移动端应用报出异常或者错误,也无法确定是哪个服务抛出的异常。
  • 某个业务请求非常慢,且总是超时,无法确定系统哪个环节存在性能的问题。
  • 如何快速发现问题?可以通过调用链结合业务日志快速定位错误信息。
  • 如何判断故障影响范围?各个阶段链路耗时、服务依赖关系可以通过可视化界面展现出来,从而直观地审视故障的影响范围。
  • 如何梳理服务依赖以及依赖的合理性?如何分析链路性能问题以及实时容量规划?通过分析链路耗时、服务间的依赖关系,就可以得到用户的行为路径,汇总分析出具体出问题的场景。
2、链路追踪重要概念介绍

市面上的绝大部分APM都是以谷歌公开论文中提到的Dapper为基础构建而成,先来一起看看调用链监控中的几个重要概念。

  1. Trace

指一次完整的分布式调用链路可以看作一棵二叉树,从中我们能直观地看到请求经过所有服务的路径。从请求到服务器开始,到服务器返回响应数据结束,跟踪每次RPC调用的耗时,并使用唯一标识trace id。例如,你完成一次微信支付,从微信扫描二维码到付款成功,唯一trace id将保留在整个请求链路中。

关于链路追踪所需要了解的知识_链路追踪

服务间经过的分支链路构成了一条完整的链路,其中每一条分支链路都用全局唯一的trace id来标识,便于对其上下文进行追踪。

  1. Span

每次进行本地或者远程方法的调用时会创建一个Span,我们通过一个64位ID来标识它,Span中还有其他数据,例如描述信息、时间戳、key-value对(Annotation)的tag信息、parent id等,其中parent id可以表示Span调用链路来源。通过Span的ID我们可以轻松了解服务的父服务是谁,再结合trace id就可以将一条完整的请求调用链串联起来。

关于链路追踪所需要了解的知识_链路追踪_02

  1. Annotation

为附加在Span上的日志信息,如下图在请求中的应用。

关于链路追踪所需要了解的知识_链路追踪_03

  • Client Start:表示客户端发起请求;
  • Server Receive:表示服务端收到请求;
  • Server Send:表示服务端完成处理,并将结果发送给客户端;
  • Client Received:表示客户端获取到服务端返回的响应数据。
  • foo:表示开发者选择在跟踪中增加他们自己的注释,即业务数据,这些信息会和Span信息被一同记录。

可以利用Annotation里的信息来计算一次调用的耗时,只需将客户端结束的时间点减去客户端开始请求的时间点,如果要计算客户端发送网络耗时,即客户端接收请求的时间点减去客户端发送请求的时间点。

  1. Sampling

采样率,需在客户端按照比例埋点并将信息提交给服务端。采集信息时的低损耗是这类监控服务设计时的重要标准,如果监控工具采集信息时给微服务造成了严重的性能问题,反而得不偿失。进行样本采样时,应该根据系统业务和技术架构,对每个应用和服务分别设置相应的采样率,每个应用的采样率可以动态调整。在产品的不同阶段采样率可能不同。例如,产品上线后的时段需要大量采样来了解整个系统的运行状态,这就需要提高采样率,当系统处于稳定时期,可以适当降低收集采样的频率。

采样收集包括可变自适应采样与固定采样。

1)可变自适应采样机制是不使用统一的采样率,在低流量负载时会自动提高采样率,而高流量负载则会自动降低采样率,从而掌控性能损耗。

2)而固定采样率模式是设置采样的百分比,可以设置阈值为0~100之间,当采样率设置为100时,则每次调用都会进行采样收集。

3、链路追踪的工具介绍

了解了链路追踪工具的原理后,我们来看看业界常用的链路追踪系统Zipkin、PinPoint、SkyWalking,这里以SkyWalking为例子。

关于链路追踪所需要了解的知识_链路追踪_04

SkyWalking逻辑上分为4部分:探针、平台后端、存储和用户界面。

1)探针:基于不同的来源,探针的实现可能不一样,但作用都是收集数据。

2)平台后端:支持数据聚合、数据分析以及获取探针采集到的数据。数据获取与分析来自SkyWalking原生追踪和性能指标以及第三方数据来源,第三方数据来源包括Istio、Envoy telemetry及Zipkin的追踪格式化数据等。我们甚至可以使用可观测分析语言对原生度量指标和计量系统的扩展变量指标进行自定义聚合分析。

3)存储:通过开放的插件化的接口存放SkyWalking数据,你可以选择一个既有的存储系统,如Elasticsearch、H2或MySQL集群(ShardingSphere管理),也可以选择自己实现一个存储系统。

4)用户界面:一个基于接口并且可定制化的Web系统,用户可以查看和管理SkyWalking数据。

标签:采样率,调用,请求,知识,链路,客户端,追踪
From: https://blog.51cto.com/key3feng/6064534

相关文章

  • Java基础知识点(数组遍历以及常见问题)
    一:数组遍历:将数组中的所有内容取出来,取出来之后可以对它进行一系列的操作。注意:遍历指的是取出数据的过程,不要局限的理解为遍历就是打印。在Java中,关于数组的一个长度属性.l......
  • Java基础知识点(数组较难的的一个练习-数组的排序)
    冒泡排序:第一步:从第一个元素开始,将相邻的两个元素进行比较,如果前一个元素比后一个元素大,则交换他们的位置,直到最后两个元素完成比较。整个过程完成后,数组中最后一个元素自然......
  • 【LeetCode二叉树#00】二叉树的基础知识
    基础知识分类满二叉树如果二叉树中除了叶子结点,每个结点的度都为2,则此二叉树称为满二叉树。完全二叉树除了底层外,其他部分是满的,且底层从左到右是连续的,称为完全二......
  • VUE组件相关知识
    目录VUE组件/组件数据传递组件间数据传递父传子组件间数据传递子传父更方便的父子组件数据-ref(推荐)基础方法实现导航栏动态组件实现导航/和keep_alive方法keep_alive方......
  • vue-day05——组件通信(父传子、子传父及其他小知识点)、ref属性、动态组件、slot插槽、
    目录一、组件其他二、组件间通信之父传子(通过自定义属性)三、组件间通信之子传父(通过自定义事件)四、ref属性五、动态组件5.0不使用动态组件5.1动态组件component标签5.2......
  • 一些有用的小知识
    1.maven项目打包成可执行jar包maven配置<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId>......
  • HTTP知识点
    HTTP请求/响应的步骤:(工作原理)客户端连接到Web服务器一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.ba......
  • 外汇天眼:炒汇新手必看的模拟交易知识!一起学起来吧~
    就目前而言,随着外汇行业在世界发展的愈来愈快,不同的外汇平台应运而生,其竞争也是愈演愈烈。很多平台为了提高自身的竞争力。都会在其交易平台中为那些外汇交易新手提供一个模......
  • javascript的一些基础知识
    随手记录一些javascript的一些基础知识,之前只是简单用到javascript,并没有了解其中的概念。1. JavascriptObject:InJavaScript,almost"everything"isanobject.......
  • HTML基础知识
    一HTML介绍1、基础相关:1、HTML:负责网页的架构2、CSS:负责网页的样式、美化3、JS:负责网页的行为2、什么是HTML1、HTML是用来......