歡迎光臨
每天分享高質量文章

鏈路追蹤 SkyWalking 原始碼分析 —— Collector gRPC Server Manager

本文主要基於 SkyWalking 3.2.6 正式版

  • 1. 概述
  • 2. GRPCManagerModule
  • 3. GRPCManagerProvider
  • 4. GRPCManagerService

1. 概述

本文主要分享 Collector gRPC Server Manager。Collector 通過該管理器,管理啟動的多個 gRPC Server,例如 Agent gRPC Server、Remote gRPC Server 。

友情提示:建議胖友已經讀過 《SkyWalking 原始碼分析 —— Collector Server Component 服務器組件》

另外,本文和 《SkyWalking 原始碼分析 —— Collector Jetty Server Manager》 相似度 99%

gRPC Server Manager 在 SkyWalking 架構圖處於如下位置( 紅框 ) :

FROM https://github.com/apache/incubating-skywalking

下麵我們來看看整體的專案結構,如下圖所示 :

? 代碼量非常少,考慮到這是個單獨的專案,所以單獨成文。

2. GRPCManagerModule

org.skywalking.apm.collector.grpc.manager.GRPCManagerModule ,實現 Module 抽象類,gRPC Server 管理器 Module 。

#name() 實現方法,傳回模塊名為 "gRPC_manager"

#services() 實現方法,傳回 Service 類名:GRPCManagerService 。

3. GRPCManagerProvider

org.skywalking.apm.collector.grpc.manager.GRPCManagerProvider ,實現 ModuleProvider抽象類,gRPC Server 管理器組件服務提供者。

#name() 實現方法,傳回組件服務提供者名為 "gRPC"

module() 實現方法,傳回組件類為 GRPCManagerModule 。

#requiredModules() 實現方法,傳回依賴組件為空。


#prepare(Properties) 實現方法,執行準備階段邏輯。

  • 第 55 行 :創建 GRPCManagerServiceImpl 物件,並呼叫 #registerServiceImplementation(…) 父類方法,註冊到 services

#start() 實現方法,執行啟動階段邏輯。目前是個空方法

#notifyAfterCompleted() 實現方法,執行啟動完成邏輯。

  • 第 63 至 69 行 :遍歷註冊的服務器串列,逐個呼叫 GRPCServer#start() 方法,進行啟動。

4. GRPCManagerService

org.skywalking.apm.collector.grpc.manager.service.GRPCManagerService ,繼承 Service接口,gRPC Server 管理器服務接口

#createIfAbsent(host, port) 接口方法,創建 gRPC Server ,若不存在。

怎麼沒有類似 JettyManagerService 的 #addHandler(...) 方法?目前是呼叫方直接呼叫 #createIfAbsent(host, port) 方法,獲得 gRPC Server 後,後呼叫 Server#addHandler(ServerHandler) 方法。例如:

  • `AgentModuleGRPCProvider#start(Properties)`
  • `RemoteModuleGRPCProvider#start(Properties)`

4.1 GRPCManagerServiceImpl

org.skywalking.apm.collector.grpc.manager.service.GRPCManagerServiceImpl ,gRPC Server 管理器服務實現類

構造方法 ,使用來自 GRPCManagerProvider 的 servers 服務器陣列。這是為什麼 GRPCManagerProvider 沒有對 servers 做新增操作,結果裡面有資料的原因

#createIfAbsent(host, port) 實現方法,創建 gRPC Server ,若不存在。判斷方式為 host + port為唯一。

已同步到看一看
赞(0)

分享創造快樂