如果把4个「链路追踪」组件放到一个群里,他们会聊些什么?

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
简介: 如果把4个「链路追踪」组件放到一个群里,他们会聊些什么?

如果把4个「链路追踪」组件放到一个群里,他们会聊些什么?

聊天记录第二弹来袭了,想看第一弹的在这里:如果把四个消息队列都拉到一个群里,他们会聊些什么?

本篇我会从 7 大分布式链路追踪组件的历史背景、技术选型对比、使用经验分享等方面来进行总结分享,相信会给大家带来一些启发。

分布式链路追踪概念:运行时通过某种方式记录下各服务之间的调用过程,再通过可视化 UI 方式帮助相关人员快速定位到故障点。现如今,分布式链路追踪已经成为微服务架构性能监控的底层基础设施,没有它,性能分析人员就像盲人摸象,根本无法彻底了解服务间链路通信的全过程。

关于链路追踪的原理可以看我之前写的一篇:在医院五天,我把「链路追踪」整明白了

发展史

CAL 和 CAT 傻傻分不清

eBay-CAL:咦,这是什么群啊?

点评-CAT:大佬好啊,我是你的小迷弟。

eBay-CAL:你好你好,你的名字和我的怎么这么像?我差点以为我和你是同一个。。

Google-Dapper:CAL 老哥,你不知道吧,CAT 就是基于你进行改造的,嘿嘿~

点评-CAT:老大,因为当时您那边没有开源,我基于您的设计理念,将 CAL 在大众点评发扬光大了,现在也开源了~

涉及的故事

eBay 2002 年,业务快速增长,流量猛增,非常需要一款链路监控工具,CAL 应运而生,被称作 eBay 的三大神器之一。CAL 全称:Centralized Application Logging

老吴从 eBay 跳槽到大众点评后,主导研发了 CAT,2011 年诞生。所以 CAT 和 CAL 有很多相似的地方。CAT 在国内很早就开源了,采用 Java 语言编写,社区也比较活跃。CAT 全称:Centralized Application Tacking。

Dapper 的继承者

mark

Twitter-ZipKin:Dapper Big Old!我深刻学习了您发表的 Dapper 论文,受益良多

Naver-Pinpoint:Dapper 대장부!

Apache-Skywalking:Pinpoint 大佬好!

Uber-Jaeger:Zipking Big Old!

点评-CAT:你们几个什么意思?把我和 CAL 老大晾到一边了?

eBay-CAL:时隔 19 年,竟然涌现了这么多链路追踪组件。。

Google-Dapper:没想到我的那篇 Dapper 论文竟然有这么大的功效。

涉及的故事

Google-Dapper:Google 公司内部有一款链路追踪组件 Dapper,非常强大,但是没有开源。在 2010 年,Google 发表了一篇 Dapper 的论文,介绍了 Dapper 链路追踪的原理,后来成为多家链路追踪组件的鼻祖。

Twitter-ZipKin:米国的 Twitter 公司大家应该知道吧,类似于我们的新浪微博,而 Zipkin 就是他们的链路追踪产品,在 2012 年早期开源,基于 Dapper 论文开发。

Naver-Pinpoint:Naver 是韩国的一家公司,聊天记录里面的打招呼 대장부 翻译过来就是“大佬好”。Pinpoint 也是基于 Dapper 论文的思想进行开发,功能丰富,2012 年开源,也是非常受欢迎的一款产品。

Uber-Jaeger:米国的 Uber 大家应该熟悉,曾经在国内的打车市场非常火爆,不过现在打车软件都是滴滴和其他平台了。Jaeger 时 Uber 公司的一款链路追踪产品,在 2016 年开源,吸收了 Zipkin 的设计思想,用的语言是 Golang,可以认为是 Zipkin 的克隆版,但是也有它自身的优点和亮点。

Apache-Skywalking:Skywalking 是国产的,Made In China,项目发起人吴晟结合了 OneAPM + PinPoint,打造的一款链路追踪组件,Skywalking 已经进入 Apache 孵化,国内社区活跃,可以进官方群,很多问题都可以第一时间得到大家的帮助。

Skywalking VS PinPoint

UI 界面

Apache-Skywalking:@Naver-Pinpoint,兄弟,你说的什么鸟语?

Naver-PinPoint:韩语,看不懂么,非要我发中文?

Apache-Skywalking:对啊,我早就看你不爽了,大家都说你界面好看,也就只有界面好看吧!哼

Naver-PinPoint:Chinese Man,我不仅界面好看,我的 JVM 的监控,跟踪的细粒度也是无人能敌。

Twitter-ZipKin:确实,比我的界面好看多了。。

Apache-Skywalking:ZipKin 兄弟,你可以看下我的,定制 UI 已经有了,也还不错的。

涉及的故事

Skywalking 和 PinPoint 都是非常优秀的链路追踪组件,Skywalking 和 PinPoint 有很多相似的地方,比如都是字节码注入,不侵入的。

而 PinPoint 的界面和 ZipKin、Skywalking 比较来说,确实要略胜一筹。不过daocloud根据Pinpoint的风格为skywalking定制了一款 UI,界面也很拉风了。所以只比较原生 UI 的话,PinPoint 胜出。

社区支持

Apache-Skywalking:韩国骑马哥,你不要得意,我在其他几个方面还是比你强的。

Naver-PinPoint:那你说说看,洗耳恭听。

Apache-Skywalking:在社区支持方面,我可是颇受中国程序员的喜爱哦!你的中国话还得多练下哟,思密达!

点评-CAT:支持国产!国产 yyds!

Naver-PinPoint:受教了,思密达。

涉及的故事

Skywalking 和 CAT: 这两款链路追踪组件都是国产的,对国内用户更友好,香!另外 CAT 早期开源的,现在社区不活跃了。Skywalking 还有官方 QQ 交流群,我天,这个要吹爆!

思密达:韩语的语气助词,用在句尾,表示尊敬。PinPoint 对国内社区这一块确实有心无力,毕竟国人看汉语更方便。

RoctetMQ:阿里开源的消息队列,现在交给 Apache 维护了,国内大厂用得很多。国产 yyds。

优势对比

!

Apache-Skywalking:在性能方面,我是最强的。

Apache-Skywalking:因为你跟踪的细粒度太细了,所以耗时更多。

Apache-Skywalking:另外呢,在组件支持这一方面,我也是非常全面的,特别是 RocketMQ,嘿嘿,又是国产的~

RocketMQ:我来啦~

Naver-PinPoint:这句你赢了。

涉及的故事

  • 性能方面

由于Pinpoint采集信息太过详细,所以,它对性能的损耗最大。而skywalking默认策略比较保守,对性能损耗很小。 有网友做过压力测试,对比如下:

[外链图片转存中...(img-i7ttml0a-1652020908378)]

  • 组件支持:Skywalking 对组件的支持真的很全,比如对 RPC 框架的支持,消息队列的支持,Redis 客户端的支持,日志框架的支持,都要胜于 PinPoint,但是对于 WEB 容器、数据库支持方面,PinPoint 略胜一筹。

[外链图片转存中...(img-st9rpRpY-1652020908378)]

  • 告警:Pinpoint和skywalking都支持常用的告警规则配置,但是skywalking采用webhooks的方式就灵活很多:短信通知,邮件通知,微信通知都是可以支持的。而Pinpoint只能sms/email通知,并且还需要引入MySQL存储,增加了整个系统复杂度。所以,告警方面,skywalking更胜一筹
  • PinPoint 的优势:追踪数据粒度非常细、功能强大的用户界面。支持海量的日志存储。
  • PinPoint 的劣势:比较重负载的系统(运行它必须先维护一套 HBase),严重制约了它的适用范围。
  • Skywalking 的优势:非常活跃的中文社区,支持多种语言的探针,对国产开源软件支持很全面,而且性能损耗较小。二次开发也要优于 PinPoint。

[外链图片转存中...(img-MlgPv8B8-1652020908378)]

ZipKin

Zipkin:兄弟们,在 Spring Cloud 家族中,我可是被应用得很多哦,快来夸夸我。

Jaeger:好啦,知道你有靠山。

Sleuth:ZipKin,你的成功可别忘了我呀!

ZipKin:发红包给 Sleuth。

Dapper:领取了红包。

Sleuth:你抢我红包干啥?

Dapper:不好意思,条件反射。话说你们不应该感谢我么?

涉及的故事

Spring Cloud 引入 Sleuth 组件,就可以获取到调用链路,但只能通过控制台的输出信息来看,不太方便。

Zipkin 油然而生,一个图形化的工具。Zipkin 是 Twitter 开源的分布式跟踪系统,主要用来用来收集系统的时序数据,进而可以跟踪系统的调用问题。

而且引入了 Zipkin 组件后,就不需要引入 Sleuth 组件了,因为 Zipkin 组件已经帮我们引入了。

关于 Spring Cloud 整合 Zipkin 可以看我之前写的这篇:在医院五天,我把「链路追踪」整明白了

Zipkin 参照 Google Dapper 的涉及理念进行开发的,所以 Dapper 才会说感谢他。

报表

Skywalking:ZipKin 兄弟,你的报表功能什么时候能增强下啊?

CAT:+1

PinPoint + 1

ZipKin:.....

涉及的故事

ZipKin 的 APM 的报表能力比较薄弱,有报表需求的,建议选择其他链路追踪组件。APM(Application Performance Management & Monitoring) 即应用性能管理和监控,主要通过对程序的性能指标进行分析和监控,来帮助开发、测试、运维人员来掌握程序的性能和运行情况。

总结

来一张几个常用分布式链路追踪组件的对比图:

几款开源链路追踪组件对比

大家选用的是哪款分布式链路追踪组件呢?

参考资料:

https://github.com/apache/skywalking

https://github.com/dianping/cat

https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf

https://spring.io/projects/spring-cloud-sleuth

https://skywalking.apache.org/zh/2019-02-24-skywalking-pk-pinpoint/

https://juejin.cn/post/6844903560732213261

https://time.geekbang.org/column/article/441338

https://www.cnblogs.com/zhangs1986/p/8879744.html

https://tech.meituan.com/2018/11/01/cat-in-depth-java-application-monitoring.html

https://www.cnblogs.com/yyhh/p/6106472.html

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
7月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
Java 中间件 微服务
微服务 链路追踪组件
微服务 链路追踪组件
175 0
|
JavaScript 小程序 Java
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
|
JavaScript 小程序 Java
手动实现 SpringBoot 日志链路追踪,无需引入组件,日志定位更方便!
手动实现 SpringBoot 日志链路追踪,无需引入组件,日志定位更方便!
|
Java Spring
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
514 0
|
监控 Java 微服务
Springboot 整合 SpringCloud组件-ZipKin &Sleuth 服务链路追踪 (五)
Springboot 整合 SpringCloud组件-ZipKin &Sleuth 服务链路追踪 (五)
563 0
Springboot 整合 SpringCloud组件-ZipKin &Sleuth 服务链路追踪 (五)
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1254 0
分布式链路追踪- SkyWalking使用手册
|
4月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
7月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
1031 0
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控

热门文章

最新文章