APM調用鏈產品對比

【轉載請註明出處】:http://www.javashuo.com/article/p-cyotkxxd-nq.htmljava

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

  • 對於第三方依賴的監控,實時/準實時瞭解第三方的健康情況/服務品質,下降第三方依賴對於自身系統的擾動(服務降級、故障轉移)
  • 對於容器的監控,實時/準實時的瞭解應用部署環境(CPU、內存、進程、線程、網絡、帶寬)狀況,以便快速擴容/縮容、流量控制、業務遷移
  • 業務方對於本身的調用狀況,方便做容量規劃,同時對於突發的請求也能進行異常告警和應急準備
  • 本身業務的健康、性能監控,實時/準實時的瞭解自身的業務運行狀況,排查業務瓶頸,快速診斷和定位異常,增長對本身業務的掌控力

同時,對於企業來講,可以更精確的瞭解資源的使用狀況,對於成本覈算和控制也有很是大的裨益。git

在這種狀況下,通常都會引入APM(Application Performance Management & Monitoring)系統,經過各類探針採集數據,收集關鍵指標,同時搭配數據呈現和監控告警,可以解決上述的大部分問題。github

然而隨着RPC框架、微服務、雲計算、大數據的發展,同時業務的規模和深度相比過往也都增長了不少,一次業務可能橫跨多個模塊/服務/容器,依賴的中間件也愈來愈多,其中任何一個節點出現異常,均可能致使業務出現波動或者異常,這就致使服務質量監控和異常診斷/定位變得異常複雜,因而催生了新的業務監控模式:調用鏈跟蹤--可以分佈式的抓取多個節點的業務記錄,而且經過統一的業務id(traceId,messageId,requestId等)將一次業務在各個節點的記錄串聯起來,方便排查業務的瓶頸或者異常點web

產品對比

APM和調用鏈跟蹤均不是新誕生事務,不少公司已經有了大量的實踐,不過開源的而且可以開箱即用的產品並很少,這裏主要選取了Pinpoint,Skywalking,CAT來進行對比(固然也有其餘的例如Zipkin,Jaeger等產品,不過整體來講不如前面選取的3個完成度高),瞭解一下APM和調用鏈跟蹤在開源方面的發展狀態。sql

Pinpoint

Pinpoint是一個比較早而且成熟度也很是高的APM+調用鏈監控的項目,在全世界範圍內均有用戶使用,支持Java和PHP的探針,數據容器爲HBase,其界面參考:
image.pngapache

Skywalking

Skywalking是一個新晉的項目,最近一兩年發展很是迅猛,自己支持OpenTracing規範,優秀的設計提供了良好的擴展性,支持Java、PHP、.Net、NodeJs探針,數據容器爲ElasticSearch,其界面參考:
image.png編程

CAT

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

橫向對比

上面只是作了一個簡介,那這三個項目各自有什麼特點或者優點/劣勢呢(三者的主要產品均針對Java,這裏也主要針對Java的特性)網絡

Pinpoint

優點:

  • 大企業/長時間驗證,穩定性和完成度高
  • 探針收集的數據粒度比較細
  • HBase的數據密度較大,支持PB級別下的數據查詢
  • 代碼設計考慮的擴展性較弱,二次開發難度較大(探針爲插件式,開發比較簡單)
  • 擁有完整的APM和調用鏈跟蹤功能

劣勢:

  • 代碼針對性強,擴展較難
  • 容器爲HBase,查詢功能較弱(主要爲時間維度)
  • 探針的額外消耗較多(探針採集粒度細,大概10%~20%)
  • 項目趨於成熟,而擴展難度較大,目前社區活躍度偏低,基本只進行探針的增長或者升級
  • 缺乏自定義指標的設計
Skywalking

優點:

  • 數據容器爲ES,查詢支持的維度較多而且擴展潛力大
  • 項目設計採用微內核+插件,易讀性和擴展性都比較強
  • 主要的研發人員爲華人而且均比較活躍,可以進行更加直接的溝通
  • 擁有完整的APM和調用鏈跟蹤功能

劣勢:

  • 項目發展很是快,穩定性有待驗證
  • ES數據密度較小,在PB級別可能會有性能壓力
  • 缺乏自定義指標的設計
CAT

優點:

  • 大企業/長時間驗證,穩定性和完成度高
  • 採用手動數據埋點而不是探針,數據採集的靈活性更強
  • 支持自定義指標
  • 代碼設計考慮的擴展性較弱,而且數據結構複雜,二次開發難度較大
  • 擁有完善的監控告警機制

劣勢:

  • 代碼針對性強,擴展較難
  • 須要手動接入埋點,代碼侵入性強
  • APM功能完善,可是不支持調用鏈跟蹤

基本組件

若是分別去看Pinpoint/Skywalking/CAT的總體設計,咱們會發現三者更像是一個規範的三種實現,雖然各自有不一樣的機制和特性,可是從模塊劃分和功能基本是一致的:
image.png

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

  • 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則更像是一個工具集,用於手動埋點

【轉載請註明出處】:http://www.javashuo.com/article/p-cyotkxxd-nq.html

相關文章
相關標籤/搜索