前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >链路追踪 SkyWalking 源码分析 —— Collector Server Component 服务器组件

链路追踪 SkyWalking 源码分析 —— Collector Server Component 服务器组件

作者头像
芋道源码
发布2019-06-21 15:39:32
6710
发布2019-06-21 15:39:32
举报
文章被收录于专栏:芋道源码1024

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

本文主要基于 SkyWalking 3.2.6 正式版

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

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对象。

  • 该抽象方法会被 `#doGet(HttpServletRequest, HttpServletResponse)` 方法调用。
    • 成功时,调用 `#reply(HttpServletResponse, JsonElement)` 方法,返回 JSON 。
    • 错误时,调用 `#replyError(HttpServletResponse, errorMessage, status)` 方法,返回 JSON 。

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

  • 该抽象方法会被 `#doPost(HttpServletRequest, HttpServletResponse)` 方法调用。

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


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
  • 2. 接口
    • 2.1 Server
      • 2.2 ServerHandler
      • 3. gRPC 实现
        • 3.1 GRPCServer
          • 3.2 GRPCHandler
          • 4. Jetty 实现
            • 3.1 JettyServer
              • 3.2 JettyHandler
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档