微服务全链路追踪选型:Zipkin、Pinpoint、SkyWalking、CAT

news2024/10/1 9:49:50

        基于微服务架构,由于服务拆分粒度比较细,并且服务复用范围增大,不太可能再通过人工登记的方式进行接口调用情况的管理,因此对于每个请求的调用情况追踪将成为不可忽视的问题。追踪请求的调用情况,主要有几个作用:

  • 当请求发生失败时,可以快速排查到在哪个微服务出现问题,并获取到失败的信息
  • 当请求响应时间超过预期时,可以分析调用链路上的每个服务处理时长,从而找到性能瓶颈并进行优化
  • 完整呈现一笔交易的处理过程,便于分析和优化;同时也有利于评估某个微服务升级时的影响范围

调用链定义

        在系统完成一次业务调用的过程中,把服务之间的调用信息(时间、接口、层次、结果)打点到日志中,然后将所有的打点数据连接为一个树状链条就产生了一个调用链。跟踪系统把过程中产生的日志信息进行分析处理,将业务端到端的执行完整的调用过程进行还原,根据不同维度进行统计分析;从而标识出有异常的服务调用,能够快速分析定界到出异常的服务;同时可根据数据统计分析系统性能瓶颈。

调用链追踪原理

        微服务的调用链追踪原理其实也满简单的,跟人工追踪的思考方向基本一样,就是通过服务所记录的日志信息进行匹配和分析,从而找到一个请求的所有相关调用记录而形成调用链条。不过为了能把不同的调用日志关联起来,需要有一些特殊的信息辅助分析:

  • 调用链的唯一标识:一个请求的所有调用日志信息都要记录一个相同的标识,这样才能把记录关联起来,这个唯一标识可以称为追踪标识(trace_id),由第一个发起的请求生成,并传递到后续的每次调用进行记录
  • 每次调用的唯一标识:服务端在接收到请求后,要生成一个唯一标识标记该次调用,一方面通过该标识可以在调用链中区分不同的调用(有可能同一个接口被调用多次的情况),另外一方面该标识也要传递给本次服务过程中需要执行的子调用(下一个服务),并作为子调用信息的父调用标识,从而形成直接相邻调用之间的上下级关联关系。我们可以把每次调用称为一个时间跨度(Span),调用的唯一标识称为时间跨度标识(span_id),由服务端生成,并传递到下一个调用使用
  • 时间信息:服务端必须在接收到请求时记录开始时间(start timestamp),并在结束调用时记录结束时间(finish timestamp),这样才能对不同的调用顺序进行排序,同时分析当次服务调用的耗时。

        有了上面的几个特殊的信息,我们就可以把一次请求的整个调用链条关联起来:通过trace_id找到所有调用日志,通过span_id和每次调用的父span_id形成调用关系,通过timestamp形成调用的先后顺序,从而形成一个有向无环图(DAG图),这就是我们所需要追踪的调用链。

 选型对比

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

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

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

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

对比项ZipkinPinpointSkyWalkingCAT
实现方式拦截请求,发送(HTTP,mq)数据至zipkin服务java探针,字节码增强java探针,字节码增强代码埋点(拦截器,注解,过滤器等)
接入方式基于linkerd或者sleuth方式,引入配置即可javaagent字节码javaagent字节码代码侵入
agent到collector的协议http,MQthriftgRPChttp/tcp
OpenTracing支持不支持支持不支持
颗粒度接口级方法级方法级代码级
全局调用统计不支持支持支持支持
traceid查询支持不支持支持不支持
报警不支持支持支持支持
JVM监控不支持不支持支持支持
UI功能****************
数据存储ES/mysql/Cassandra/内存HbaseES/H2mysql/hdfs

社区活跃度star

8.4k5.9k3.3k4.9k

PinPoint和skyWalking支持的插件对比

类别PinpointSkyWalking
web容器Tomcat6/7/8,Resin,Jetty,JBoss,WebsphereTomcat7/8/9,Resin,Jetty
JDBCOracle,mysqlOracle,mysql,Sharding-JDBC
消息中间件ActiveMQ, RabbitMQRocketMQ 4.x,Kafka
日志log4j, Logbacklog4j,log4j2, Logback
HTTP库Apache HTTP Client, GoogleHttpClient, OkHttpClientApache HTTP Client, OkHttpClient,Feign
Spring体系spring,springbootspring,springboot,eureka,hystrix
RPC框架Dubbo,ThriftDubbo,Motan,gRPC,ServiceComb
NOSQLMemcached, Redis, CASSANDRAMemcached, Redis

性能对比

模拟了三种并发用户:500,750,1000。使用jmeter测试,每个线程发送30个请求,设置思考时间为10ms。使用的采样率为1,即100%,这边与生产可能有差别。pinpoint默认的采样率为20,即50%,通过设置agent的配置文件改为100%。zipkin默认也是1。组合起来,一共有12种。下面看下汇总表:

从上表可以看出,在三种链路监控组件中,skywalking的探针对吞吐量的影响最小,zipkin的吞吐量居中。pinpoint的探针对吞吐量的影响较为明显,在500并发用户时,测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式一致性Hash算法原理及实现【负载均衡】

文章目录 一致性Hash原理提高容错性和和扩展性一致性Hash实现思路代码 一致性Hash原理 简单来说,一致性Hash算法将整个哈希值空间组织成一个虚拟的圆环, 如假设某哈希函数 H 的值空间为 0 ~ 2^32-1(即哈希值是一个32位无符号整形)…

什么是POTDR?POTDR在光缆线路维护中有哪些应用

1 引言 OTDR(Optical Time Domain Reflectometer,光时域反射仪)是光缆线路工程及维护中的常用仪表,是利用光信号在光纤中传输时的瑞利散射和菲涅尔反射,通过反射曲线来了解光纤沿长度的损耗分布情况,可测量…

基于C#编程建立泛型Matrix数据类型及对应处理方法

一、简介 上一篇文档中描述了如何写一个Vector<T>类&#xff0c;本次在上一篇文档基础上&#xff0c;撰写本文&#xff0c;介绍如何书写一个泛型Matrix&#xff0c;可以应用于int、double、float等C#数值型的matrix。 本文所描述的Matrix<T>是一个泛型&#xff0c;…

一个人在家怎么赚钱?普通人如何通过网络实现在家就能赚钱

近年来&#xff0c;随着互联网的飞速发展&#xff0c;嗅觉敏锐的人只要使用互联网就可以快乐地赚钱。一般来说&#xff0c;网上赚钱的投资较少&#xff0c;有时有一台能上网的电脑或手机就够了&#xff0c;所以大家有时称其为“无成本或低成本网赚”。今天就分享一个人在家如何…

23种设计模式第一章:单例模式

这里写自定义目录标题 一 单例模式1 静态常量饿汉式2 静态代码块饿汉式3 线程不安全懒汉式4 线程安全懒汉式线程安全&#xff0c;同步方法线程安全&#xff0c;同步代码块 5 doubleCheck&#xff08;双重检查&#xff0c;推荐使用&#xff09;6 静态内部类7 枚举 一 单例模式 …

K8s 安全是云安全的未来

导语 到 2025 年&#xff0c;保护 Kubernetes (K8s) 将被认为是云安全最重要的方面。 在最成功的组织中&#xff0c;CTO 和 CISO 已经意识到 Kubernetes 安全的重要性。 但是&#xff0c;虽然 Kubernetes 已经占 CTO 云支出的很大一部分&#xff0c;但 CISO 仍然有所落后。 大…

基于web的课程重难点掌握情况分析系统

1&#xff0e;系统登录&#xff1a;系统登录是用户访问系统的路口&#xff0c;设计了系统登录界面&#xff0c;包括用户名、密码和验证码&#xff0c;然后对登录进来的用户判断身份信息&#xff0c;判断是管理员用户还是普通用户。 2&#xff0e;系统用户管理&#xff1a;不管是…

19.考虑柔性负荷的综合能源系统日前优化调度模型

说明书 MATLAB代码&#xff1a;考虑柔性负荷的综合能源系统日前优化调度模型 关键词&#xff1a;柔性负荷 需求响应 综合需求响应 日前优化调度 综合能源系统 参考文档&#xff1a;《考虑用户侧柔性负荷的社区综合能源系统日前优化调度》参考柔性负荷和基础模型部分&#xf…

脑电信号特征提取方法与应用

前言 脑电图(EEG)信号在理解与脑功能和脑相关疾病的电活动方面发挥着重要作用。典型的脑电信号分析流程如下&#xff1a;(1)数据采集&#xff1b;(2)数据预处理&#xff1b;(3)特征提取&#xff1b;(4)特征选择&#xff1b;(5)模型训练与分类&#xff1b;(6)性能评估。当信号分…

SpringClouid学习笔记(正在更新中...)

目录 SpringCloud1、微服务1.1、定义1.2、特性单体应用微服务应用 1.3、微服务架构演变&#xff08;RPC&#xff09;1.4、微服务解决方案 2、SpringCloud2.1、什么是SpringCloud官方定义DemoSpringCloud版本和SpringBoot版本选择 3、环境搭建环境说明构建方式开始构建 4、服务注…

全注解下的SpringIoc 续3-属性文件的使用

在Spring Boot中使用属性文件&#xff0c;可以采用默认的application.properties文件&#xff0c;也可以使用自定义的配置文件&#xff0c;下面让我们一起来看看这两个的使用。 使用默认的application.properties文件 这个配置文件是Spring Boot默认会加载的&#xff0c;所以…

自动抓取QQ好友列表?Windows UIA教你轻松实现

目录&#xff1a;导读 引言 选择Windows UIA框架进行自动化测试的原因 查找窗口 读取QQ软件的好友列表 结语 引言 每个使用QQ的人都有自己的好友列表&#xff0c;但是如果你想要查看所有好友信息&#xff0c;手动一个个点击会非常浪费时间。那么有没有什么快速获取好友列…

【openGauss实战12】表空间管理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【总线】IIC学习笔记

【总线】IIC学习笔记 参考链接IIC总线介绍IIC总线时序1.空闲信号2. 启动信号与停止信号3.数据的有效性4.应答信号5.七位地址传输 IIC读写过程&#xff08;AT24C02举例&#xff09;IIC读过程IIC写过程 正点原子IIC驱动问题1、IIC停止信号问题2、IIC-AT24C02的器件地址发送的疑惑…

OJ搭建配置 功能速查手册

服务器配置 腾讯云 2H4G 5M 60GB 轻量应用服务器 承载大约 200~400人使用&#xff0c;经过压力测试&#xff0c;评测并发速度可满足130人左右的在线比赛。 系统镜像选 Ubuntu 22.04 LTS。 用户管理 一、批量导入&#xff08;从方便管理角度建议以 学生姓名 作为 用户名 &am…

网络安全之黄金票据,白银票据

前言&#xff1a;今天来给大家讲讲黄金票据和白银票据Kerberos认证#金票Golden ticket# 原理#伪造金票的场景和所需条件#利用方式#银票SILVER TICKET# 原理#伪造银票所需条件#金票和银票的区别# 获取的权限不同#认证流程不同#加密方式不同# 前言&#xff1a;今天来给大家讲讲黄…

Unity 3D 学习笔记(1)

文章目录 1.Unity 3D 概述2.Unity的安装过程3.Unity 3D 的项目管理4.Unity 3D 中的场景5.Unity 3D 的界面组成 1.Unity 3D 概述 Unity 3D简介&#xff1a;Unity 3D是虚拟现实行业中使用率较高的一款开发引擎&#xff0c;由Unity Technology公司开发。通过Unity&#xff0c;开发…

手动实现 Spring 底层机制【初始化 IOC容器+依赖注入+BeanPostProcessor 机制+AOP】

目录 手动实现 Spring 底层机制【初始化 IOC容器依赖注入BeanPostProcessor 机制AOP】 前面我们实际上已经用代码简单实现了 代码演示使用框架 创建一个maven项目 创建UserAction类 创建UserDao类 创建UserService类 创建beans.xml 说明 创建AppMain类 运行效果 如图…

《汇编语言》- 读书笔记 - 第2章-寄存器

《汇编语言》- 读书笔记 - 第2章-寄存器 2.0 8086CPU 寄存器段地址:偏移地址 2.1 通用寄存器2.2 字在寄存器中的存储2.3 几条汇编指令表2.1汇编指令举例表2.2 程序段中指令的执行情况之一问题 2.1表2.3 程序段中指令的执行情况之二问题 2.2 2.4 物理地址2.5 16位结构的CPU2.6 8…

数据埋点1

文章目录 1 什么是数据埋点2 为什么需要数据埋点3 数据埋点能采集哪些用户数据4 数据埋点的分类及方式5 主流的数据上报技术5.1 客户端上报5.2 服务端获取 1 什么是数据埋点 互联网的海量数据是通过数据埋点技术采集用户行为数据而产生的&#xff0c;用户行为数据采集及上报流…