这么多Apache顶级项目,SkyWalking为何一枝独秀?
吳晟
讀完需要
5
分鐘速讀僅需 2?分鐘
吳晟
Apache基金會會員,Apache SkyWalking創(chuàng)始人、項目VP和PMC成員,Apache孵化器PMC成員,Apache ShardingSphere PMC成員,Apache APISIX (incubating) PPMC成員,Apache ECharts (incubating)和Apache DolphinScheduler (incubating)孵化器導師,Zipkin成員和貢獻者,CNCF OpenTracing核心維護者。
導讀:本文摘自于SkyWalking創(chuàng)始人吳晟撰寫的《Apache SkyWalking實戰(zhàn)》一書,詳細講述了SkyWalking的架構(gòu)設(shè)計與優(yōu)勢。
徐郡明老師整理國內(nèi)比較常見的 APM 如下:
APM 系統(tǒng)(Application Performance Management,即應(yīng)用性能管理)
1.CAT:?由國內(nèi)美團點評開源的,基于 Java 語言開發(fā),目前提供 Java、C/C++、Node.js、Python、Go 等語言的客戶端,監(jiān)控數(shù)據(jù)會全量統(tǒng)計。
2.Zipkin:?由 Twitter 公司開發(fā)并開源,Java 語言實現(xiàn)??梢暂p松與 Spring Cloud 進行集成,也是 Spring Cloud 推薦的 APM 系統(tǒng)。
3.Pinpoint:?韓國團隊開源的 APM 產(chǎn)品,運用了字節(jié)碼增強技術(shù),只需要在啟動時添加啟動參數(shù)即可實現(xiàn) APM 功能,對代碼無侵入。目前支持 Java 和 PHP 語言,底層采用 HBase 來存儲數(shù)據(jù),探針收集的數(shù)據(jù)粒度非常細,但性能損耗較大,因其出現(xiàn)的時間較長,完成度也很高,文檔也較為豐富,應(yīng)用的公司較多。
4.SkyWalking:?國人開源的產(chǎn)品,2019 年 4 月 17 日 SkyWalking 從 Apache 基金會的孵化器畢業(yè)成為頂級項目。目前 SkyWalking 支持 Java、.Net、Node.js 等探針,數(shù)據(jù)存儲支持MySQL、ElasticSearch等。SkyWalking 與 Pinpoint 相同,Java 探針采用字節(jié)碼增強技術(shù)實現(xiàn),對業(yè)務(wù)代碼無侵入。探針采集數(shù)據(jù)粒度相較于 Pinpoint 來說略粗,但性能表現(xiàn)優(yōu)秀。目前,SkyWalking 增長勢頭強勁,社區(qū)活躍,中文文檔齊全,沒有語言障礙,支持多語言探針,這些都是 SkyWalking 的優(yōu)勢所在,還有就是 SkyWalking 支持很多框架,包括很多國產(chǎn)框架,例如,Dubbo、gRPC、SOFARPC 等等,也有很多開發(fā)者正在不斷向社區(qū)提供更多插件以支持更多組件無縫接入 SkyWalking。
還有很多不開源的 APM 系統(tǒng),例如,淘寶鷹眼、Google Dapper 等等,不再展開介紹了。
1
? ?
SkyWalking 的架構(gòu)設(shè)計
如圖所示,SkyWalking 官方架構(gòu)圖對 SkyWalking 的整體架構(gòu)進行了非常直觀的描述。SkyWalking 由以下 4 個核心部分構(gòu)成。
SkyWalking官方架構(gòu)圖
探針。探針(對應(yīng)圖中Tracing和Mestrics部分)可以是語言探針,也可以是其他項目的協(xié)議。
OAP平臺(Observability Analysis Platform),或稱OAP Server。它是一個高度組件化的輕量級分析程序,由兼容各種探針的Receiver、流式分析內(nèi)核和查詢內(nèi)核三部分構(gòu)成。
存儲實現(xiàn)(Storage Implementors)。SkyWalking的OAP Server支持多種存儲實現(xiàn),并且提供了標準接口,可以實現(xiàn)其他存儲。
UI模塊(SkyWalking)。通過標準的GraphQL協(xié)議進行統(tǒng)計數(shù)據(jù)查詢和展現(xiàn)。
從設(shè)計角度而言,SkyWalking總體遵循以下三大設(shè)計原則:
面向協(xié)議設(shè)計
模塊化設(shè)計
輕量化設(shè)計
1.1
? ?
面向協(xié)議設(shè)計
面向協(xié)議設(shè)計是 SkyWalking 從 5.x 開始嚴格遵守的首要設(shè)計原則。SkyWalking 包含下列對外協(xié)議。
1) 探針協(xié)議
探針協(xié)議分為四大類。
語言探針上報協(xié)議。此協(xié)議包括語言探針的注冊、Metrics數(shù)據(jù)上報、Tracing數(shù)據(jù)上報、命令下行,以及Service Mesh中使用的Telemetry協(xié)議。所有基于語言(Java、.NET、Node.js、PHP、Go等)的探針都需要嚴格遵守此協(xié)議定義。此協(xié)議從v6版本開始全部以gRPC服務(wù)方式對外提供。
語言探針交互協(xié)議。因為分布式追蹤,探針間需要借助HTTP Header、MQ Header等應(yīng)用間通信管道進行交互。此協(xié)議定義交互格式。所有基于語言(Java、.NET、Node.js、PHP、Go等)的探針都需要嚴格遵守此協(xié)議定義。此協(xié)議從v2開始執(zhí)行與v1不同的編碼方法,加入了強制Base64的要求。將從SkyWalking 8開始執(zhí)行的全新v3協(xié)議,簡化了編碼,提供了更多特性,比如透傳業(yè)務(wù)信息、探針交互能力等。
Service Mesh協(xié)議。此協(xié)議是SkyWalking針對Service Mesh抽象的專有協(xié)議,任何Mesh類的服務(wù)都可以通過此協(xié)議直接上行Telemetry數(shù)據(jù),用于計算服務(wù)Metrics和拓撲圖。
第三方協(xié)議。針對大型的第三方開源項目,尤其是Service Mesh核心平臺Istio和Envoy,提供核心協(xié)議適配,支持針對Istio+Envoy的Service Mesh進行無縫監(jiān)控。
2) 查詢協(xié)議
查詢協(xié)議使用GraphQL格式定義的查詢協(xié)議。多數(shù)讀者可能更熟悉RESTful格式的查詢,但SkyWalking考慮到更好的擴展性、更加靈活的組合查詢模式,選擇了由Facebook在2012年開源的GraphQL。GraphQL在開源和商業(yè)項目中已經(jīng)得到了廣泛運用。協(xié)議格式的預定義和多種查詢組合使用提供了UI和第三方系統(tǒng)良好的集成能力。熟悉SkyWalking歷史的讀者會知道,SkyWalking在6.0.0-GA之后的版本,更換了全新的RocketBot UI作為默認UI,這個過程得益于GraphQL的靈活性,后端協(xié)議和實現(xiàn)可以完全不變。社區(qū)中已有大量公司基于此協(xié)議包裝了云平臺產(chǎn)品的UI。
查詢協(xié)議分為以下6類。
元數(shù)據(jù)查詢:查詢在SkyWalking注冊的服務(wù)、服務(wù)實例、Endpoint等元數(shù)據(jù)信息。
拓撲關(guān)系查詢:查詢?nèi)只蛘邌蝹€服務(wù)或Endpoint的拓撲圖及依賴關(guān)系。
Metrics指標查詢:線性指標查詢。
聚合指標查詢:區(qū)間范圍均值查詢及TopN查詢等。
Trace查詢:追蹤明細查詢。
告警查詢。
除了上述兩大類協(xié)議外,部分模塊也存在一些模塊內(nèi)協(xié)議,如導出的數(shù)據(jù)格式協(xié)議、告警協(xié)議、動態(tài)配置服務(wù)協(xié)議等。這些協(xié)議與執(zhí)行模塊的默認實現(xiàn)有關(guān),屬于SkyWalking默認對外集成協(xié)議的范圍,考慮到模塊化設(shè)計,這些協(xié)議本身也是可以替換的,這里就不一一描述了。
1.2
? ?
模塊化設(shè)計
模塊化設(shè)計,旨在以開源項目為內(nèi)核,為更多的企業(yè)內(nèi)部定制服務(wù)、商業(yè)產(chǎn)品的二次包裝及插拔機制提供插撥機制與擴展點。開源項目的一致性升級至關(guān)重要,模塊化設(shè)計,明確接口邊界,使得擴展很容易跟上開源版本升級的節(jié)奏。對于商業(yè)包裝和開源產(chǎn)品的迭代發(fā)展,這是必不可少的一環(huán)。
大型的開源項目,無一不是由大量的商業(yè)公司/商業(yè)目的推進,不可能由個人憑興趣在業(yè)余時間完成。雖然SkyWalking在早期的一到兩年是個人基于興趣在推進,但隨著社區(qū)的壯大和商業(yè)價值的體現(xiàn),開放、包容、具有擴展性的架構(gòu)是必不可少的特性。Apache SkyWalking作為Apache頂級項目,基于商業(yè)友好的Apache 2.0開源協(xié)議,在設(shè)計上也充分考慮了定制化及二次開發(fā)的可能性。
SkyWalking根據(jù)探針和服務(wù)端的不同特性,使用了兩種不同的模塊化機制。
Java探針端,Java使用了較為緊湊的實現(xiàn),主要使用SPI將核心服務(wù)隔離成替換狀態(tài),用戶可以像開發(fā)plugin一樣,只需將新的服務(wù)實現(xiàn)放在plugin目錄中,即可實現(xiàn)自動替換。
后端(OAP Server)使用YML定義的模塊化。SkyWalking將模塊化定義為模塊(Module)和實現(xiàn)(Provider)兩部分。模塊為抽象概念,提供對外服務(wù)方法的定義和聲明;Provider需要實現(xiàn)這些服務(wù)方法,同時聲明此實現(xiàn)依賴的其他模塊。值得注意的是,模塊本身不聲明依賴,依賴由實現(xiàn)(Provider)聲明。這種模式允許用戶替換和新增所需的模塊,并進行組織。
1.3
? ?
輕量化設(shè)計
SkyWalking在設(shè)計之初就提出了輕量化的設(shè)計理念。APM雖然是運維端的核心系統(tǒng),但放在整套業(yè)務(wù)架構(gòu)下,屬于二線支撐系統(tǒng),不承擔系統(tǒng)主要業(yè)務(wù)功能。而絕大多數(shù)的分析系統(tǒng)要求大數(shù)據(jù)作為其核心技術(shù),但是技術(shù)團隊應(yīng)該都了解,大數(shù)據(jù)天然具有維護難度大和門檻高的問題?;诖吮尘?#xff0c;SkyWalking核心要求能夠在非大數(shù)據(jù)架構(gòu)下,使用最輕量級的jar包模式,形成強大的分析能力、擴展能力和模塊化能力。
2
? ?
SkyWalking 的優(yōu)勢
SkyWalking 的優(yōu)勢在于它緊跟當前的技術(shù)發(fā)展趨勢,保證同一套 APM 系統(tǒng)適用于傳統(tǒng)架構(gòu)和云原生架構(gòu)。另外,在技術(shù)設(shè)計理念上,SkyWalking 提供了較大的包容性和擴展性,適用于不同的用戶場景和定制需求。
2.1
? ?
傳統(tǒng)分布式架構(gòu)與云原生的一致性支持
隨著近十年服務(wù)化和微服務(wù)化的進程,以RPC和HTTP服務(wù)為通信技術(shù)核心,以注冊中心作為服務(wù)注冊與服務(wù)發(fā)現(xiàn)的架構(gòu),已經(jīng)成為國內(nèi)成熟的微服務(wù)“傳統(tǒng)”架構(gòu)。主流技術(shù)有Spring Cloud、Apache Dubbo等。SkyWalking從2015年項目誕生之初,就把這種傳統(tǒng)的分布式架構(gòu)及自動探針作為最為核心的功能。SkyWalking可以無縫支持已經(jīng)穩(wěn)定的分布式服務(wù)架構(gòu),方便替換傳統(tǒng)的監(jiān)控手段,而無須增加運維團隊和開發(fā)團隊的工作量。
同時,從2018年起,由Google、Lyft和CNCF的Istio與Envoy組成的Service Mesh方案開始流行,提供了在Kubernetes上創(chuàng)新的分布式服務(wù)管理、監(jiān)控和安全管理能力。SkyWalking項目團隊也一直關(guān)注這一動向,在Istio 1.0.4發(fā)布的同時發(fā)布了SkyWalking 6的測試版本,并在3個月后開始發(fā)布SkyWalking 6穩(wěn)定版本。在6.x版本中,SkyWalking針對Istio和Envoy組成的Service Mesh方案提供了核心適配能力。用戶可以認為Service Mesh構(gòu)成了SkyWalking的一種新的語言無關(guān)的探針形式。利用SkyWalking的后端OAP平臺以及UI,可以對Service Mesh管理中的服務(wù)提供同樣的依賴拓撲、服務(wù)性能指標、告警等能力。90%以上的配置與使用其他語言探針(如Java探針)時完全一致。
這也是首個在開源軟件中實現(xiàn)語言探針和Service Mesh一致性解決方案的項目。為不同公司的技術(shù)棧提供統(tǒng)一的監(jiān)控能力,更有利于公司在未來系統(tǒng)架構(gòu)升級中保持監(jiān)控系統(tǒng)的一致性。這個一致性不單單指SkyWalking的使用,更是對于用戶在SkyWalking構(gòu)建的生態(tài)系統(tǒng),如告警平臺、AIOps、指標基線計算系統(tǒng)、彈性計算等,保持一致性。
2.2
? ?
易于維護
SkyWalking一直堅持以易于維護為核心需求,不引入過多的技術(shù)棧,以免成為一個過于復雜的監(jiān)控系統(tǒng)。這其中的深層邏輯在于,監(jiān)控系統(tǒng)作為二線甚至三線系統(tǒng),應(yīng)該利用有限的環(huán)境資源,提供盡可能大的監(jiān)控價值,同時盡可能降低對于運維的要求。在SkyWalking集群模式下,大量公司每日需要采集超過百億級別的監(jiān)控數(shù)據(jù)及明細,SkyWalking不要求使用復雜的大數(shù)據(jù)平臺,以減少系統(tǒng)的入門難度和維護負擔。同時SkyWalking的構(gòu)建集群架構(gòu)比較簡單,用戶只要針對自己的數(shù)據(jù)量,對于不同的存儲平臺(如MySQL、TiDB或Elasticsearch等)具備基本的集群運維能力,就可以輕松監(jiān)控百億級的流量系統(tǒng)。
2.3
? ?
高性能
SkyWalking并不會因為追求簡單、易于維護而降低對性能的要求。SkyWalking內(nèi)置一套針對分布式監(jiān)控專門設(shè)計的可擴展流計算框架(參見第7章),該計算框架針對監(jiān)控數(shù)據(jù)特別設(shè)計了特定的流程,并利用字節(jié)碼技術(shù)來兼顧擴展性和系統(tǒng)性能。
SkyWalking在永輝超市的典型公開案例中,使用15臺OAP節(jié)點和20臺Elasticsearch節(jié)點,就支撐了250多個服務(wù)每天高達3TB的監(jiān)控數(shù)據(jù),數(shù)據(jù)流量超過百億。在6.x中,SkyWalking性能從6.0-GA到6.4,每個版本都得到了明顯提升。
2.4
? ?
利于二次開發(fā)和集成
SkyWalking的二次開發(fā)和集成的便利性主要分為兩方面。
面向協(xié)議和模塊化的設(shè)計。面向協(xié)議保證其他的探針接入,只需要學習協(xié)議就可以輕松完成對接。而模塊化給予用戶深度定制的能力,模塊實現(xiàn)的可切換使用戶可以對分布式計算過程、集群管理與協(xié)調(diào)模式、存儲、告警引擎、可視化頁面等進行個性化定制。
大量的SkyWalking內(nèi)置實現(xiàn)提供了第三方網(wǎng)絡(luò)接口,HTTP或gRPC接口。用戶可以使用第三方程序進行對接,而非進行程序改造。這樣能保證SkyWalking版本升級時周邊生態(tài)的穩(wěn)定。而且在容器化大行其道的今天,網(wǎng)絡(luò)接口集成的方式也更為友好。
SkyWalking的幾百家公開用戶大量使用了這些擴展方式,定制了豐富的內(nèi)部系統(tǒng),也保證了SkyWalking內(nèi)核的穩(wěn)定和高通用性。
關(guān)于SkyWalking的實戰(zhàn)內(nèi)容推薦閱讀《Apache SkyWalking實戰(zhàn)》一書,本文經(jīng)出版社授權(quán)發(fā)布。
3
? ?
福利時間
dotnet跨平臺 聯(lián)合機械工業(yè)華章圖書給大家?guī)砀@麜r間。
送書規(guī)則:截止2020年7月31日13:30前在留言區(qū),分享你在SkyWalking方面的心得與踩坑經(jīng)驗、或者對新技術(shù)的更新、迭代有何獨特的個人見解,精選留言點贊前8名各送出此書一本。
注:獲得贈書資格的讀者須于8小時內(nèi)聯(lián)系小編發(fā)送詳細收貨信息,逾期則視為主動放棄。
推薦語:《Apache SkyWalking實戰(zhàn)》從功能使用、項目設(shè)計、核心模塊、工作原理、擴展實踐5個維度全面講解SkyWalking,由SkyWalking的創(chuàng)始人吳晟與核心開發(fā)團隊撰寫,得到了來自華為、百度、螞蟻金服、京東數(shù)科、Tetrate.io的5位資深技術(shù)專家的聯(lián)袂推薦。
總結(jié)
以上是生活随笔為你收集整理的这么多Apache顶级项目,SkyWalking为何一枝独秀?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .Net Core in Docker极
- 下一篇: Istio 中的授权策略详解