分布式追踪 & APM 系统 SkyWalking 源码分析 —— Collector gRPC Server Manager

3,576 阅读3分钟
原文链接: www.iocoder.cn
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 www.iocoder.cn/SkyWalking/… 「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 SkyWalking 3.2.6 正式版


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

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 github.com/apache/incu…

下面我们来看看整体的项目结构,如下图所示 :

😈 代码量非常少,考虑到这是个单独的项目,所以单独成文。

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) 方法。例如:

4.1 GRPCManagerServiceImpl

org.skywalking.apm.collector.grpc.manager.service.GRPCManagerServiceImpl ,gRPC Server 管理器服务实现类

构造方法 ,使用来自 GRPCManagerProvider 的 servers 服务器数组。这是为什么 GRPCManagerProvider 没有对 servers 做新增操作,结果里面有数据的原因。

#createIfAbsent(host, port) 实现方法,创建 gRPC Server ,若不存在。判断方式为 host + port 为唯一。

666. 彩蛋

知识星球

呵呵哒的一篇,嘿嘿。

胖友,分享个朋友圈可好?