【轉(zhuǎn)載請注明出處】:http://www.reibang.com/p/5184d7904c4b
隨著企業(yè)經(jīng)營規(guī)模的擴(kuò)大,以及對內(nèi)快速診斷效率和對外SLA(服務(wù)品質(zhì)協(xié)議臼寄,service-level agreement)的追求荤堪,對于業(yè)務(wù)系統(tǒng)的掌控度的要求越來越高,主要體現(xiàn)在:
- 對于第三方依賴的監(jiān)控,實(shí)時(shí)/準(zhǔn)實(shí)時(shí)了解第三方的健康狀況/服務(wù)品質(zhì),降低第三方依賴對于自身系統(tǒng)的擾動(服務(wù)降級、故障轉(zhuǎn)移)
- 對于容器的監(jiān)控堰塌,實(shí)時(shí)/準(zhǔn)實(shí)時(shí)的了解應(yīng)用部署環(huán)境(CPU、內(nèi)存分衫、進(jìn)程场刑、線程、網(wǎng)絡(luò)蚪战、帶寬)情況牵现,以便快速擴(kuò)容/縮容、流量控制邀桑、業(yè)務(wù)遷移
- 業(yè)務(wù)方對于自己的調(diào)用情況瞎疼,方便作容量規(guī)劃,同時(shí)對于突發(fā)的請求也能進(jìn)行異常告警和應(yīng)急準(zhǔn)備
- 自己業(yè)務(wù)的健康壁畸、性能監(jiān)控贼急,實(shí)時(shí)/準(zhǔn)實(shí)時(shí)的了解自身的業(yè)務(wù)運(yùn)行情況,排查業(yè)務(wù)瓶頸,快速診斷和定位異常竿裂,增加對自己業(yè)務(wù)的掌控力
同時(shí)玉吁,對于企業(yè)來說照弥,能夠更精確的了解資源的使用情況腻异,對于成本核算和控制也有非常大的裨益。
在這種情況下这揣,一般都會引入APM(Application Performance Management & Monitoring)系統(tǒng)悔常,通過各種探針采集數(shù)據(jù),收集關(guān)鍵指標(biāo)给赞,同時(shí)搭配數(shù)據(jù)呈現(xiàn)和監(jiān)控告警机打,能夠解決上述的大部分問題。
然而隨著RPC框架片迅、微服務(wù)残邀、云計(jì)算、大數(shù)據(jù)的發(fā)展柑蛇,同時(shí)業(yè)務(wù)的規(guī)模和深度相比過往也都增加了很多芥挣,一次業(yè)務(wù)可能橫跨多個(gè)模塊/服務(wù)/容器,依賴的中間件也越來越多耻台,其中任何一個(gè)節(jié)點(diǎn)出現(xiàn)異常空免,都可能導(dǎo)致業(yè)務(wù)出現(xiàn)波動或者異常,這就導(dǎo)致服務(wù)質(zhì)量監(jiān)控和異常診斷/定位變得異常復(fù)雜盆耽,于是催生了新的業(yè)務(wù)監(jiān)控模式:調(diào)用鏈跟蹤--能夠分布式的抓取多個(gè)節(jié)點(diǎn)的業(yè)務(wù)記錄蹋砚,并且通過統(tǒng)一的業(yè)務(wù)id(traceId,messageId摄杂,requestId等)將一次業(yè)務(wù)在各個(gè)節(jié)點(diǎn)的記錄串聯(lián)起來坝咐,方便排查業(yè)務(wù)的瓶頸或者異常點(diǎn)
產(chǎn)品對比
APM和調(diào)用鏈跟蹤均不是新誕生事務(wù),很多公司已經(jīng)有了大量的實(shí)踐析恢,不過開源的并且能夠開箱即用的產(chǎn)品并不多畅厢,這里主要選取了Pinpoint,Skywalking氮昧,CAT來進(jìn)行對比(當(dāng)然也有其他的例如Zipkin框杜,Jaeger等產(chǎn)品,不過總體來說不如前面選取的3個(gè)完成度高)袖肥,了解一下APM和調(diào)用鏈跟蹤在開源方面的發(fā)展?fàn)顟B(tài)咪辱。
Pinpoint
Pinpoint是一個(gè)比較早并且成熟度也非常高的APM+調(diào)用鏈監(jiān)控的項(xiàng)目,在全世界范圍內(nèi)均有用戶使用椎组,支持Java和PHP的探針油狂,數(shù)據(jù)容器為HBase,其界面參考:
Skywalking
Skywalking是一個(gè)新晉的項(xiàng)目,最近一兩年發(fā)展非常迅猛专筷,本身支持OpenTracing規(guī)范弱贼,優(yōu)秀的設(shè)計(jì)提供了良好的擴(kuò)展性,支持Java磷蛹、PHP吮旅、.Net、NodeJs探針味咳,數(shù)據(jù)容器為ElasticSearch庇勃,其界面參考:
CAT
CAT是由美團(tuán)開源的一個(gè)APM項(xiàng)目,也歷經(jīng)了多年的迭代升級槽驶,擁有大量的企業(yè)級用戶责嚷,對于監(jiān)控和報(bào)警整合比較緊密,支持Java掂铐、C/C++罕拂、.Net、Python全陨、Go爆班、NodeJs,不過CAT目前主要通過侵入性的方式接入烤镐,數(shù)據(jù)容器包括HDFS(存儲原始數(shù)據(jù))和mysql(二次統(tǒng)計(jì))蛋济,其界面參考:
橫向?qū)Ρ?/h3>
上面只是做了一個(gè)簡介,那這三個(gè)項(xiàng)目各自有什么特色或者優(yōu)勢/劣勢呢(三者的主要產(chǎn)品均針對Java炮叶,這里也主要針對Java的特性)
Pinpoint
優(yōu)勢:
- 大企業(yè)/長時(shí)間驗(yàn)證碗旅,穩(wěn)定性和完成度高
- 探針收集的數(shù)據(jù)粒度比較細(xì)
- HBase的數(shù)據(jù)密度較大,支持PB級別下的數(shù)據(jù)查詢
- 代碼設(shè)計(jì)考慮的擴(kuò)展性較弱镜悉,二次開發(fā)難度較大(探針為插件式祟辟,開發(fā)比較簡單)
- 擁有完整的APM和調(diào)用鏈跟蹤功能
劣勢:
- 代碼針對性強(qiáng),擴(kuò)展較難
- 容器為HBase侣肄,查詢功能較弱(主要為時(shí)間維度)
- 探針的額外消耗較多(探針采集粒度細(xì)旧困,大概10%~20%)
- 項(xiàng)目趨于成熟,而擴(kuò)展難度較大稼锅,目前社區(qū)活躍度偏低吼具,基本只進(jìn)行探針的增加或者升級
- 缺少自定義指標(biāo)的設(shè)計(jì)
Skywalking
優(yōu)勢:
- 數(shù)據(jù)容器為ES,查詢支持的維度較多并且擴(kuò)展?jié)摿Υ?/li>
- 項(xiàng)目設(shè)計(jì)采用微內(nèi)核+插件矩距,易讀性和擴(kuò)展性都比較強(qiáng)
- 主要的研發(fā)人員為華人并且均比較活躍拗盒,能夠進(jìn)行更加直接的溝通
- 擁有完整的APM和調(diào)用鏈跟蹤功能
劣勢:
- 項(xiàng)目發(fā)展非常快锥债,穩(wěn)定性有待驗(yàn)證
- ES數(shù)據(jù)密度較小陡蝇,在PB級別可能會有性能壓力
- 缺少自定義指標(biāo)的設(shè)計(jì)
CAT
優(yōu)勢:
- 大企業(yè)/長時(shí)間驗(yàn)證痊臭,穩(wěn)定性和完成度高
- 采用手動數(shù)據(jù)埋點(diǎn)而不是探針,數(shù)據(jù)采集的靈活性更強(qiáng)
- 支持自定義指標(biāo)
- 代碼設(shè)計(jì)考慮的擴(kuò)展性較弱登夫,并且數(shù)據(jù)結(jié)構(gòu)復(fù)雜广匙,二次開發(fā)難度較大
- 擁有完善的監(jiān)控告警機(jī)制
劣勢:
- 代碼針對性強(qiáng),擴(kuò)展較難
- 需要手動接入埋點(diǎn)恼策,代碼侵入性強(qiáng)
- APM功能完善鸦致,但是不支持調(diào)用鏈跟蹤
基本組件
如果分別去看Pinpoint/Skywalking/CAT的整體設(shè)計(jì),我們會發(fā)現(xiàn)三者更像是一個(gè)規(guī)范的三種實(shí)現(xiàn)戏蔑,雖然各自有不同的機(jī)制和特性蹋凝,但是從模塊劃分和功能基本是一致的:
當(dāng)然也有一些微小的區(qū)別:
- Pinpoint基本沒有aggregator鲁纠,同時(shí)query和alarm集成在了web中总棵,只有agent,collector和web
- Skywalking則是把collector改含、aggregator情龄、alarm集成為OAP(Observability Analysis Platform),并且可以通過集群部署捍壤,不同的實(shí)例可以分別承擔(dān)collector或者aggregator+alarm的角色
- CAT則和Skywalking類似骤视,把collector、aggregator鹃觉、alarm集成為cat-consumer专酗,而由于CAT有比較復(fù)雜的配置管理,所以query和配置一起集成為cat-home
- 當(dāng)然最大的區(qū)別是Pinpoint和Skywalking均是通過javaagent做字節(jié)碼的擴(kuò)展盗扇,通過切面編程采集數(shù)據(jù)祷肯,類似于探針,而CAT的agent則更像是一個(gè)工具集疗隶,用于手動埋點(diǎn)
【轉(zhuǎn)載請注明出處】:http://www.reibang.com/p/5184d7904c4b