💡
原文中文,约7800字,阅读约需19分钟。
📝
内容提要
本文介绍了 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。
🏷️
标签
➡️