16 | 如何搭建一套适合你的服务追踪系统?
胡忠想
该思维导图由 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
《从 0 开始学微服务》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(24)
- 最新
- 精选
- arebya在项目中我们也对比过zipkin和pinpoint,个人认为还要考虑以下几方面: 1、定制成本 两者都需要对中间件进行定制化的开发,zipkin开源社区更活跃些,遇到的问题也比较容易解决。pinpoint自身支持了很多的plugin,如果想要二次开发,需要了解它的扩展机制,代码上来说会稍微复杂。 2、维护成本 pinpoint需要维护单独的hbase集群(当然hdfs也少不了) 3、规范 pinpoint是自己走的一套,没有遵守opentracing标准规范,zipkin已有相应实现
作者回复: 嗯,从开源社区角度考虑,openzipkin要比pinpoint更符合
2018-10-109 - 拉欧http效率低,但是无需做额外的工作,mq吞吐量更大,但是需要部署,所以视数据量而定,如果数据量小,http就可以,数据量大,就要用到mq2018-09-2729
- 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-0614
- 凌天跟大众点评的cat区别呢2019-05-047
- focus 根我是做Android音视频开发的 现在想往后台和微服务方向转 想问问作者有什么看法呢2018-09-284
- 楼下小黑哥基于不同场景选择不一样。本来刚看到问题,本人觉得第一想法就是MQ比较适合。但是使用MQ 需要搭建相应的消息系统。这就相对引入一些复杂度。对于前期项目刚开始,可以使用http,能快速对接上追踪系统。而随着后期项目渐入稳定,然后 http 的调用相对而言,效率偏低,如果并发十分大,可能会影响项目原本的稳定性。这个时候就可以考虑使用MQ,提高吞吐量。 哈哈 说个题外话,总感觉要在代合耦合这种代码,就感觉十分不舒服。:(2018-09-282
- 萧箫萧对于微服务架构模式下,主业务应用和后端子业务应用通过nginx网关代理,这种情况下 如何在nginx上对接pinpoint链路追踪呢?2019-06-251
- 金hb.Ryan 冷空氣駕到留言支持mq但我觉得可能http侵入更低,http层后面可以接入kafka等. 我们内部其实也做了类似dapper做参考的链路系统,有个问题1如何考虑采样率的实现,2pinpoint每个层都trace一下会不会有性能问题?2018-09-281
- herome美团的OCTO 很不错2018-09-281
- 有铭spring cloud全家桶居然没有自己实现的服务追踪系统?2018-09-2711
收起评论