多語言(Java、.NET、Node.js)混合架構下開源調用鏈追蹤APM項目初步選型
1. 背景
我們的技術棧包括了Java、.NET、Node.js等,並且采用了分布式的技術架構,系統性能管理、問題排查成本越來越高。
2. 基本訴求
針對我們的情況,這裏列出了選型的主要條件,作為最終判斷依據
基本條件:
- 多平臺探針(Java、.NET Core、Node.js)
- 無侵入的探針部署方式
- 探針對應用性能和高可用影響小
- 服務端高可用,服務端不可用時,客戶端無影響
3. 主要選項
主流的調用鏈追蹤項目有Pinpoint、Zipkin、Skywalking、CAT
3.1. Pinpoint
Pinpoint是韓國人開源,項目活躍度比較高,web端功能比較健全,包括應用調用關系拓撲圖、請求調用鏈、應用性能狀態查看等,探針支持Java和PHP。
項目地址 https://github.com/naver/pinpoint
3.2. Zipkin
Zipkin是Twitter開源的調用鏈分析工具,特點是輕量,使用部署簡單,另外優勢是探針支持的語言平臺比較豐富。
項目地址 https://github.com/openzipkin/zipkin
3.3. Skywalking
SkyWalking是本土開源的調用鏈分析、以及應用監控分析工具。已加入Apache孵化器,特點是支持多種語言的探針(Java、.NET Core、NodeJS、PHP),探針支持的組件也非常豐富,UI功能較強,接入端無代碼侵入,兼容Zipkin和Istio telemetry格式。
項目地址 https://github.com/apache/incubator-skywalking
3.4. CAT (Central Application Tracking)
CAT是大眾點評開源的基於編碼和配置的調用鏈分析,應用監控分析,日誌采集,監控報警等一系列的監控平臺工具。
項目地址 https://github.com/dianping/cat
4. 特性對比
特性 | Pinpoint | Zipkin | Skywalking | CAT |
---|---|---|---|---|
存儲方式 | Hbase | Cassandra、ES、MySQL、InMemory | ES、H2、MySQL、TiDB | MySQL、Hadoop |
部署依賴 | 無 | zookeeper、consul、Kubernetes | Tomcat | |
數據協議 | thrift | HTTP、MQ | gRPC | TCP |
數據采樣 | √ | √ | √ | √ |
探針方式 | 無侵入 | 侵入式 | 無侵入 | 侵入式 |
探針平臺 | Java、PHP | Java、.NET Core、Go、PHP、Ruby、Js | Java、.NET Core、Go、PHP、Node.js | Java、C、C++、Python、Go、Node.js |
OpenTracing | 不支持 | 支持 | 支持 | 不支持 |
STAR數 | 8049 | 10407 | 5838 | 8038 |
近1月提交人數 | 9 | 3 | 13 | 6 |
近1月提交數 | 91 | 25 | 78 | 20 |
PS: 社區活躍度數據截至2019.02.15,僅供參考,並不能代表實際的活躍度。
5. 性能對比
參考文章《調用鏈選型之Zipkin,Pinpoint,SkyWalking,CAT》https://www.jianshu.com/p/0fbbf99a236e,Skywalking的Java探針對應用的性能影響最小,關於其它平臺上的探針後續將做測試。
6. 初步結論
Zipkin積累的STAR數最多,Skywalking由於項目成立較晚,STAR數最少。近期的社區活躍度方面Pinpoint和Skywalking熱度最高。
由於Pinpoint和CAT目前不支持 .NET Core 的探針直接排除,Zipkin和Skywalking的探針集成方式上對比,Skywalking的無侵入方式有很大的優勢。
另外Skywaling為國人主導的項目,國人參與度非常高,溝通方面有一定的優勢。
後續我們將針對Skywalking進行下面幾點的測試:
- 服務端高可用性
- 服務端數據容量增長對性能的影響
- 服務端不可用時對不同平臺客戶端的影響
- 不同平臺探針對應用的性能影響
7. 參考資料
調用鏈選型之Zipkin,Pinpoint,SkyWalking,CAT https://www.jianshu.com/p/0fbbf99a236e
全鏈路監控(一):方案概述與比較 https://juejin.im/post/5a7a9e0af265da4e914b46f1
探針性能揭秘 https://github.com/SkyAPMTest/Agent-Benchmarks/blob/master/README_zh.md
多語言(Java、.NET、Node.js)混合架構下開源調用鏈追蹤APM項目初步選型