首页 > 其他分享 >《RPC实战与核心原理》学习笔记Day14

《RPC实战与核心原理》学习笔记Day14

时间:2023-01-31 22:57:08浏览次数:42  
标签:Span Trace 笔记 Day14 RPC 链路 分布式 时钟

19 | 分布式环境下如何快速定位问题?

分布式环境下定位问题有什么难点?

分布式环境下定位问题的难点在于,各子应用、子服务之间有复杂的依赖关系,我们有时很难确定是哪个服务的哪个环节出现的问题。如果要通过日志来排查问题,就需要对每个子应用、子服务逐一进行排查,很难一步到位。

在分布式环境下如何快速定位问题?
有两种方式:

  1. 借助合理封装的异常信息
  2. 借助分布式链路跟踪

RPC框架打印的异常信息中,需要包含定位问题所需要的异常信息的,比如哪些异常引起的问题(如序列化问题或网络超时问题),是调用端还是服务端出现的异常,调用端与服务端的IP是多少,以及服务接口与服务分组是什么等等。

异常的示意图如下所示。

一款优秀的RPC框架要对异常进行详细地封装,还要对各类异常进行分类,每类异常都要有明确的异常标识码,并整理成一份简明的文档。适用房可以快速地通过异常标识码在文档中查阅,从而快速定位问题,找到原因,并且异常信息中药包含排查问题时所需要的重要信息,比如服务接口名、服务分组、调用端和服务端的IP,以及产生异常的原因。总之,要让适用房在复杂的分布式应用系统重,根据异常信息快速地定位到问题。

分布式链路跟踪可以让我们快速的知道整个服务调用的链路信息以及被调用的各个服务是否存在问题。例如服务A调用下游服务B,服务B又调用了B依赖的下游服务,如果服务A可以清楚的知道整个调用链路,并且能准确的直到调用链路中个服务的状态,那么就可以快速的定位问题。

分布式链路跟踪有Trace和Span两个关键概念:

  • Trace:代表整个链路,每次分布式都会产生一个Trace,每个Trace都有它的唯一标识,即TraceId,在分布式链路跟踪系统重,就是通过TraceId来区分每个Trace的。
  • Span:代表了整个链路的一段链路,也就说Trace是由多个Span组成的。在一个Trace下,每个Span也有唯一的标识SpanId,而Span之间是存在父子关系的。

Trace和Span的关系如下图所示。

RPC在整合分布式链路跟踪所需要做的核心事情有2件:

  1. 埋点:分布式链路跟踪系统要想获得一次分布式调用的完整链路信息,就必须对这次分布式调用进行数据采集,而采集这些数据的方法就是通过RPC框架对分布式链路跟踪进行埋点。RPC调用端在访问服务端时,在发送请求消息前会触发分布式跟踪埋点,在接收到服务端响应时,也会触发分布式跟踪埋点,并且在服务端也会有类似的埋点。这些埋点最终可以记录一个完整的Span,而这个链路的源头会记录一个完整的Trace,最终Trace信息也会上报给分布式链路跟踪系统。
  2. 传递:上游调用端将Trace信息与父Span信息传递给下游服务的服务端,由下游触发埋点,对这些信息进行处理,在分布式链路跟踪系统重,每个子Span都存有父Span的相关信息以及Trace的相关信息。

20 | 详解时钟轮在RPC中的应用

RPC中的定时任务应该如何处理?

  1. 针对有定时需求的请求,建立额外的线程,使用Thread.sleep方法来处理。
  2. 建立一个单独的线程,来持续扫描有定时需求的请求,判断是否到时间了。
  3. 使用时钟轮方法

在时钟轮机制中,有时间槽和时钟轮的概念,时间槽相当于时钟的刻度,时钟轮箱单与秒针与分针等跳动的一个周期,我们会将每个人物放到相应的时间槽位上。

时钟轮的运行机制和生活中的时钟是一样的,每隔固定的单位时间,就会从一个时间槽位调到下一个时间槽位,这就相当于我们的秒针跳动了一次;时钟轮可以分为多层,下一层时钟轮中每个槽位的单位时间是当前时间轮整个周期的时间,这就相当于1分钟等于60秒钟;当时钟轮将一个周期的所有槽位都跳动完后,就会从下一层时钟轮中取出一个槽位的任务,重新分不到当前的时钟轮中,当前时钟轮则从第0槽位开始重新跳动,这就相当于下一分钟的第1秒。

在RPC框架中哪些功能会用到时钟轮?

  1. 调用端请求超时处理,我们每发一次请求,都创建一个处理请求超时的定时任务放到时钟轮里,在高并发、高访问量的情况下,时钟轮每次只轮询一个时间槽位中的任务,这样会节省大量的CPU。
  2. 心跳检测,对于这种需要重复执行的定时任务,我们可以在定时任务执行逻辑的最后,重设这个任务的执行时间,把它重新丢回到时钟轮里面。

在使用时间轮时,我们需要注意两件事情:

  1. 时间槽位的单位时间越短,时间轮触发任务的时间就越精确。
  2. 时间轮的槽位越多,那么一个任务呗重复扫描的概率就越小,因为只有在多层时钟轮中的任务才会被重复扫描。

标签:Span,Trace,笔记,Day14,RPC,链路,分布式,时钟
From: https://www.cnblogs.com/wing011203/p/17081102.html

相关文章

  • 动态规划学习笔记
    动态规划1,什么是动态规划私以为,动态规划就是在递归思想的基础上,用空间换时间,将已经计算过的结果用存储起来,消除冗余计算,提高算法效率。2,什么时候使用动态规划抽象一点......
  • Linux初学笔记
    关于java全栈开发要掌握的技术JavaSEMySQL前端(HTML、CSS、JS)JavaWebSSM框架(可以开始找工作了)SpringboardVueSpringCloudGitLinux关于Linux需要掌握的技术消......
  • 树链剖分学习笔记
    怕到时候忘了,来写一篇笔记前置芝士:树的存储与遍历,\(dfs\)序,线段树。树链剖分的思想及能解决的问题:树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。具体......
  • Elasticsearch 从入门到实践 小册笔记
    MappingJSON中是可以嵌套对象的,保存对象类型可以用object类型,但实际上在ES中会将原JSON文档扁平化存储的。假如作者字段是一个对象,那么可以表示为:{"author":{......
  • [概率论与数理统计]笔记:5.3 置信区间
    5.3置信区间前言点估计无法提供其估计的误差,而区间估计可以。案例:“某人的月薪比2k多,比20k少”,这就是一个区间估计。区间估计的好坏有两个衡量指标:区间长度真实值......
  • esp32笔记[3]-mpu6050
    ██████╗███████╗██████╗██╗██╗███████╗██╔═══██╗██╔════╝██╔══██╗╚██╗██╔╝██╔═══......
  • HTTP笔记2--HTTP工作协议及原理
     TCP/IPTCP/IP我们一般称之为协议簇,就是TCP/IP协议簇中不仅仅只有TCP协议和IP协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是TCP/IP协议,其他......
  • 随堂笔记2-手写模拟spring底层原理
    userServce->无参构造方法->普通对象->依赖注入->初始化前(postStruct)->初始化(initializationBean)->初始化后(aop)->代理对象->bean大概流程:scan扫描注解,获取注......
  • PostgreSQL学习笔记-3.基础知识:CROSS、INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER、
    PostgreSQLJOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。在PostgreSQL中,JOIN有五种连接类型:CROSSJOIN:交叉连接INNERJOIN:内连接LEFTOU......
  • 《Vue.js 设计与实现》读书笔记 - 第6章、原始值的响应式方案 & 响应式总结
    第6章、原始值的响应式方案6.1引入ref的概念既然原始值无法使用Proxy我们就只能把原始值包裹起来。functionref(val){constwrapper={value:val,}......