【轉載請註明出處】:http://www.javashuo.com/article/p-cyotkxxd-nq.htmljava
隨着企業經營規模的擴大,以及對內快速診斷效率和對外SLA(服務品質協議,service-level agreement)的追求,對於業務系統的掌控度的要求愈來愈高,主要體如今:mysql
同時,對於企業來講,可以更精確的瞭解資源的使用狀況,對於成本覈算和控制也有很是大的裨益。git
在這種狀況下,通常都會引入APM(Application Performance Management & Monitoring)系統,經過各類探針採集數據,收集關鍵指標,同時搭配數據呈現和監控告警,可以解決上述的大部分問題。github
然而隨着RPC框架、微服務、雲計算、大數據的發展,同時業務的規模和深度相比過往也都增長了不少,一次業務可能橫跨多個模塊/服務/容器,依賴的中間件也愈來愈多,其中任何一個節點出現異常,均可能致使業務出現波動或者異常,這就致使服務質量監控和異常診斷/定位變得異常複雜,因而催生了新的業務監控模式:調用鏈跟蹤--可以分佈式的抓取多個節點的業務記錄,而且經過統一的業務id(traceId,messageId,requestId等)將一次業務在各個節點的記錄串聯起來,方便排查業務的瓶頸或者異常點web
APM和調用鏈跟蹤均不是新誕生事務,不少公司已經有了大量的實踐,不過開源的而且可以開箱即用的產品並很少,這裏主要選取了Pinpoint,Skywalking,CAT來進行對比(固然也有其餘的例如Zipkin,Jaeger等產品,不過整體來講不如前面選取的3個完成度高),瞭解一下APM和調用鏈跟蹤在開源方面的發展狀態。sql
Pinpoint是一個比較早而且成熟度也很是高的APM+調用鏈監控的項目,在全世界範圍內均有用戶使用,支持Java和PHP的探針,數據容器爲HBase,其界面參考:
apache
Skywalking是一個新晉的項目,最近一兩年發展很是迅猛,自己支持OpenTracing規範,優秀的設計提供了良好的擴展性,支持Java、PHP、.Net、NodeJs探針,數據容器爲ElasticSearch,其界面參考:
編程
CAT是由美團開源的一個APM項目,也歷經了多年的迭代升級,擁有大量的企業級用戶,對於監控和報警整合比較緊密,支持Java、C/C++、.Net、Python、Go、NodeJs,不過CAT目前主要經過侵入性的方式接入,數據容器包括HDFS(存儲原始數據)和mysql(二次統計),其界面參考:
segmentfault
上面只是作了一個簡介,那這三個項目各自有什麼特點或者優點/劣勢呢(三者的主要產品均針對Java,這裏也主要針對Java的特性)網絡
優點:
劣勢:
優點:
劣勢:
優點:
劣勢:
若是分別去看Pinpoint/Skywalking/CAT的總體設計,咱們會發現三者更像是一個規範的三種實現,雖然各自有不一樣的機制和特性,可是從模塊劃分和功能基本是一致的:
固然也有一些微小的區別:
【轉載請註明出處】:http://www.javashuo.com/article/p-cyotkxxd-nq.html