分布式调用链对比(pinpoint、skywalking、jaeger、zipkin等)

2024-01-02 14:52

本文主要是介绍分布式调用链对比(pinpoint、skywalking、jaeger、zipkin等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. APM简述

    APM (Application Performance Management)是对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。

2.APM主要解决的问题:

  1. 集中式度量系统
  2. 分布式全链接追踪系统
  3. 集中式日志系统(elk)

......

3.分布式调用追踪(APM)一览

  1. Google的Drapper--未开源,最早的APM
  2. 阿里-鹰眼--未开源
  3. 大众点评——CAT--跨服务的跟踪功能与点评内部的RPC框架集成,这部分未开源且项目在2014.1已经停止维护。服务粒度的监控,通过代码埋点的方式来实现监控,比如: 拦截器,注解,过滤器等,对代码的侵入性较大,集成成本较高。
  4. Hydra-京东: 与dubbo框架集成,对于服务级别的跟踪统计,现有业务可以无缝接入。对于细粒度的兴趣点,需要业务人员手动添加。开源项目已于2013年6月停止维护
  5. PinPoint-naver,字节码探针技术,代码无侵入,体系完善不易修改,支持java,技术栈支持dubbo。其他语言社区支援中
  6. zipkin——java方便集成于springcloud,社区支持的插件也包括dubbo、rabbit、mysql、httpclient等(https://github.com/openzipkin/brave/tree/master/instrumentation),同时支持php、go、js等语言客户端,界面功能较为简单,本身无告警功能,可能需要二次开发。代码入侵度小。
  7. uber-jaeger, Jaeger支持java/c++/go/node/php,在界面上较为完善(对比zipkin),但是也无告警功能。代码入侵度小。dubbo目前无插件支持,可二次开发。
  8. skywalking ——华为,类似于PinPoint,目前还在apache孵化中,网上吞吐量对比中强于pinpoint,实际未验证。本身支持dubbo

4.方案对比

pinpoint

zipkin

jaeger

skywalking

OpenTracing兼容

客户端支持语言

java、php

java,c#,go,php等

java,c#,go,php等

Java, .NET Core, NodeJS and PHP

存储

hbase

ES,mysql,Cassandra,内存

ES,kafka,Cassandra,内存

ES,H2,mysql,TIDB,sharding sphere

传输协议支持

thrift

http、MQ

udp/http

gRPC

ui丰富程度

实现方式-代码侵入性

字节码注入,无侵入

拦截请求,侵入

拦截请求,侵入

字节码注入,无侵入

扩展性

trace查询

不支持

支持

支持

支持

告警支持

支持

不支持

不支持

支持

jvm监控

支持

不支持

不支持

支持

性能损失

5.各方案参考链接

    1.pinpoint-naver

    github: GitHub - pinpoint-apm/pinpoint: APM, (Application Performance Management) tool for large-scale distributed systems.

    docker快速体验:GitHub - pinpoint-apm/pinpoint-docker: Official Dockerized components of the Pinpoint

    2.zipkin-推特:

    github: GitHub - openzipkin/zipkin: Zipkin is a distributed tracing system

    页面详解:sleuth+zipkin ui界面详解(二)_sharedCode源码交流-CSDN博客_zipkin 界面

    zipkin于php对接:https://www.colabug.com/1872361.html

    3.jaeger-uber

    部分参考资料:

    jaeger简介,部署,入门实践 Uber jaeger--一个基于Go的分布式追踪系统 - 北极之北的个人空间 - OSCHINA - 中文开源技术交流社区

    jaeger——java实现 https://my.oschina.net/u/1789379/blog/1551421

    Uber分布式追踪系统Jaeger使用介绍和案例(PHP Hprose Go 跨语言调用)

    https://segmentfault.com/a/1190000011636957

    全链路监控Jaeger搭建实战 全链路监控Jaeger搭建实战 - 简书

    jaeger官网快速开始 Getting started — Jaeger documentation

    4.skywalking(推荐)

    github: GitHub - apache/skywalking: APM, Application Performance Monitoring System

    SkyWalking 分布式追踪系统 SkyWalking 分布式追踪系统 - 简书

    Apache SkyWalking 5.0中文版图文详解使用手册

    http://skywalking.apache.org/zh/blog/2018-12-18-Apache-SkyWalking-5-0-UserGuide.html

    skywalking学习笔记 skywalking学习笔记 - 掘金

6.参考资料

  • 分布式链路追踪技术对比 分布式链路追踪技术对比_moonpure的专栏-CSDN博客_链路追踪对比
  • 回到网易后开源 APM 技术选型与实战 回到网易后开源APM技术选型与实战-InfoQ
  • zipkin vs jaeger 滑动验证页面
  • 调用链选型之Zipkin,Pinpoint,SkyWalking,CAT 调用链选型之Zipkin,Pinpoint,SkyWalking,CAT - 简书

这篇关于分布式调用链对比(pinpoint、skywalking、jaeger、zipkin等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/562780

相关文章

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

基于MongoDB实现文件的分布式存储

《基于MongoDB实现文件的分布式存储》分布式文件存储的方案有很多,今天分享一个基于mongodb数据库来实现文件的存储,mongodb支持分布式部署,以此来实现文件的分布式存储,需要的朋友可以参考... 目录一、引言二、GridFS 原理剖析三、Spring Boot 集成 GridFS3.1 添加依赖

C#通过进程调用外部应用的实现示例

《C#通过进程调用外部应用的实现示例》本文主要介绍了C#通过进程调用外部应用的实现示例,以WINFORM应用程序为例,在C#应用程序中调用PYTHON程序,具有一定的参考价值,感兴趣的可以了解一下... 目录窗口程序类进程信息类 系统设置类 以WINFORM应用程序为例,在C#应用程序中调用python程序

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细