DolphinScheduler源码阅读日记(三)通信机制

DolphinScheduler源码阅读日记(三)通信机制

系统架构图

概述

DolphinScheduler的通信机制是通过Netty来实现的,在Netty上加做了一些封装和抽象


Netty简介

功能介绍

Netty功能特性
Netty 是一个基于 Java 的高性能网络应用框架,广泛用于开发高并发、低延迟的网络服务器和客户端。它提供了一组丰富的 API 和工具,简化了网络通信的开发过程,特别是在处理大量并发连接和数据流时。

  • 为各种传输类型(阻塞和非阻塞socket)提供统一API
  • 基于灵活且可扩展的事件模型,允许明确分离关注点
  • 高度可定制的线程模型——单线程、一个或多个线程池(如 SEDA)
  • 真正的无连接数据报socket支持(自3.1版起)

基础概念

概念 含义
Channel Channel 是 Netty 中用于网络通信的基本抽象,表示一个到网络套接字(Socket)的连接。它类似于 Java NIO 的 Channel,但提供了更多的高级功能。Channel 可以是 TCP、UDP 或者文件传输等不同类型的连接
EventLoop EventLoop 是 Netty 中的事件处理核心。每个 EventLoop 都与一个或多个 Channel 关联,负责处理这些 Channel 上的所有 I/O 操作,包括读写事件的调度。EventLoop 使用单线程模式,可以有效地避免线程间竞争
ChannelHandler ChannelHandler 是用于处理 Channel 上的 I/O 事件的组件。Netty 通过 ChannelHandler 实现了灵活的事件处理机制。常见的 ChannelHandler 类型包括 ChannelInboundHandler 和 ChannelOutboundHandler,分别用于处理入站和出站数据
Pipeline Pipeline 是 Netty 中的一个重要概念,它是 ChannelHandler 的有序链表。所有与 Channel 相关的事件(如读、写、连接等)都会沿着 Pipeline 依次传递。开发者可以根据需要在 Pipeline 中插入不同的 ChannelHandler 来实现定制的逻辑
Bootstrap Bootstrap 是用于配置和启动客户端或服务器端 Channel 的类。它简化了网络应用程序的启动过程,开发者可以通过 Bootstrap 设置相关参数,如线程池、事件处理器等
ByteBuf ByteBuf 是 Netty 提供的用于高效处理字节数据的缓冲区。与 Java NIO 中的 ByteBuffer 不同,ByteBuf 提供了更多的操作方法,并且支持动态扩展、引用计数等特性,极大地提高了处理二进制数据的效率
Future&Promise Future 和 Promise 是 Netty 中的异步编程模型,用于表示异步操作的结果。Future 表示一个尚未完成的操作结果,而 Promise 则是可以手动设置结果的 Future。这两个接口帮助开发者处理异步任务的回调逻辑
Transport Transport 是 Netty 中的底层抽象,负责实现具体的网络协议(如 TCP、UDP)的传输机制。不同的 Transport 实现可以有不同的 I/O 模型(如 NIO、Epoll 等),适用于不同的操作系统和性能需求

通信机制实现

关键类

MasterServerWorkerServer中分别都存在一个RpcServerRpcClient,用于作为RPC的服务端和客户端
MasterServer通信相关类

序列化与反序列化

Messgae的序列化与反序列化

事件处理器

如何映射到对应的Processor处理(值得借鉴)
##

作者

jszero

发布于

2024-08-23

更新于

2025-05-13

许可协议

评论