02-Dapper

1.2:Dapper

1.2.1:设计要求

1、无处不在的部署: 任何服务都应该被监控到,任何服务出问题都要做到有据可查。2、持续的监控:做到7*24小时全天候监控,任何时候出了问题都要基于监控数据追踪问题根源。

1.2.2:设计目标

1、低消耗:dapper跟踪系统对服务的影响做到最小,在一些高并发的场合,即使很小的影响也会导致服务出现延迟,负载变高或者不可用,从而导致业务团队可能会停止对dapper使用。2、对应用透明应用程序对dapper无感知甚至不知道dapper系统存在,假如一个跟踪系统必须依赖于应用的开发者配合才能实现跟踪,也即需要在应用程序中植入跟踪代码,那么可能会因为代码产商bug或导致应用出问题。3、可伸缩性针对未来众多的服务和大规模业务集群,dapper系统应该能满足未来在性能的压力和功能的需求。

1.2.3:dapper介绍–请求链路

  图中展现的是一个有5台服务器相关的一个服务,包括:前端(A),两个中间层(B和C),以及两个后端(D和E)。当一个用户发起一个请求,首先到达前端(A),然后发送两个RPC到服务B和C,B收到请求后,马上响应。但是C需要和后端D和E交互后返回A,由A响应最初的客户请求。对于这样一个请求,分布式跟踪就是为服务器每一次发送和接收动作来收集跟踪标识符和时间戳。

在这里插入图片描述

1.2.4:Dapper介绍–数据采集方法

分布式追踪的设计方案主要可以分为两类: 黑盒法和标记法

黑盒法:无需`任何侵入性代码,它的优势在于无需修改代码,缺点在于记录不是很准确,且需要大量数据才能推导出服务间的关系。

**标记法:**需要为每个请求打标记,并通过一个全局标识符将请求途径的所有服务信息串联,复盘整个链路。标记法记录准确,但它的缺点很明显,需要将标记代码注入每个服务中。

在Google,几乎所有应用都使用相同的threading model、control flow和RPC system,因此可以将打标记的工作集中在少量公共库,同样能够达到对应用透明的效果。

1.2.5:Dapper介绍–跟踪树和span

Span代表系统中具有开始时间和执行时长请求跨度,Span之间通过嵌套或者顺序排列建立逻辑因果关系。在Dapper跟踪树结果中,树节点是整个架构的基本单元,是请求从前端到后端不同应用之间层级机构,而每一个节点又是对span引用,节点之间的连线表示span和fuqispan之间直接关系。图中说明span在一个大的跟踪过程中是什么样的,Dapper记录了span的名称,以及每个span ID和父ID,以重建在一个追踪过程中不同span之间的关系。如果一个span没有父ID称为root span,所有span都挂在一个特定的跟踪上,也公用一个trace id.

在这里插入图片描述

任何一个span可以包含来自不同的主机信息,这些也要记录下来,事实上每一个RPC span可以包含客户端和服务端两个过程注释,使得连接两个主机span会成为图中所说的span,由于client和server的时间戳来自不同的主机,还必须考虑到时间偏差,在分析工具就利用了时间偏差。即RPC客户端发送一个请求之后,服务器端才能接收到,对于响应也一样。这样server端就有一个开始和结束的时间戳,然后就可以计算出时间损耗。

在这里插入图片描述

1.2.6:Dapper介绍—traceid、spanid、parentid示意图

在这里插入图片描述

1.2.7:dapper介绍–植入点

Dapper可以实现对应用开发者近乎零侵入的成本,主要通过通用组件库实现;

当一个线程在处理跟踪请求链路的过程中,Dapper把这次跟踪的上下文在ThreadLocal进行存储,追踪上下文记录了SPanID和traceid。

几乎所有的Google的进程间通信是建立在一个用C++和Java开发的RPC框架。我们把跟踪植入该框架来定义RPC所有的span,spanid和traceid会从客户端发送到服务端。

1.2.8:dapper介绍–采样率

低损耗是Dapper的一个关键的设计目标,因为如果这个工具价值未被证实但又对性能有影响,就不会部署。

因此,除了把Dapper的收集对基本组件性能损耗限制尽可能小之外,我们还有进一步控制损耗的办法,那就是遇到大量请求只记录其中一小部分。

1.2.9:dapper介绍—跟踪收集的实现步骤

Dapper的跟踪记录和收集管道的过程分为三个阶段:

1、span数据写入本地日志文件
2、然后Dapper的守护进程和收集组件把这些数据从生产环境的主机读取
3、最终写到Dapper的数据仓库中一次跟踪被设计成Bigtable的一行,每一列相当于一个span。

在这里插入图片描述

1.2.10:Dapper介绍-跟踪的代价

在生产环境的跟踪数据处理中,dapper的守护进程从来没有超过0.3%的单核cpu使用率,而且只有很少量的内存使用,另外还限制了Dapper守护进程为内核scheduler最低优先级。

Dapper也是一个带宽资源的轻量级消费者,每一个span在我们仓库传输只占了426byte.

创建root span:204纳秒,创建一般span:176纳秒

建立一个annotation:40纳秒

写到本地磁盘

Dapper本地进程:《0.3%CPU,《0.01%网络

在这里插入图片描述

1.2.11:Dapper介绍—应用场景

性能分析:开发人员针对请求延迟的目标进行跟踪,并对容易优化的地方定位。

正确性分析:发现一些只读请求应该访问从库,但是却访问了主库类似的业务场景。

理解系统:全局优化系统,理解每个查询整体代价

测试新版本:发现新版本的bug和性能问题。

解决依赖问题:找到服务之间的依赖关系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/345803.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式之策略模式【行为型模式】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某…

代码随想录 Leetcode142. 环形链表 II

题目: 代码(首刷看解析 2024年1月13日): class Solution { public:ListNode *detectCycle(ListNode *head) {if (head nullptr) return nullptr;ListNode* fast head;ListNode* slow head;while (true) {if(fast->next nullptr || fa…

Binder 机制 javanative

一:Binder介绍 Binder是一套ipc通信方案 Binder框架定义了四个角色: Server ,Client,ServiceManager (以后简称SMgr)以及Binder驱动。其中Server ,Client,SMgr运行于用户空间&#…

Modbus协议

一.起源 Modbus由Modicon公司于1979年开发,是一种工业现场总线协议标准。Modbus通信协议具有多个变种,其中有支持串口,以太网多个版本,其中最著名的是Modbus RTU、Modbus ASCII和Modbus TCP三种。其中Modbus TCP是在施耐德收购Mo…

LeetCode讲解篇之39. 组合总和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 首先排序数组,然后开始选择数字,当选择数字num后,在去选择大于等于num的合法数字,计算过程中的数字和,直到选数字和等于target, 加入结果集,若数字和…

FreeRTOS 基础知识

这个基础知识也是非常重要的,那我们要学好 FreeRTOS,这些都是必不可少的。 那么就来看一下本节有哪些内容: 首先呢就是介绍一下什么是任务调度器。接着呢就是任务它拥有哪一些状态了。那这里的内容不多,但是呢都是非常重要的。 …

C语言——内存函数【memcpy,memmove,memset,memcmp】

📝前言: 在之前的文章C语言——字符函数和字符串函数(一)中我们学习过strcpy和strcat等用来实现字符串赋值和追加的函数,那么除了字符内容,其他的数据(例如整型)能否被复制或者移动呢…

maya显示方式及视图操作

原始图像: 按数字键2后(平滑效果): 按数字键3后(平滑效果,无原始外边框): 按数字键4后(仅显示边框): 方便选择后面的点、线及面 按数字键5后&…

java多线程(并发)夯实之路-进程与线程深入浅出

进程与线程介绍 进程 程序由指令和数据组成,程序工作时,就会将指令加载至CPU,数据加载至内存,进程就是用来加载指令,管理内存,管理IO的。 当程序运行,磁盘加载这个程序的代码至内存,…

应用在游戏机触摸屏中的触摸感应芯片

触屏游戏机的屏幕是由液晶屏和触控层组成的。触控层分为电容式触屏和电阻式触屏两种。电容式触屏是将悬空电极和屏幕玻璃上的电极组成静电场,当人体接近屏幕时,就会改变静电场分布,从而实现触摸的位置探测。而电阻式触屏则是利用玻璃上的两层电极之间通电形成一个电阻值,当手指…

【PHP AES加解密示例】从入门到精通,一篇文章让你掌握加密解密技术!

一、引言 随着互联网的普及,数据安全问题越来越受到人们的关注。在众多加密算法中,AES(Advanced Encryption Standard)因其高效、安全的特点被广泛应用。本文将通过PHP语言,为大家展示一个简单的AES加解密示例&#x…

计算机毕业设计-----SSH在线电影售票选座版网站平台系统

项目介绍 本项目为前后台项目,首先分为管理员和普通用户,游客。 游客可以进入首页,必须注册成为普通用户才能进行影片的购买。管理员和普通用户进行分权限登录,登录后进入不同页面。 普通用户登录后进入首页,首页有影…