APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

隨著企業IT系統不斷擴大,以及對內快速診斷效率和對外SLA(服務品質協議,service-level agreement)的追求,對於業務系統的掌控度的要求越來越高。

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

同時,隨著RPC框架、微服務框架的普及和發展,微服務架構在企業級應用開發中得到了大量的應用。一次業務調用,往往可能跨越多個服務或容器,依賴的中間件也越來越多,其中調用鏈上任何一個節點出現異常,都可以導致業務出現波動或異常,這就導致服務調用鏈的異常診斷和定位變得非常麻煩,於是當務之急是調用鏈跟蹤(tracing)。

APM和調用鏈跟蹤在很多公司已經有了大量的實踐,開源的並且能夠開箱即用的產品,主要有Skywalking、Pinpoint、Zipkin、CAT等等。

一、Skywalking

Skywalking 是一個國人開源分佈式追蹤系統,用於收集、分析、聚合和可視化來自服務和雲原生基礎設施的數據。本身支持OpenTracing規範,優秀的設計提供了良好的擴展性,支持Java、PHP、.Net、NodeJs探針,數據容器為ElasticSearch或MySQL。

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

Skywalking整體架構主要由四部分組成:collector、agent、web、storage,具體如下圖所示。

  • skywalking-collector:鏈路數據歸集器,數據可以落地Elasticsearch,單機也可以落地H2(不推薦),H2僅作為臨時演示用。
  • skywalking-web:web可視化平臺,用來展示落地的數據。
  • skywalking-agent:探針,使用Javaagent做字節碼植入,無侵入式的收集,並通過HTTP或者gRPC方式發送數據到Skywalking Collector。
  • Storage:Skywalking的存儲,時間更迭,skywalking已經開發迭代到了6.x版本,在6.x版本中支持以Elasticsearch、Mysql、TiDB、H2、作為存儲介質進行數據存儲。

關於Skywalking架構設計、單機安裝和集群部署、以及和Spring Cloud微服務項目的集成等等,在前面的章節有詳細的介紹。

二、Pinpoint

Pinpoint是一個比較早並且成熟度也非常高的APM+調用鏈監控的項目,在全世界範圍內均有用戶使用,支持Java和PHP的探針,數據容器為HBase。

Pinpoint是韓國人開源的基於字節碼注入的調用鏈分析,以及應用監控分析工具。特點是支持多種插件,UI功能強大,接入端無代碼侵入。

最新UI界面如下所示:

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

架構圖如下所示:

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

PinpointCollector收集來自應用的監控數據,寫入到HBase中存儲,然後通過PinPoint Web UI界面可視化呈現。

三、Zipkin+Sleuth

Zipkin是Twitter開源的調用鏈分析工具,目前基於Spring Cloud Sleuth得到了廣泛的使用,特點是輕量,使用部署簡單。

Spring Cloud Sleuth是對Zipkin的一個封裝,對於Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server發送採集信息等全部自動完成。

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

Zipkin Server主要包括四個模塊:

(1)Collector 接收或收集各應用傳輸的數據。

(2)Storage 存儲接受或收集過來的數據,當前支持Memory,MySQL,Cassandra,Elasticsearch等,默認存儲在內存中。

(3)API(Query) 負責查詢Storage中存儲的數據,提供簡單的JSON API獲取數據,主要提供給web UI使用。

(4)Web 提供簡單的web界面。

四、CAT(Central Application Tracking)

CAT是大眾點評開源的基於編碼和配置的調用鏈分析,應用監控分析,日誌採集,監控報警等一系列的監控平臺工具。擁有大量的企業級用戶,對於監控和報警整合比較緊密,支持Java、C/C++、.Net、Python、Go、NodeJs。不過,CAT目前主要通過侵入性的方式接入,數據容器包括HDFS(存儲原始數據)和MySQL(二次統計)。

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

在整個CAT從開發至今,一直秉承著簡單的架構就是最好的架構原則,整個CAT主要分為三個模塊,cat-client,cat-consumer,cat-home。

  • cat-client 提供給業務以及中間層埋點的底層sdk。
  • cat-consumer 用於實時分析從客戶端提供的數據。
  • cat-home 作為提供給用戶展示的控制端。

在實際開發和部署中,cat-consumer和cat-home是部署在一個jvm內部,每個CAT服務端都可以作為consumer也可以作為home,這樣既能減少整個CAT層級結構,也可以增加整個系統穩定性。

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

五、Skywalking、Pinpoint、Zipkin和CAT分析比較

1. 基本實現原理

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

2.接入方式

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

3.監控和報警

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

4.頁面UI可視化效果

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

5.監控數據存儲

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT

6. 性能比較

在Skywalking、Pinpoint、Zipkin等三種鏈路監控組件中,Skywalking的探針對吞吐量的影響最小,Zipkin的吞吐量居中,Pinpoint的探針對吞吐量的影響較為明顯。在500併發用戶時,Pinpoint測試服務的吞吐量從1385降低到774,影響很大。然後再看下CPU和memory的影響,在內部服務器進行的壓測,對CPU和memory的影響都差不多在10%之內。

六、小結

綜上所述,在APM和分佈式調用鏈產品選型時,我個人推薦Skywalking。當然,還需要結合企業現狀以及團隊情況,做出綜合判斷。

通過本技術專欄對Skywalking的剖析和實踐,Skywalking確實是一個優秀的APM+調用鏈跟蹤監控系統,能夠覆蓋大部分使用場景,讓研發和運維能夠更加實時/準實時的瞭解線上服務的運行情況。

APM和分佈式調用鏈選型之Skywalking、Pinpoint、Zipkin和CAT


分享到:


相關文章: