Spark作为分布式计算框架,多个节点的设计与相互通信模式是其重要的组成部分。

 

一、组件概览

     对源码分析,对于设计思路理解如下:

          移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

  • RpcEndpoint:RPC端点 ,Spark针对于每个节点(Client/Master/Worker)都称之一个Rpc端点 ,且都实现RpcEndpoint接口,内部根据不同端点的需求设计不同的消息和不同的业务处理,如果需要发送/询问则调用Dispatcher

  • RpcEnv:RPC上下文环境,每个Rpc端点运行时依赖的上下文环境称之为RpcEnv

  • Dispatcher:消息分发器,针对于RPC端点需要发送或者远程RPC介绍到的消息分发至对应的指令收件箱/发件箱,如果指令接收方是自己存入收件箱,如果指令接收方为非自身端点,则放入发件箱

  • Inbox:指令消息收件箱,一个本地端点对应一个收件箱,Dispatcher在每次向Inbox存入消息时都会将对应EndpointData加入内部待Receiver Queue中,另外Dispatcher创建时会启动一个单独线程进行轮询Receiver Queue,进行收件箱消息消费

  • OutBox:指令消息发件箱,一个远程端点对应一个发件箱,当消息放入Outbox后,紧接着将消息通过TransportClient发送出去,在同一个线程中进行,原因为远程消息分为RpcOutboxMessage, OneWayOutboxMessage两种消息,而针对于需要应答的消息直接发送更加合适

  • TransportClient:Netty通信客户端,根据outbox的消息的receiver请求对应远程TransportServer,

  • TransportServer:Netty通信服务端,一个RPC端点一个TransportServer,接受远程消息后调用Dispatcher分发消息至对应收发件箱

  • 特别说明


    • TransportClient与TransportServer通信虚线表示两个RpcEnv之间的通信,图示没有单独表达式

    • 一个Outbox一个TransportClient,图示没有单独表达式

    • 一个RpcEnv中存在两个RpcEndpoint,一个代表本身启动的RPC端点,另外一个为 RpcEndpointVerifier

 

二、Endpoint启动过程

     启动的流程如下:

  移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

  • Endpoint启动过程基本上与组件概览中组件能很好的对应

  • Endpoint启动后,默认会向Inbox中添加OnStart消息,不同的端点(Master/Worker/Client)消费OnStart指令时,进行相关端点的启动额外处理

  • Endpoint启动时,会默认启动TransportServer,且启动借宿后会进行一次同步测试rpc可用性(askSync-BoundPortsRequest)

  • Dispatcher作为一个分发器,内部存放了Inbox,Outbox的等相关句柄和存放了相关处理状态数据,结构大致如下移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

     

<