内容提要
本文介绍了 DolphinScheduler 使用 Netty 实现 Master Worker 模块间的 RPC 通信的基础网络模型,以及如何使用 Netty。文章详细介绍了 Netty 的实现方式,包括 Netty-Server 和 Netty-Client 的定义,以及如何注册 handle 处理链和监听指定端口。同时,文章还介绍了 DolphinScheduler 的网络通信模型,包括 Master 和 Worker 间的通信,以及如何根据消息体调用对应的本地方法。最后,文章总结了字节在模块间的流转过程。
关键要点
-
DolphinScheduler 使用 Netty 实现 Master Worker 模块间的 RPC 通信。
-
Netty 是一款高性能的 Java 通信框架,类似于 C++ RPC 库。
-
Netty-Server 需要定义两个 NioEventLoopGroup 线程组,分别用于接受连接和网络读写。
-
Netty-Client 需要定义一个 NioEventLoopGroup 线程组,通过 BootStrap 注册处理链。
-
Master 和 Worker 之间的通信是对等的,均需实现 RPC Server/Client。
-
底层代码复用,Master 和 Worker 通过各自的 RPC 客户端和服务器进行通信。
-
RPC 通过注册不同的 NettyRequestProcessor 类型来处理不同的请求。
-
DolphinScheduler 使用自定义的 NettyEncoder 和 NettyDecoder 进行序列化和反序列化。
-
Command 对象的字节流包含魔数、版本、请求类型、自增ID、上下文和消息内容。
-
NettyRemotingClient 和 NettyRemotingServer 实现了 Netty 的标准流程。
-
NettyServerHandler 负责处理网络 I/O 数据,主要关注 channelRead 方法。
-
分发任务的 RPC 流程中,Master 创建 Command 对象并发送给 Worker。
-
Worker 注册 TASK_DISPATCH_REQUEST 的处理器,处理接收到的任务调度命令。
-
字节在模块间的流转过程是 BaseCommand -> Command -> buf -> buf -> Command -> BaseCommand。