天天看點

調用鍊監控産品該如何選擇?

本文回顧分布式調用鍊監控(Distributed Tracing)産品的演進史,介紹近年出現的OpenTracing标準,對主流的開源産品進行比較,并給出選型建議。

一、演進史

2012年初,我作為攜程架構研發部架構師,主導研發了攜程第一代的分布式調用鍊監控産品CTrace,當時在國内算是比較早的引入調用鍊監控的一個案例。之後我一直對分布式調用鍊監控這個技術領域比較關注,下圖是我近期總結的該領域的一個産品演進史:

調用鍊監控産品該如何選擇?
  • 現在業界普遍認為是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旨在标準化Trace資料結構和格式,目的是:

  • 不同語言開發的Trace用戶端的互操作性,Java/.Net/PHP/Python/Nodejs等語言開發的用戶端,隻要遵循Open Tracing标準,就都可以對接Open Tracing相容的監控後端。
  • Tracing監控後端的互操作性,隻要遵循Open Tracing标準,企業可以根據需要替換具體的Tracing監控後端産品,比如從Zipkin替換成Jaeger後端。

OpenTracing初衷和方向是好的,但是目前還不明朗,不少調用鍊監控産品并為明确支援OpenTracing标準。對其後續走勢我們可以持續關注。

三、産品比較

點評CAT、Open Zipkin和Naver Pinpoint是目前市場上主流的開源調用鍊監控産品,下表是我對着這三個産品的詳細比較,供參考:

調用鍊監控産品該如何選擇?

三款産品的主要優劣如下:

  • 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. 波波2018年和極客時間合作推出的課程《微服務架構和實踐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

繼續閱讀