SkyWalking架構深度解析:分布式系統監控的利器

一、SkyWalking概述

????????SkyWalking是一款開源的APM(應用性能監控)系統,專門為微服務、云原生和容器化架構設計。它由Apache軟件基金會孵化并畢業,已成為分布式系統監控領域的明星項目。

核心特性

  • ?分布式追蹤?:跨服務調用鏈路的完整追蹤
  • ?服務拓撲分析?:自動繪制服務間依賴關系圖
  • ?性能指標監控?:JVM、CLR、線程池等運行時指標
  • ?告警系統?:基于規則的實時告警機制
  • ?日志集成?:與分布式日志系統無縫對接

二、整體架構設計

SkyWalking采用模塊化設計,主要分為以下幾個核心組件:

1. Agent/探針層

?架構角色?:數據采集端

?實現機制?:

  • 基于Java Agent技術實現無侵入式埋點
  • 支持多種語言的探針(Java, .NET, NodeJS等)
  • 采用插件化架構,可按需擴展監控能力

?核心功能?:

  • 方法級追蹤數據采集
  • JVM指標收集
  • 上下文傳播(跨進程/跨線程)
  • 自適應采樣控制

2. OAP(Observability Analysis Platform)服務層

?架構角色?:數據處理中樞

?模塊組成?:

?

1. 接收層(Receiver)?
  • ?協議支持?:
    • Agent上報:gRPC(SkyWalking原生協議)
    • 第三方集成:HTTP/JSON(如OpenTelemetry)、Kafka(日志流)
  • ?關鍵組件?:
    • Receiver-Trace:調用鏈數據解析
    • Receiver-Meter:Prometheus格式指標解析
    • Receiver-JVM:Java探針性能數據接收
?2. 數據總線(Data Bus)?
  • ?作用?:異步解耦接收層與分析層
  • ?實現?:
    • 內存隊列(默認):基于Disruptor高性能環形隊列
    • 擴展支持:Kafka(集群部署時啟用)
?3. 分析引擎(Analyzer)?
  • ?實時計算?:
    • OAL腳本:定義指標計算規則(如service_resp_time = avg(endpoint.latency)
    • MAL引擎:數學告警表達式(如error_rate = sum(error)/sum(total)
  • ?拓撲構建?:自動識別服務依賴關系(基于Trace的上下游分析)
?4. 聚合器(Aggregator)?
  • ?多級聚合?:
    • L1聚合:分鐘級指標(原始精度)
    • L2聚合:小時/天級指標(降精度存儲)
  • ?優化策略?:時間窗口滾動計算(減少重復掃描)
?5. 告警引擎(Alert Engine)?
  • ?規則觸發?:
    • 流式檢測(如service_sla < 99%持續5分鐘)
    • 支持動態加載規則(無需重啟服務)
  • ?輸出事件?:通過gRPC/Kafka推送至Alarm Service
?6. 存儲適配層(Storage Adapter)?
  • ?多存儲支持?:
    • 時序數據:Elasticsearch(默認)、TiDB
    • 元數據:H2(嵌入式)、MySQL
  • ?分片策略?:按時間分片(如metrics-202306
?7. 查詢引擎(Query Engine)?
  • ?統一接口?:
    • GraphQL:拓撲/追蹤查詢
    • PromQL:指標查詢(兼容Prometheus)
  • ?緩存優化?:熱點數據LRU緩存

核心價值

  • 實時流式分析?(Analyzer + Aggregator)
  • ?可插拔架構?(通過Storage Adapter對接不同存儲)
  • ?一體化觀測能力?(Metrics/Tracing/Logging聯動)

3. UI層

?架構特點?:

  • 基于React+Ant Design實現
  • 動態儀表盤配置
  • 拓撲圖自動布局算法
  • 多租戶支持

三、核心架構設計亮點

1. 混合探針模型

/*** Java Agent的入口方法,由JVM在應用主程序啟動前自動調用* * @param args  從-javaagent參數傳入的配置字符串(如agent.jar=config.properties)* @param inst  JVM提供的Instrumentation實例,用于類加載攔截和字節碼修改*/
public static void premain(String args, Instrumentation inst) {// 1. 創建插件掃描器// PluginConfig會加載plugins/目錄下的所有插件定義文件(如apm-dubbo-plugin.xml)// PluginFinder根據這些配置建立"類名->對應插件"的映射關系PluginFinder finder = new PluginFinder(new PluginConfig());// 2. 安裝字節碼增強器// 將Instrumentation實例與插件掃描器綁定,后續所有類加載時都會觸發掃描器檢查// ByteBuddyAgent內部通過java.lang.instrument.ClassFileTransformer實現字節碼注入ByteBuddyAgent.install(inst, finder);
}

支持三種數據采集模式:

  • ?自動探針?:零代碼修改
  • ?手動埋點?:通過@Trace注解等
  • ?服務網格集成?:Istio/Envoy數據適配

2. 高性能數據處理流水線

關鍵優化點:

  • 異步非阻塞IO模型
  • 多級緩沖隊列
  • 批處理寫優化
  • 壓縮傳輸

3. 可擴展存儲架構

# 存儲模塊配置(支持動態擴展)
storage:# 1. 存儲類型選擇器 - 核心擴展點# 通過環境變量SW_STORAGE動態指定存儲類型(默認elasticsearch)# 可擴展值:elasticsearch/h2/mysql/tidb/influxdb等selector: ${SW_STORAGE:elasticsearch} # 2. Elasticsearch配置組 - 插件化實現案例elasticsearch:# 命名空間隔離(多租戶支持)nameSpace: ${SW_NAMESPACE:""}# 集群節點動態配置 - 支持水平擴展# 格式:ip1:port,ip2:port 可通過SW_STORAGE_ES_CLUSTER_NODES覆蓋clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}# 其他可擴展參數示例:# - indexShardsNumber: 分片數擴展# - bulkActions: 批量寫入規模調整 

支持存儲類型:

  • Elasticsearch(生產推薦)
  • H2(開發測試)
  • TiDB/MySQL(關系型方案)
  • BanyanDB(SkyWalking自研時序數據庫)

四、分布式協調與一致性保障機制?

?????????該架構通過分片路由、多級聚合和一致性協議的組合,在分布式環境下實現數據有序處理。

1. 數據分片路由機制?

  • ?哈希分片策略?:Agent根據TraceID/ServiceID等關鍵字段計算哈希值,確定目標OAP節點,確保相同業務鏈路的請求始終路由到同一節點處理
  • ?動態負載均衡?:OAP集群通過心跳檢測實時同步節點負載狀態,Agent側動態調整路由權重(如基于CPU/內存使用率)
  • ?混合角色設計?:默認所有OAP節點均為Mixed角色(同時承擔接收和聚合),大規模部署時可分離為ReceiverAggregator兩類專用節點

2. 分布式計算協同?

處理階段

協調機制

?初次聚合?

Receiver節點完成本地指標計算,需跨節點聚合的數據通過Data Bus分發

?二次聚合?

Aggregator節點按分片規則接收數據,完成全局聚合后寫入存儲

?沖突解決?

采用時間戳+版本號機制,對重復數據執行去重(如選擇時間戳最新的記錄)

3. 一致性保障技術?

  • ?最終一致性模型?:通過異步批處理實現指標聚合,容忍秒級延遲但保證最終結果準確
  • ?向量時鐘(Vector Clock)?:記錄數據版本演化路徑,解決跨節點時鐘不同步導致的分歧
  • ?冪等設計?:所有數據處理操作支持重復執行,避免網絡重傳導致的數據重復計算

4. 容錯與恢復?

  • ?檢查點(Checkpoint)?:定期持久化處理進度,故障恢復時從最近檢查點繼續處理
  • ?冗余副本?:關鍵數據在多個OAP節點保留副本,主節點故障時自動切換
  • ?補償機制?:對超時/失敗任務啟動重試或回滾,確保數據不丟失

五、性能優化實踐

?1. Agent端優化?:

  1. 適當調整采樣率
  2. 過濾非關鍵Span
  3. 啟用壓縮傳輸

?2. 服務端優化?:

core:default:# 調整工作線程數restThreads: ${SW_CORE_REST_THREADS:2}# 增大處理隊列restQueueSize: ${SW_CORE_QUEUE_SIZE:10000}

?3. 存儲層優化?:

????????a. ES分片策略優化

????????b. 冷熱數據分離

????????c. 索引生命周期管理

六、與其他APM系統架構對比

特性

SkyWalking

Zipkin

Pinpoint

代碼侵入性

擴展性

高(模塊化)

一般

一般

存儲多樣性

支持多種

有限

HBase為主

語言支持

多語言

多語言

Java為主

云原生支持

優秀

一般

有限

結語

????????SkyWalking通過其模塊化、可擴展的架構設計,在分布式系統監控領域展現出強大的適應能力。其架構演進始終圍繞三個核心原則:

  1. ?對業務透明?:最小化侵入性
  2. ?高性能處理?:應對大規模部署
  3. ?開放生態?:多語言多協議支持

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83686.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83686.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83686.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Matlab程序設計基礎

matlab程序設計基礎 程序設計函數文件1.函數文件的基本結構2.創建并使用函數文件的示例3.帶多個輸出的函數示例4.包含子函數的函數文件 流程控制1. if 條件語句2. switch 多分支選擇語句3. try-catch 異常處理語句ME與lasterr 4. while 循環語句5. for 循環語句break和continue…

Client-Side Path Traversal 漏洞學習筆記

近年來,隨著Web前端技術的飛速發展,越來越多的數據請求和處理邏輯被轉移到客戶端(瀏覽器)執行。這大大提升了用戶體驗,但也帶來了新的安全威脅。其中,Client-Side Path Traversal(客戶端路徑穿越,CSPT)作為一種新興的漏洞類型,逐漸受到安全研究者和攻擊者的關注。本文…

基于Socketserver+ThreadPoolExecutor+Thread構造的TCP網絡實時通信程序

目錄 介紹&#xff1a; 源代碼&#xff1a; Socketserver-服務端代碼 Socketserver客戶端代碼&#xff1a; 介紹&#xff1a; socketserver是一種傳統的傳輸層網絡編程接口&#xff0c;相比WebSocket這種應用層的協議來說&#xff0c;socketserver比較底層&#xff0c;soc…

【無標題】平面圖四色問題P類歸屬的嚴格論證——基于拓撲收縮與動態調色算法框架

平面圖四色問題P類歸屬的嚴格論證——基于拓撲收縮與動態調色算法框架 --- #### **核心定理** 任意平面圖 \(G (V, E)\) 的四色著色問題可在多項式時間 \(O(|V|^2)\) 內求解&#xff0c;且算法正確性由以下三重保證&#xff1a; 1. **拓撲不變性**&#xff08;Kuratowsk…

HALCON 深度學習訓練 3D 圖像的幾種方式優缺點

HALCON 深度學習訓練 3D 圖像的幾種方式優缺點 ** 在計算機視覺和工業檢測等領域&#xff0c;3D 圖像數據的處理和分析變得越來越重要&#xff0c;HALCON 作為一款強大的機器視覺軟件&#xff0c;提供了多種深度學習訓練 3D 圖像的方式。每種方式都有其獨特的設計思路和應用場…

pytest中的元類思想與實戰應用

在Python編程世界里&#xff0c;元類是一種強大而高級的特性&#xff0c;它能在類定義階段深度定制類的創建與行為。而pytest作為熱門的測試框架&#xff0c;雖然沒有直接使用元類&#xff0c;但在設計機制上&#xff0c;卻暗含了許多與元類思想相通的地方。接下來&#xff0c;…

以太網幀結構和封裝【三】-- TCP/UDP頭部信息

TCP頭部用于建立可靠連接、流量控制及數據完整性校驗。 Ipv4封裝tcp報&#xff1a; Ipv6封裝tcp報&#xff1a; UDP頭部信息 UDP關鍵協議特性&#xff1a; 1&#xff09;無連接&#xff1a;無需握手&#xff0c;直接發送數據。 2&#xff09;不可靠性&#xff1a;不保證數據…

MySQL補充知識點學習

書接上文&#xff1a;MySQL關系型數據庫學習&#xff0c;繼續看書補充MySQL知識點學習。 1. 基本概念學習 1.1 游標&#xff08;Cursor&#xff09; MySQL 游標是一種數據庫對象&#xff0c;它允許應用程序逐行處理查詢結果集&#xff0c;而不是一次性獲取所有結果。游標在需…

基于InternLM的情感調節大師FunGPT

基于書生系列大模型&#xff0c;社區用戶不斷創造出令人耳目一新的項目&#xff0c;從靈感萌發到落地實踐&#xff0c;每一個都充滿智慧與價值。“與書生共創”將陸續推出一系列文章&#xff0c;分享這些項目背后的故事與經驗。歡迎訂閱并積極投稿&#xff0c;一起分享經驗與成…

【拓撲】1639.拓撲排序

題目描述 這是 2018 2018 2018 年研究生入學考試中給出的一個問題&#xff1a; 以下哪個選項不是從給定的有向圖中獲得的拓撲序列&#xff1f; 現在&#xff0c;請你編寫一個程序來測試每個選項。 輸入格式 第一行包含兩個整數 N N N 和 M M M&#xff0c;分別表示有向圖…

macOS 上使用 Homebrew 安裝redis-cli

在 macOS 上使用 Homebrew 安裝 redis-cli&#xff08;Redis 命令行工具&#xff09;非常簡單&#xff0c;以下是詳細步驟&#xff1a; 1. 安裝 Redis&#xff08;包含 redis-cli&#xff09; 運行以下命令安裝 Redis&#xff1a; brew install redis這會安裝完整的 Redis 服…

Scratch節日 | 六一兒童節射擊游戲

六一兒童節快樂&#xff01;這款超有趣的 六一兒童節射擊游戲&#xff0c;讓你變身小貓弓箭手&#xff0c;守護節日的快樂時光&#xff01; &#x1f3ae; 游戲玩法 上下方向鍵&#xff1a;控制小貓的位置&#xff0c;自由移動&#xff0c;瞄準目標&#xff01; 空格鍵&#…

[AI Claude] 軟件測試2

好的&#xff0c;我現在為你準備一份預填充好大部分內容的測試報告和PPT內容。這里面的數據是我根據項目結構和常見的測試場景推理和編造的&#xff0c;你需要根據你的實際操作結果&#xff08;包括截圖、實際數據、發現的缺陷等&#xff09;進行替換和修改。 我將按照之前定義…

程序代碼篇---face_recognition庫實現的人臉檢測系統

以下是一個基于face_recognition庫的人臉管理系統,支持從文件夾加載人臉數據、實時識別并顯示姓名,以及動態添加新人臉。系統采用模塊化設計,代碼結構清晰,易于擴展。 一、系統架構 face_recognition_system/ ├── faces/ # 人臉數據庫(按姓名命名子…

Cursor 工具項目構建指南:Java 21 環境下的 Spring Boot Prompt Rules 約束

簡簡單單 Online zuozuo: 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo 簡簡單單 Online zuozuo :本心、輸入輸出、結果 簡簡單單 Online zuozuo : 文章目錄 Cursor 工具項目構建指南:Java 21 環境下的 Spring Boot Prompt Rules 約束前言項目簡…

大模型高效提示詞Prompt編寫指南

大模型高效Prompt編寫指南 一、引言二、核心原則1. 清晰性原則&#xff1a;明確指令與期望2. 具體性原則&#xff1a;提供詳細上下文3. 結構化原則&#xff1a;組織信息的邏輯與層次4. 迭代優化原則&#xff1a;通過反饋改進Prompt5. 簡潔性原則&#xff1a;避免冗余信息 三、文…

gitLab 切換中文模式

點擊【頭像】--選擇settings 選擇【language】,選擇中文&#xff0c;點擊【保存】即可。

vue實現點擊按鈕input保持聚焦狀態

主要功能&#xff1a; 點擊"停頓"按鈕切換對話框顯示狀態輸入框聚焦時保持狀態點擊對話框外的區域自動關閉 以下是代碼版本&#xff1a; <template><div class"input-container"><el-inputv-model"input"style"width: 2…

[春秋云鏡] CVE-2023-23752 writeup

首先奉上大佬的wp表示尊敬&#xff1a;&#xff08;很詳細&#xff09;[ 漏洞復現篇 ] Joomla未授權訪問Rest API漏洞(CVE-2023-23752)_joomla未授權訪問漏洞(cve-2023-23752)-CSDN博客 知識點 Joomla版本為4.0.0 到 4.2.7 存在未授權訪問漏洞 Joomla是一套全球知名的內容管理…