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和性能问题。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM+JSP的订餐管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

WordPress企业模板

首页大图wordpress外贸企业模板 橙色的wordpress企业模板 演示 https://www.zhanyes.com/waimao/6250.html

如何领取腾讯云免费服务器?腾讯云服务器免费领取教程

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM,轻量配置可选2核2G3M、2核8G7M和4核8G12M,CVM云服务器可选2核2G3M和2核4G3M配置,腾讯云百科txybk.com分享2024年最新腾讯云免费服务器…

SAP SQVI制作报表及SE93创建事务代码

在平时的项目中,财务想查询所有的凭证明细,SAP的查询凭证FB03不能满足需求,所以用SQVI制作一个简易的查询报表。 1、打开SQVI,填写自开发报表的名称“ZFB03”,点击“创建”,输入自开发报表的名称“凭证明细…

79LXX 三端负电源电压调节器,具有一系列固定电压输出,适用于小于100mA电源供给的场合

79LXX系列三端负电源电压调节器是单片双极型线性集成电路,采用TO92、SOT89-3的封装形式封装,有一系列固定的电压输出,适用于小于100mA电源供给的场合。 主要特点: 最大输出电流为100mA 固定输出电压分别为-5V、-6V、-8V、-9V、-1…

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测

回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SO-GRU蛇群算法优化门控循环单元的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SO-GRU蛇群算法优化门控循环单元的数…

7.11、Kali Linux中文版虚拟机安装运行教程

目录 一、资源下载准备工作 二、安装教程 三、kali linux换源 四、apt-get update 报错 一、资源下载准备工作 linux 中文版镜像历史版本下载:http://old.kali.org/kali-images/ 大家可以自行选择版本下载,本人下载的是2021版本 二、安装教程 打开vmvare wokst…

Canopen学习笔记——sync同步报文增加数据域(同步计数器)

1.Canfestival同步报文sync的设置 在OD表中的配置如下: 如果0x1006索引的同步报文循环周期时间设置为0则禁用同步报文,这里要注意的就是,上面第一张图也提到了,时间单位是us。第二张图,我的0x1006就设置为0xF4240,也就…

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…

HarmonyOS开发FA应用模型下多个页面的声明方式

目录 方式1 方式2 HarmonyOS配套的IDE是DevEco Studio,目前的版本是3.1。官网可以直接下载 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 ​ 方式1 ​在DevEco Studio如果是在pages目录通过右键New->ArkTS File生成的文件,需要注意&…

PHP如何拆分中文名字(包括少数民族名字)

/*** param string|null $name* return array|null*/ function splitName($name) {if (empty($name) || empty(trim($name))) {return null;}//该正则是用来提取$name参数里面的中文字符的。preg_match_all(/[\x{4e00}-\x{9fff}]/u, $name, $matchers);$matchersCount isset($…

互联网医院系统|北京线上问诊|线上问诊系统功能解析

随着科技的不断发展,线上问诊系统作为一种快速、便捷的医疗服务方式在近年来越来越受欢迎。本文将重点介绍线上问诊系统的开发功能及其优势,帮助读者更好地了解这一医疗服务方式的价值和好处。 一、线上问诊系统的开发功能: 1、患者注册与登…

Ovtio不同版本下载

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…

企业如何做到安全又极速的分发传输大文件

在当代企业运营中,文件的传输和分发是至关重要的任务。然而,随着文件体积的增大和信息敏感性的凸显,企业需要找到一种既安全又能够高效传输大文件的方法。本文将深入探讨如何在企业环境中实现安全又高效的大文件传输。 一、分发大文件时需要注…

2023 我的编程之旅——路人贾‘ω‘

哈喽!大家好,我是路人贾😁~今天不读论文也不讲算法,来聊点有意思的! 这是我第100篇博文,我翻了几遍草稿箱的库存,正纠结选哪篇时,一抬头看见了这个活动,眼前瞬间一亮——…

【面试突击】分布式锁、幂等性问题实战

🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

【数据结构之树和二叉树】

数据结构学习笔记---007 数据结构之树和二叉树概念篇1、树的概念和结构1.1、树的相关概念1.2、树的存储结构 2、二叉树概念及结构2.1、二叉树概念2.2、满二叉树2.3、完全二叉树2.4、满二叉树或完全二叉树的存储形式 3、堆的概念及结构3.1、堆的性质3.2、堆的意义 4、二叉树的存…

R语言【paleobioDB】——pbdb_map():根据化石记录绘制地图

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_map (data, col.int"white" ,p…

宝塔面板安装MySQL8数据库

第一步:搜索mysql 第二步: 点击安装 我这里选择安装8版本 第三步:给宝塔配置mysql防火墙 第四步:修改数据库密码 第五步:想要使用navicat连接 需要修改root的权限 (1)使用secureCRT先登录mysql (2) 输入u…

最最常用的MySQL Shell运维脚本,赶紧收藏吧!

作为运维人员或者开发人员,日常的mysql运维工作我们是一定要会的,我收集了一些常用shell脚本,仅供参考! 1、备份数据库: #!/bin/bashBACKUP_DIR"backup_dir" MYSQL_USER"mysql_user" MYSQL_PASS…