一、概述

Spark RPC 路由层负责将 RPC 消息路由到要该对此消息处理的 RpcEndpoint。在 Spark 中,RpcEndpoint 使用 Dispatcher、Inbox 和 Outbox 三个组件进行消息路由。当一个 RpcEndpoint 接收到来自远程进程的消息时,Dispatcher 会将消息存储在 RpcEndpoint 的 Inbox 中,然后 RpcEndpoint 的线程会从 Inbox 中取出消息并处理它。当 RpcEndpoint 需要向远程进程发送消息时,它会使用 Outbox 将消息发送到远程进程的 Dispatcher。

二、架构设计

2.1. 消息分发器 Dispatcher

消息分发器 Dispatcher 是有效提高 NettyRpcEnv 对消息异步处理并最大提升并行处理能力的前提。

2.2. Inbox&Outbox

2.2.1. 指令消息收件箱 Inbox

InboxMessage 是 Inbox 内的消息。InboxMessage 是一个特质,所有类型的 RPC 消息都继承自 InboxMessage

2.2.2. 指令消息发件箱 Outbox

一个远程端点对应一个发件箱,当消息放入 Outbox 后,紧接着将消息通过 TransportClient 发送出去。

消息放入发件箱以及发送过程是在同一个线程中进行、这样做的主要原因是远程消息分为 RpoOutboxMessage 和
OneWayOutboxMessege 两种消息,而针对于需要应答的消息直接发送且需要得到结果进行处理。

Outbox总结