APM呼叫鏈產品對比

youmen發表於2021-01-22

APM呼叫鏈產品對比

隨著企業經營規模的擴大,以及對內快速診斷效率和對外SLA(服務品質協議,service-level agreement)的追求,對於業務系統的掌控度的要求越來越高,主要體現在:

  • 對於第三方依賴的監控,實時/準實時瞭解第三方的健康狀況/服務品質,降低第三方依賴對於自身系統的擾動(服務降級、故障轉移)

  • 對於容器的監控,實時/準實時的瞭解應用部署環境(CPU、記憶體、程式、執行緒、網路、頻寬)情況,以便快速擴容/縮容、流量控制、業務遷移

  • 業務方對於自己的呼叫情況,方便作容量規劃,同時對於突發的請求也能進行異常告警和應急準備

  • 自己業務的健康、效能監控,實時/準實時的瞭解自身的業務執行情況,排查業務瓶頸,快速診斷和定位異常,增加對自己業務的掌控力

同時,對於企業來說,能夠更精確的瞭解資源的使用情況,對於成本核算和控制也有非常大的裨益。
在這種情況下,一般都會引入APM(Application Performance Management & Monitoring)系統,通過各種探針採集資料,收集關鍵指標,同時搭配資料呈現和監控告警,能夠解決上述的大部分問題。
然而隨著RPC框架、微服務、雲端計算、大資料的發展,同時業務的規模和深度相比過往也都增加了很多,一次業務可能橫跨多個模組/服務/容器,依賴的中介軟體也越來越多,其中任何一個節點出現異常,都可能導致業務出現波動或者異常,這就導致服務質量監控和異常診斷/定位變得異常複雜,於是催生了新的業務監控模式:呼叫鏈跟蹤--能夠分散式的抓取多個節點的業務記錄,並且通過統一的業務id(traceId,messageId,requestId等)將一次業務在各個節點的記錄串聯起來,方便排查業務的瓶頸或者異常點

產品對比

APM和呼叫鏈跟蹤均不是新誕生事務,很多公司已經有了大量的實踐,不過開源的並且能夠開箱即用的產品並不多,這裡主要選取了Pinpoint,Skywalking,CAT來進行對比(當然也有其他的例如Zipkin,Jaeger等產品,不過總體來說不如前面選取的3個完成度高),瞭解一下APM和呼叫鏈跟蹤在開源方面的發展狀態。

Pinpoint

Pinpoint是一個比較早並且成熟度也非常高的APM+呼叫鏈監控的專案,在全世界範圍內均有使用者使用,支援Java和PHP的探針,資料容器為HBase,其介面參考:

Skywalking

Skywalking是一個新晉的專案,最近一兩年發展非常迅猛,本身支援OpenTracing規範,優秀的設計提供了良好的擴充套件性,支援Java、PHP、.Net、NodeJs探針,資料容器為ElasticSearch,其介面參考:

CAT

CAT是由美團開源的一個APM專案,也歷經了多年的迭代升級,擁有大量的企業級使用者,對於監控和報警整合比較緊密,支援Java、C/C++、.Net、Python、Go、NodeJs,不過CAT目前主要通過侵入性的方式接入,資料容器包括HDFS(儲存原始資料)和mysql(二次統計),其介面參考:

橫向對比

上面只是做了一個簡介,那這三個專案各自有什麼特色或者優勢/劣勢呢(三者的主要產品均針對Java,這裡也主要針對Java的特性)

Pinpoint

優勢:

  • 大企業/長時間驗證,穩定性和完成度高

  • 探針收集的資料粒度比較細

  • HBase的資料密度較大,支援PB級別下的資料查詢

  • 程式碼設計考慮的擴充套件性較弱,二次開發難度較大(探針為外掛式,開發比較簡單)

  • 擁有完整的APM和呼叫鏈跟蹤功能

劣勢:

  • 程式碼針對性強,擴充套件較難

  • 容器為HBase,查詢功能較弱(主要為時間維度)

  • 探針的額外消耗較多(探針採集粒度細,大概10%~20%)

  • 專案趨於成熟,而擴充套件難度較大,目前社群活躍度偏低,基本只進行探針的增加或者升級

  • 缺少自定義指標的設計

Skywalking

優勢:

  • 資料容器為ES,查詢支援的維度較多並且擴充套件潛力大

  • 專案設計採用微核心+外掛,易讀性和擴充套件性都比較強

  • 主要的研發人員為華人並且均比較活躍,能夠進行更加直接的溝通

  • 擁有完整的APM和呼叫鏈跟蹤功能

劣勢:

  • 專案發展非常快,穩定性有待驗證

  • ES資料密度較小,在PB級別可能會有效能壓力

  • 缺少自定義指標的設計

CAT

優勢:

  • 大企業/長時間驗證,穩定性和完成度高

  • 採用手動資料埋點而不是探針,資料採集的靈活性更強

  • 支援自定義指標

  • 程式碼設計考慮的擴充套件性較弱,並且資料結構複雜,二次開發難度較大

  • 擁有完善的監控告警機制

劣勢:

  • 程式碼針對性強,擴充套件較難

  • 需要手動接入埋點,程式碼侵入性強

  • APM功能完善,但是不支援呼叫鏈跟蹤

基本元件

如果分別去看Pinpoint/Skywalking/CAT的整體設計,我們會發現三者更像是一個規範的三種實現,雖然各自有不同的機制和特性,但是從模組劃分和功能基本是一致的:

當然也有一些微小的區別:

  • Pinpoint基本沒有aggregator,同時query和alarm整合在了web中,只有agent,collector和web

  • Skywalking則是把collector、aggregator、alarm整合為OAP(Observability Analysis Platform),並且可以通過叢集部署,不同的例項可以分別承擔collector或者aggregator+alarm的角色

  • CAT則和Skywalking類似,把collector、aggregator、alarm整合為cat-consumer,而由於CAT有比較複雜的配置管理,所以query和配置一起整合為cat-home

  • 當然最大的區別是Pinpoint和Skywalking均是通過javaagent做位元組碼的擴充套件,通過切面程式設計採集資料,類似於探針,而CAT的agent則更像是一個工具集,用於手動埋點

相關文章