如果把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 的继承者
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://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