从 0 开始学微服务
胡忠想
微博技术专家
64643 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 43 讲
开篇词 (1讲)
结束语 (1讲)
从 0 开始学微服务
15
15
1.0x
00:00/00:00
登录|注册

16 | 如何搭建一套适合你的服务追踪系统?

选型对比
工作原理
架构设计
选型对比
工作原理
架构设计
其他开源追踪系统
选型建议
调用链路数据的精确度
系统集成难易程度
埋点探针支持平台的广泛性
Pinpoint
OpenZipkin
数据链路展示
实时数据处理
埋点数据收集
拓展阅读
思考题
总结
选型对比
开源实现方案
服务追踪系统实现
如何搭建一套适合你的服务追踪系统?

该思维导图由 AI 生成,仅供参考

专栏第 8 期我给你讲了服务追踪系统的原理以及实现,简单回顾一下服务追踪系统的实现,主要包括三个部分。
埋点数据收集,负责在服务端进行埋点,来收集服务调用的上下文数据。
实时数据处理,负责对收集到的链路信息,按照 traceId 和 spanId 进行串联和存储。
数据链路展示,把处理后的服务调用数据,按照调用链的形式展示出来。
如果要自己从 0 开始实现一个服务追踪系统,针对以上三个部分你都必须有相应的解决方案。首先你需要在业务代码的框架层开发调用拦截程序,在调用的前后收集相关信息,把信息传输给到一个统一的处理中心。然后处理中心需要实时处理收集到链路信息,并按照 traceId 和 spanId 进行串联,处理完以后再存到合适的存储中。最后还要能把存储中存储的信息,以调用链路图或者调用拓扑图的形式对外展示。
可以想象这个技术难度以及开发工作量都不小,对于大部分中小业务团队来说,都十分具有挑战。不过幸运的是,业界已经有不少开源的服务追踪系统实现,并且应用范围也已经十分广泛,对大部分的中小业务团队来说,足以满足对服务追踪系统的需求。
业界比较有名的服务追踪系统实现有阿里的鹰眼、Twitter 开源的 OpenZipkin,还有 Naver 开源的 Pinpoint,它们都是受 Google 发布的 Dapper 论文启发而实现的。其中阿里的鹰眼解决方案没有开源,而且由于阿里需要处理数据量比较大,所以鹰眼的定位相对定制化,不一定适合中小规模的业务团队,感兴趣的同学可以点击本期文章末尾“拓展阅读”进行学习。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何选择适合自己的服务追踪系统,主要包括开源服务追踪系统OpenZipkin和Pinpoint的比较。OpenZipkin支持多语言平台,但集成难度较大;Pinpoint则只支持Java语言,但集成简单且在数据精确度上更胜一筹。对于业务采用Java语言的情况,Pinpoint是不错的选择;而对于多语言平台,OpenZipkin是更广泛的选择。此外,还介绍了其他开源追踪系统实现,如Uber的Jaeger和国内的SkyWalking。文章提供了读者在选择服务追踪系统时的参考依据。文章还提出了一个思考题,探讨了OpenZipkin在数据传递给Collector时采用HTTP调用和基于MQ的异步通信方式的优劣。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学微服务》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(24)

  • 最新
  • 精选
  • arebya
    在项目中我们也对比过zipkin和pinpoint,个人认为还要考虑以下几方面: 1、定制成本 两者都需要对中间件进行定制化的开发,zipkin开源社区更活跃些,遇到的问题也比较容易解决。pinpoint自身支持了很多的plugin,如果想要二次开发,需要了解它的扩展机制,代码上来说会稍微复杂。 2、维护成本 pinpoint需要维护单独的hbase集群(当然hdfs也少不了) 3、规范 pinpoint是自己走的一套,没有遵守opentracing标准规范,zipkin已有相应实现

    作者回复: 嗯,从开源社区角度考虑,openzipkin要比pinpoint更符合

    2018-10-10
    9
  • 拉欧
    http效率低,但是无需做额外的工作,mq吞吐量更大,但是需要部署,所以视数据量而定,如果数据量小,http就可以,数据量大,就要用到mq
    2018-09-27
    29
  • aoe
    我的回答来自《Spring微服务实战》 1、使用Spring Cloud可以很方便的集成Zipkin,详见“第9章 使用Spring Cloud Sleuth 和 Zipkin进行分布式跟踪》 2、从功能角度来看,不管使用HTTP、RabbitMQ、Kafka,Zipkin的行为没有任何差异。通过使用HTTP追踪,Zipkin使用异步线程发送性能数据。另外使用RabbitMQ或Kafka来收集跟踪数据的主要优势是,如果Zipkin服务器关闭,任何发送给Zipkin的跟踪信息都将”排队“,直到Zipkin能够收集数据。(238页)
    2018-10-06
    14
  • 凌天
    跟大众点评的cat区别呢
    2019-05-04
    7
  • focus 根
    我是做Android音视频开发的 现在想往后台和微服务方向转 想问问作者有什么看法呢
    2018-09-28
    4
  • 楼下小黑哥
    基于不同场景选择不一样。本来刚看到问题,本人觉得第一想法就是MQ比较适合。但是使用MQ 需要搭建相应的消息系统。这就相对引入一些复杂度。对于前期项目刚开始,可以使用http,能快速对接上追踪系统。而随着后期项目渐入稳定,然后 http 的调用相对而言,效率偏低,如果并发十分大,可能会影响项目原本的稳定性。这个时候就可以考虑使用MQ,提高吞吐量。 哈哈 说个题外话,总感觉要在代合耦合这种代码,就感觉十分不舒服。:(
    2018-09-28
    2
  • 萧箫萧
    对于微服务架构模式下,主业务应用和后端子业务应用通过nginx网关代理,这种情况下 如何在nginx上对接pinpoint链路追踪呢?
    2019-06-25
    1
  • 金hb.Ryan 冷空氣駕到
    留言支持mq但我觉得可能http侵入更低,http层后面可以接入kafka等. 我们内部其实也做了类似dapper做参考的链路系统,有个问题1如何考虑采样率的实现,2pinpoint每个层都trace一下会不会有性能问题?
    2018-09-28
    1
  • herome
    美团的OCTO 很不错
    2018-09-28
    1
  • 有铭
    spring cloud全家桶居然没有自己实现的服务追踪系统?
    2018-09-27
    1
    1
收起评论
显示
设置
留言
24
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部