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

本文主要基于 SkyWalking 3.2.6 正式版


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

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

1. 概述

本文主要分享 SkyWalking Collector Server Component 服务器组件。Collector 通过服务器,提供 API 接口给调用方,例如 Agent 、WebUI 。

Server Component 在 SkyWalking 架构图处于如下位置( 红框 ) :

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

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

OK,我们从接口到实现的顺序进行分享。

2. 接口

2.1 Server

org.skywalking.apm.collector.server.Server ,服务器接口。其实现子类,如下类图 :

#hostPort() 接口方法,获得服务器地址。
#serverClassify() 接口方法,获得服务器分类。

#initialize() 接口方法,初始化服务器。 #start() 接口方法,启动服务器。

#addHandler() 接口方法,添加请求处理器( ServerHandler )

2.2 ServerHandler

org.skywalking.apm.collector.server.ServerHandler ,服务器处理器接口。其实现子类,如下类图 :

ServerHandler 无任何接口方法。

一个 ServerHandler 对应一个请求的处理。

3. gRPC 实现

3.1 GRPCServer

org.skywalking.apm.collector.server.grpc.GRPCServer ,基于 gRPC 的服务器实现。

#hostPort() 实现方法,获得服务器地址。
#serverClassify() 实现方法,获得服务器分类为 "Google-RPC"

#initialize() 实现方法,调用 io.grpc.netty.NettyServerBuilder#forAddress(address) 方法,NettyServerBuilder 。此处,服务器并未创建与启动。
#start() 实现方法,创建 io.grpc.Server 对象,并启动服务器。

#addHandler(handler) 实现方法,调用 NettyServerBuilder#addService(...) 方法,添加 gRPC 请求处理器( GRPCHandler )。

目前,GRPCServer 使用在 collector-agent-grpc-provider / collector-remote-grpc-provider 项目。

3.2 GRPCHandler

org.skywalking.apm.collector.server.grpc.GRPCHandler ,gRPC 请求处理器接口。其实现子类,如下类图 :

GRPCHandler 无任何接口方法。

4. Jetty 实现

3.1 JettyServer

org.skywalking.apm.collector.server.jetty.JettyServer ,基于 Jetty 的服务器实现。

#hostPort() 实现方法,获得服务器地址。
#serverClassify() 实现方法,获得服务器分类为 "Jetty"

#initialize() 实现方法,创建 org.eclipse.jetty.server.Serverorg.eclipse.jetty.servle.ServletContextHandler 对象。此处,服务器并未启动。
#start() 实现方法,启动服务器。

#addHandler(handler) 实现方法,使用 ServerHandler 创建 org.eclipse.jetty.servlet.ServletHolder 对象,并调用 ServletContextHandler#addServlet(servlet, pathSpec) 方法进行添加。

目前,JettyServer 使用在 collector-agent-jetty-provider / collector-ui-jetty-provider 项目。

3.2 JettyHandler

org.skywalking.apm.collector.server.jetty.JettyHandler ,继承 javax.servlet.http.HttpServlet 抽象类,Jetty 请求处理。

#pathSpec() 抽象方法,请求路径定义。

#doGet(HttpServletRequest) 抽象方法,处理 Get 请求,并返回 com.google.gson.JsonElement 对象。

#doPost(HttpServletRequest) 抽象方法,处理 Post 请求,并返回 com.google.gson.JsonElement 对象。

HttpServlet 所有方法被重写,并标记 final 修饰符,不允许子类重写

666. 彩蛋

知识星球

又双叒叕成功更新了一篇水文。😜

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

文章目录
  1. 1. 1. 概述
  2. 2. 2. 接口
    1. 2.1. 2.1 Server
    2. 2.2. 2.2 ServerHandler
  3. 3. 3. gRPC 实现
    1. 3.1. 3.1 GRPCServer
    2. 3.2. 3.2 GRPCHandler
  4. 4. 4. Jetty 实现
    1. 4.1. 3.1 JettyServer
    2. 4.2. 3.2 JettyHandler
  5. 5. 666. 彩蛋