分布式链路追踪-skywalking

news/2024/4/26 13:38:58/文章来源:https://blog.csdn.net/songmulin/article/details/129148861

一、分布式调用链

随着业务的高速发展,服务之间的调用关系愈加复杂

线上每一个请求会经过多个业务系统,并产生对各种缓存或者DB 的访问,业务流会经过很多个微服务的处理和传递。

问题:

• —次请求的流量从哪个服务而来?最终落到了哪个服务中去?

• 为什么这个请求这么慢?到底哪个环节出了问题?

• 这个操作需要依赖哪些东西?是数据库还是消息队列?

• Redis挂了,哪些业务受影响?

所以如何理清他们并跟踪它们之间的调用关系就显得比较关键

二、什么是调用链

这个时候我们希望有—套这样的系统:

• 故障定位:调用链路跟踪,一次请求的逻辑轨迹可以完整清晰的展示出来。

• 性能分析:调用链的各个环节分别添加调用耗时,可以分析出系统的性能瓶颈。

• 数据分析:可以得到请求的行为路径,汇总分析应用在很多业务场景

同时我们还希望它具备:

• 低消耗性

• 低侵入性

• 时效性

• 决策支持

• 数据可视化

三、调用链选型

zipkin:是Twitter 开源的调用链分析工具,目前基于 springcloud sleuth 得到了广泛的使用,使用部署简单。

Pinpoint:是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。

SkyWalking:是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端无代码侵入。目前已加入Apache化器。

CAT:是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监

调用链-基本原理和接入方式

调用链选型

数据存储支持对比

社区活跃度

性能分析

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms,使用的采样率为1,即100%组合起来,一共有12种。下面看下汇总表:

四、skywalking支持的rpc框架

  • Dubbo

  • Dubbox

  • Apache Dubbo

  • Motan

  • gRPC

  • Apache ServiceComb Java Chassis

  • SOFARPC

五、skywalking 总体架构

  • Metric的特点是,它是可累加的:他们具有原子性,每个都是一个逻辑计量单元,或者一个时间

段内的柱状图。 例如:队列的当前深度可以被定义为一个计量单元,在写入或读取时被更新统

计; 输入HTTP请求的数量可以被定义为一个计数器,用于简单累加; 请求的执行时间可以被定义为一个柱状图,在指定时间片上更新和统计汇总。

  • Tracing的最大特点就是,它在单次请求的范围内,处理信息。 任何的数据、元数据信息都被绑定到系统中的单个事务上。 例如:一次调用远程服务的RPC执行过程;一次实际的SQL查询语句;一次HTTP请求的业务性ID。

总结,Metric主要用来进行数据的统计,比如HTTP请求数的计算。Tracing主要包含了某一次请求的链路数据。

1.探针(agent)负责进行数据的收集,包含了Tracing和Metrics的数据,agent会被安装到服务所在的服务器上,以方便数据的获取。

2. 可观测性分析平台OAP(Observability Analysis Platform),接收探针发送的数据,并在内存中使用分析引擎(Analysis Core)进行数据的整合运算,然后将数据存储到对应的存储介质上,比如Elasticsearch、MySQL数据库、H2数据库等。同时OAP还使用查询引擎(Query Core)提供HTTP查询接口。

3. Skywalking提供单独的UI进行数据的查看,此时UI会调用OAP提供的接口,获取对应的数据然后进行展示

六、告警功能

Skywalking每隔一段时间根据收集到的链路追踪的数据和配置的告警规则(如服务响应时间、服务响应

时间百分比)等,判断如果达到阈值则发送相应的告警信息。发送告警信息是通过调用webhook接口完

成,具体的webhook接口可以使用者自行定义,从而开发者可以在指定的webhook接口中编写各种告

警方式,比如邮件、短信等。告警的信息也可以在RocketBot中查看到。

skywalking默认的告警规则

1. 最近3分钟内服务的平均响应时间超过1秒

2. 最近2分钟服务成功率低于80%

3. 最近3分钟90%服务响应时间超过1秒

4. 最近2分钟内服务实例的平均响应时间超过1秒

七、java agent

java agent本质上可以理解为一个插件,该插件就是一个精心提供的jar包,这个jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Language Instrumentation Services Agent)完成对目标代码的修改。

java agent技术的主要功能如下:

1、可以在加载java文件之前做拦截把字节码做修改

2、可以在运行期将已经加载的类的字节码做变更

3、还有其他的一些小众的功能

4、获取所有已经被加载过的类

5、获取所有已经被初始化过了的类

6、获取某个对象的大小

7、将某个jar加入到bootstrapclasspath里作为高优先级被bootstrapClassloader加载

8、将某个jar加入到classpath里供AppClassloard去加载

9、设置某些native方法的前缀,主要在查找native方法的时候做规则匹配

通过java agent技术进行类的字节码修改最主要使用的就是Java Instrumentation API。

java agent 启动时修改

启动时修改主要是在jvm启动时,执行native函数的Agent_OnLoad方法,在方法执行时,执行如下步骤:

1、创建InstrumentationImpl对象

2、监听ClassFileLoadHook事件

3、调用InstrumentationImpl的loadClassAndCallPremain方法,在这个方法里会去调用javaagent里MANIFEST.MF里指定的Premain-Class类的premain方法

java agent 运行时修改

运行时修改主要是通过jvm的attach机制来请求目标jvm加载对应的agent,执行native函数的Agent_OnAttach方法,在方法执行时,执行如下步骤:

1、创建InstrumentationImpl对象

2、监听ClassFileLoadHook事件

3、调用InstrumentationImpl的loadClassAndCallAgentmain方法,在这个方法里会去调用javaagent里MANIFEST.MF里指定的Agentmain-Class类的agentmain方法

如何使用java agent?

使用 java agent 需要几个步骤:

1. 定义一个 MANIFEST.MF 文件,必须包含 Premain-Class 选项,通常也会加入Can-Redefine-Classes 和 Can-Retransform-Classes 选项。

2. 创建一个Premain-Class 指定的类,类中包含 premain 方法,方法逻辑由用户自己确定。

3. 将 premain 的类和 MANIFEST.MF 文件打成 jar 包。

4. 使用参数 -javaagent: jar包路径 启动要代理的方法。

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

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

相关文章

在CentOS-7.9配置vsftpd服务

文章目录一 vsftpd简介二 环境准备三 服务部署3.1 安装软件3.2 编写配置文件3.3 用户授权3.4 启动服务3.5 文件传输测试3.5.1 Windows到Linux3.5.2 filezilla3.5.3 从Linux到Linux一 vsftpd简介 FTP是 File Transfer Protocol 文件传输协议的简称。 VSFTP是 Very Security FTP…

ESP32-C3 BLE5.0 扩展蓝牙名称长度的流程

蓝牙设备名称长度受限于蓝牙广播数据包的长度,如果广播数据包的长度不能包含完整的设备名称,则只显示短名称,其余不能容纳的部分将被截断。ESP32-C3 支持 BLE5.0,最大广播包长支持 1650 字节,可通过 esp_ble_gap_confi…

PTA L1-054 福到了(详解)

前言:内容包括:题目,代码实现,大致思路,代码解读 题目: “福”字倒着贴,寓意“福到”。不论到底算不算民俗,本题且请你编写程序,把各种汉字倒过来输出。这里要处理的每…

【python】argparse 模块的使用、Pycharm中使用argparse

目录1、简介2、使用步骤1)导入argparse模块,并创建解释器2)添加所需参数3)解析参数3、使用 pycharm 传递参数给 argparse1、简介 argparse 模块是 Python 标准库中提供的一个命令行解析模块,它可以让使用者以类似 Uni…

编程题(二)

一、N皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n 4 输出:2 解释:如…

C#使用MQTT通信 .Net实现MQTT通信 java使用MQTT通信 java实现MQTT通信

MQTT是一种轻量级、基于发布/订阅模式的通信协议,通常用于物联网设备间的通信。MQTT协议采用简单的二进制消息格式,能够在不占用过多网络带宽的情况下进行高效的通信。以下是使用MQTT进行通信的一些基本概念:BrokerMQTT通信中的中间件&#x…

一文速学数模-集成预测模型Boost(提升方法)原理以及框架+模型速览

目录 前言 一、Boosting算法起源 强学习 弱学习 二、Boosting算法核心思想 举例案例 类推 三、Boosting算法框架 四、Boosting算法种类 AdaBoost GBDT XGBoost LighGBM 1.数据划分 2.直方图梯度提升决策树(Histogram-based Gradient Boosting Decisio…

一、线程的基本概念

文章目录基础概念线程与进程什么是进程?什么是线程?进程和线程的区别:多线程什么是多线程?多线程的局限性串行、并行、并发同步异步、阻塞非阻塞线程的创建1、继承Thread类,重写run方法2、实现Runnable接口&#xff0c…

软件质量测试中的健壮性测试是什么?一文和你说

当大多数人开车时,他们不会担心刹车失灵。当他们的孩子得到一个新玩具时,他们也不担心因故障受伤。事实上,大多数人在日常生活中根本不担心系统故障。 这是因为软件开发人员或质量控制工程师已经解决了质量问题。如果目标是交付高质量、可靠…

Win11安装软件报缺失.NET的解决方法

1.问题描述:安装软件时提示这个 2.解决方法: WinR 打开运行界面,输入control回车,打开控制面板 点击打开程序和功能 选择 启用或关闭Windows功能 --》勾选.NET Framework3.5...这一项,点击确定,如果电脑上…

学习Flask之五、数据库

学习Flask之五、数据库 数据库有组织的存贮应用数据。根据需要应用发布查询追踪特定部分。网络应用最常用的数据库是基于关系模式的,也称为SQL数据库,引用结构化查询语句。但是近年来,面向文档和键值的数据库,非正式的统称为NoSQ…

一文教你玩转 Apache Doris 分区分桶新功能|新版本揭秘

数据分片(Sharding)是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制,而分布式数据库则通过数据划分的规则,将数据打散分布至不同的机器或节点上&#xf…

全局组件和局部组件

全局组件第一种定义方法:A、创建自己的组件:Loading.vueB、在main.js文件中引入组件并注册import Vue from vue import App from ./App.vue import * as filters from ./filterimport quanjuzujian from ./components/quanjuzujian.vueVue.component(qua…

PowerJob容器的今生,容器是如何部署到Worker上,并正常运行的

这仅仅是一篇PowerJob源码分析的文章,但是也有一些java基础知识,在实践中学习效果更好,感兴趣就留下来交流一下吧。 上回书说到,这个powerjob容器是如何生成模板,如何上传到服务器上去,本回主要总结的是&am…

【踩坑指南】Stable Diffusion 服务器端部署笔记

文章目录下载github文件配置环境ckpt文件权重下载生成图像NSFW检查(瑟图过滤)下载github文件 https://github.com/CompVis/stable-diffusion 这个网址,下载压缩包解压,也可以用git clone下载 配置环境 这一步坑最多&#xff0c…

day32 多线程(上)

文章目录相关概念codeThreadTest01ThreadTest02 编写一个类,直接继承java.lang.Thread,重写run方法ThreadTest03 实现线程的第二种方法ThreadTest04 采用匿名内部类的方式ThreadTest05 获取线程名字ThreadTest06 sleep方法sleep面试题ThreadTest08 终止线…

游戏专用蓝牙耳机哪个牌子好?最好的游戏蓝牙耳机品牌排行

近年来,随着越来越多手机取消3.5mm耳机孔,真无线耳机也逐渐流行起来,随着国内的手机品牌越来越多,真无线耳机的品类逐渐增多,面向游戏用户的游戏模式也出现了,下面我们来看看以下几款游戏专用的蓝牙耳机。 …

10 种主数据模型设计示例分享,推荐收藏

主数据模型是主数据管理的基础,一个完整的、可扩展的、相对稳定的主数据模型对于主数据管理的成功起着重要的作用。规划、创建主数据模型的过程,是梳理主数据管理体系的过程,目的是建立一个良好的资源目录结构,划分合理的资源粒度…

Leetcode力扣秋招刷题路-0088

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 …

我说我为什么抽不到SSR,原来是这段代码在作祟...

本文是龚国玮所写,熊哥有所新增修改删减,原文见文末。 我说我为什么抽不到SSR,原来是加权随机算法在作祟 阅读本文需要做好心理准备,建议带着深究到底的决心和毅力进行学习! 灵魂拷问 为什么有 50% 的几率获得金币&a…