调用链监控产品该如何选择?

Distributed Tracing Products How to Select

Posted by     "杨波" on Wednesday, August 1, 2018

TOC

本文回顾分布式调用链监控(Distributed Tracing)产品的演进史,介绍近年出现的OpenTracing标准,对主流的开源产品进行比较,并给出选型建议。

一、演进史

2012年初,我作为携程框架研发部架构师,主导研发了携程第一代的分布式调用链监控产品CTrace,当时在国内算是比较早的引入调用链监控的一个案例。之后我一直对分布式调用链监控这个技术领域比较关注,下图是我近期总结的该领域的一个产品演进史:

evolution

  • 现在业界普遍认为是Google最早提出了分布式调用链监控的理念并研发了相关产品Dapper(见Google Dapper论文[附录1]),但是其实早在2002年,eBay就已经有了调用链监控产品CAL(Centralized Application Logging)。2002年的时候,eBay是世界上最大的电子商务平台,其内部工程团队为了应对分布式系统的复杂性和稳定性挑战而研发了CAL。CAL的理念和Dapper类似,但做法有所不同。CAL是eBay工程师进行性能监控和排障的利器,我曾经在eBay中国研发中心工作(2007~2012),期间也使用过CAL,对这个工具有很深刻的印象。
  • 2010年,经过大规模生产落地实践,Google发表了分布式调用链追踪基础设施Dapper论文。Dapper可以认为是现代分布式调用链监控产品的鼻祖,对社区调用链产品的演进发展产生了深远的影响。
  • 2011年左右,原eBay中国研发中心(eBay CDC)资深架构师吴其敏(我习惯叫他老吴)跳槽到点评,主导研发了点评CAT(Centralized Application Tracking,只和CAL相差一个字)[附录2]。老吴之前在eBay CDC工作近十年,期间深入消化吸收了CAL的设计思路。在CAL设计思路的基础上,老吴根据自己在点评的落地实践,定制发展出具有中国特色的调用链监控系统CAT。上图中,eBay CAL和点评CAT都用黄色标识,表明CAT源自CAL,目前从eBay系CAL演进发展出来的调用链产品只有CAT一款,从Google Dapper演进发展出来的产品则很多(用蓝色标识)。
  • 2012年发生了几个事情,一个是Twitter在吸收Dapper设计理念的基础上研发并开源了Zipkin[现在叫Open Zipkin,附录3]。第二是携程在吸收Zipkin设计思路的基础上研发了CTrace(我当时是这个产品的主导架构师)。第三是韩国一家叫Naver的公司在吸收Dapper的基础上研发并开源了调用链监控产品Pinpoint[附录4]。Zipkin可以认为是Dapper的一个开源实现,在社区产生比较大的影响力,目前是社区主流。Pinpoint也比较成熟,它独创了非侵入埋点方式,而且它的依赖关系展示UI(ServerMap)很有特色。
  • 2014年左右,国内互联网巨头如京东和阿里相继研发调用链监控产品,京东相关产品叫Hydra,阿里叫Eagleye。这两家的产品都是吸收了Dapper/Zipkin的设计思路,比较遗憾两家产品都不开源。
  • 近年,社区又发展出很多调用链监控产品,这个领域呈现百花齐放和相互融合态势。比较知名的如Uber开源的Jaeger,Jaeger可以认为是一个go语言版的Zipkin,在用户体验上有创新亮点。国内开源爱好者吴晟(原OneAPM工程师,目前在华为)开源并提交到Apache孵化器的产品Skywalking,它同时吸收了Zipkin/Pinpoint/CAT的设计思路,支持非侵入式埋点。另外社区还发展出一个叫Open Tracing的组织[附录5],旨在推进调用链监控的一些规范和标准化工作。

二、OpenTracing

近年各种调用链监控产品层出不穷,呈现百花齐放的态势,为了避免碎片化(fragmentation),促进互操作性,社区诞生了一个叫OpenTracing的标准化组织[附录5]。

open tracing

如上图所示,open tracing旨在标准化Trace数据结构和格式,目的是:

  • 不同语言开发的Trace客户端的互操作性,Java/.Net/PHP/Python/Nodejs等语言开发的客户端,只要遵循Open Tracing标准,就都可以对接Open Tracing兼容的监控后端。
  • Tracing监控后端的互操作性,只要遵循Open Tracing标准,企业可以根据需要替换具体的Tracing监控后端产品,比如从Zipkin替换成Jaeger后端。

OpenTracing初衷和方向是好的,但是目前还不明朗,不少调用链监控产品并为明确支持OpenTracing标准。对其后续走势我们可以持续关注。

三、产品比较

点评CAT、Open Zipkin和Naver Pinpoint是目前市场上主流的开源调用链监控产品,下表是我对着这三个产品的详细比较,供参考:

compare

三款产品的主要优劣如下:

  • CAT的最大亮点和竞争差异是开箱即用,报表非常丰富,其中报错大盘、Trasaction报表和Problem报表等都是为互联网应用量身定制,能帮助开发人员持续改进系统性能。另外CAT是完全在国内土生土长的一款调用链监控产品,比较贴合国内用户习惯,已经在国内多家中大型互联网公司落地。CAT的不足之处是社区主要在国内,且作者对社区生态建设投入不足,作者也没有融入主流对接OpenTracing的打算,另外CAT的使用有一定的门槛。
  • Zipkin目前是社区调用链监控的主流,社区生态好,多语言支持好,文档资源丰富。Spring Cloud也直接支持对接Zipkin。Zipkin的不足之处是功能仅限于调用链的展示呈现和简单依赖图,没有聚合报表,没有告警模块,企业级APM特性欠缺。
  • Pinpoint的最大亮点是非侵入式监控,Dashboard用户体验好。不足之处是仅支持Java语言,另外社区生态一般,使用也有一定的门槛。

四、选型建议

  1. 对于中小体量,定制自研能力不足的公司,直接使用CAT,能够快速落地,覆盖大部分应用监控的场景。
  2. 对于中大规模,有一定定制自研实力的公司,则可以考虑在Open Zipkin的基础上进行定制自研,扩展报表和告警等能力。如果主要使用Java技术栈,希望采用非侵入式监控,则可以在Pinpoint或者Apache Skywalking的基础上进行定制自研。
  3. 波波和极客时间合作推出的课程《微服务架构和实践160讲》,马上上线第四模块《微服务调用链监控CAT架构和实践》,会对CAT的背景、架构、埋点案例和生产治理实践等方面进行全面剖析,欢迎大家关注。

五、附录

  1. Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
  2. 点评CAT
  3. Open Zipkin
  4. Naver Pinpoint
  5. Open Tracing
  6. Uber Jaeger

comments powered by Disqus