SkyWalking架構設計
SkyWalking 官方架構圖對 SkyWalking 的整體架構進行了非常直觀的描述。SkyWalking 由以下 4 個核心部分組成。
探針(Tracing 和 Mestrices):可以是語言探針,也可以是其他項目的協議。
OAP品台(Observability Analysis Platform):或稱 OAP Server。它是一個高度組件化的輕量級分析程序,由兼容各種探針的 Receiver、流式分析內核和查詢內核三部分組成。
存儲實現(Storage Implementors):SkyWalking 的 OAP Server 支持多種存儲實現,並且提供了標准接口,可以實現其他存儲。
面向協議設計
模塊化設計
輕量級設計
1.1 面向協議設計
面向協議設計是 SkyWalking 從 5.x 開始嚴格遵守的首要設計原則。
1. 探針協議
探針協議分為四大類。
-
- 語言探針上報協議。此協議包括語言探針的注冊、Metrics 數據上報、Tracing 數據上報、命令下行,以及 Service Mesh 中使用的 Telemetry 協議。所有基於語言(Java、.NET、Node.js、PHP、Go 等)的探針都需要嚴格遵守此協議定義。此協議從 v6 版本開始全部以 gRPC 服務放肆對外提供。
- 語言探針交互協議。因為分布式追蹤,探針間需要借助 HTTP Header、MQ Header 等應用間通信管道進行交互。此協議都需要嚴格遵守此協議定義。此協議從 v2 開始執行與 v1 不同的編碼方法,加入了強制 Base64 的要求。將從 SkyWalking 8 開始執行的全新 v3 協議,簡化了編碼,提供了更多特性,比如透傳業務信息、探針交互能力等。
- Service Mesh 協議。此協議是 SkyWalking 針對 Service Mesh 抽象的專有協議,任何 Mesh 類的服務都可以通過此協議直接上行 Telemetry 數據,用於計算服務 Metrics 和拓撲圖。
- 第三方協議。針對大型的第三方開源項目,尤其是 Service Mesh 核心平台 Istio 和 Envoy,提供核心協議適配,支持針對 Istio+Envoy 的 Service Mesh 進行無縫監控。
2. 查詢協議
查詢協議使用 GraphQL 格式定義的查詢協議。SkyWalking 為了更好的擴展性、更靈活的組合查詢模式,選擇了由 Facebook 在 2012 年開源的 GraphQL。GraphQL 在開源和商業項目中已經得到了廣泛運用。協議格式的預定義和多種查詢組合使用提供了 UI 和第三方系統良好的集成能力。熟悉 SkyWalking 歷史的讀者會知道,SkyWalking 在6.0.0-GA 之后的版本,更換了全新的 RocketBot UI 作為默認 UI,這個過程得益於 GrapQL 的靈活性,后端協議和實現可以完全不變。社區中已有大量公司基於此協議包裝了雲平台產品的UI。
查詢協議分為以下 6 類:
-
- 元數據查詢:查詢在 SkyWalking 注冊的服務、服務實例、Endpoint等元數據信息。
- 拓撲關系查詢:查詢全局或者單個服務或 Endpoint 的拓撲圖及依賴關系。
- Metrics 指標查詢:線性指標查詢。
- 聚合指標查詢:區間范圍均值查詢及 TopN 查詢等。
- Trace 查詢:追蹤明細查詢。
- 告警查詢。
除了上述量大類協議外,部分模塊也存在一些模塊內協議,如導出的數據格式協議、告警協議、動態配置服務協議等。這些協議與執行模塊的默認實現有關,屬於 SkyWalking 默認對外集成協議的范圍,考慮到模塊化設計,這些協議本身也是可以替換。
1.2 模塊化設計
模塊化設計,旨在開源項目為內核,為更多的企業內部定制服務、商業產品的二次包裝及插拔機制與擴展點。開源項目的一致性升級至關重要,模塊化設計,明確接口邊界,使得擴展很容易跟上開源版本升級的節奏。對於商業包裝和開源產品的迭代發展,這是不可缺少的一環。
Apache SkyWalking 作為 Apache 定頂級項目,基於商業友好的 Apahce 2.0 開源協議,在設計上也充分考慮了定制化及二次開發的可能性。SkyWalking 根據探針和服務端的不同特性,使用了兩種不同的模塊化機制。
Java 探針端,Java 使用了較為緊湊的實現,主要使用 SPI 將核心服務隔離成替換狀態,用戶可以像開發 plugin 一樣,只需將新的服務實現放在 plugin 目錄中,即可實現自動替換。
后端(OAP Server)使用 YML 定義的模塊化。SkyWalking 將模塊化定義為模塊(Module)和實現(Provider)兩部分。模塊為抽象概念,提供對外服務方法的定義和聲明;Provider 需要實現這些服務方法,同時聲明此實現依賴的其他模塊。值得注意的是,模塊本身不聲明依賴,依賴由實現(Provider)聲明。這種模式允許用戶替換和新增所需的模塊,並進行組織。
1.3 輕量化設計
SkyWalking 在設計之初就提出了輕量化的設計理念。APM 雖然是運維的核心系統,但放在整套業務架構下,屬於二線支撐系統,不承擔系統主要業務功能。而絕大多數的分析系統要求大數據作為其核心技術,但是技術團隊應該都都了解,大數據天然具有維護難度大和門檻高的問題。基於此背景,SkyWalking 核心要求能夠在非大數據架構下,使用最輕量級的jar包模式,形成強大的分析能力、擴展能力和模塊化能力。
1.4 SkyWalking 的優勢
SkyWalking 的優勢在於它緊跟當前的而技術發展趨勢,保證同一套 APM 系統適用於傳統架構和雲原生架構。另外,在技術設計理念上,SkyWalking 提供了較大的包容性和擴展性,適用於不同的用戶場景和定制需求。
-
- 傳統分布式絞股與雲原生的一致性支持
- 易於維護
- 高性能
- 利於二次開發和繼承