图 4-3 Spark 通讯架构
1) RpcEndpoint:RPC 端点,Spark 针对每个节点( Client/Master/Worker)都称
之为一个 Rpc 端点,且都实现 RpcEndpoint 接口,内部根据不同端点的需求,设计
不同的消息和不同的业务处理,如果需要发送(询问) 则调用 Dispatcher;
2) RpcEnv: RPC 上下文环境, 每个 RPC 端点运行时依赖的上下文环境称为
RpcEnv;
3) Dispatcher:消息分发器,针对于 RPC 端 点 需 要 发 送 消 息 或 者 从 远 程 RPC
接收到的消息,分发至对应的指令收件箱/发件箱。如果指令接收方是自己则存入收件
箱,如果指令接收方不是自己,则放入发件箱;
4) Inbox :指令消息收件箱,一个本地 RpcEndpoint 对应一个收件箱, Dispatcher
在每次向 Inbox 存入消息时, 都将对应 EndpointData 加入内部 ReceiverQueue 中, 另
外 Dispatcher 创建时会启动一个单独线程进行轮询 ReceiverQueue,进行收件箱消息消
费;
5) RpcEndpointRef:RpcEndpointRef 是对远程 RpcEndpoint 的一个引用。当我
们需要向一个具体的 RpcEndpoint 发送消息时,一般我们需要获取到该 RpcEndpoint
的引用,然后通过该应用发送消息。
6) OutBox :指令消息发件箱,对于当前 RpcEndpoint 来说,一个目标
RpcEndpoint 对应一个发件箱, 如果向多个目标 RpcEndpoint 发送信息, 则有多个
OutBox 。当消息放入 Outbox 后,紧接着通过 TransportClient 将消息发送出去。消息放入
发件箱以及发送过程是在同一个线程中进行;
7) RpcAddress : 表示远程的 RpcEndpointRef 的地址, Host + Port。
8) TransportClient:Netty 通信客户端,一个 OutBox 对应一个 TransportClient,
TransportClient 不断轮询 OutBox ,根据 OutBox 消息的 receiver 信息,请求对应的远程
TransportServer;
9) TransportServer : Netty 通 信 服 务 端 , 一 个 RpcEndpoint 对 应 一 个