spark 源码分析之十二--Spark RPC剖析之Spark RPC总结

spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv中,剖析了NettyRpcEnv的创建过程。

Dispatcher、NettyStreamManager、TransportContext、TransportClientFactory、TransportServer、Outbox、Inbox等等基础的知识都已经在前面剖析过了。

可以参照如下文章做进一步了解。

spark 源码分析之五 -- Spark内置RPC机制剖析之一创建NettyRpcEnv

spark 源码分析之六 -- Spark内置RPC机制剖析之二Dispatcher和Inbox、Outbox剖析

spark 源码分析之七 -- Spark内置RPC机制剖析之三RpcEndPoint和RpcEndPointRef剖析

spark 源码分析之八 -- Spark内置RPC机制剖析之四TransportContext和TransportClientFactory剖析

spark 源码分析之九 -- Spark内置RPC机制剖析之五StreamManager和RpcHandler

spark 源码分析之十 -- Spark内置RPC机制剖析之六TransportResponseHandler、TransportRequestHandler和TransportChannelHandler剖析

spark 源码分析之十一 -- Spark内置RPC机制剖析之七TransportClient和TransportServer剖析

 

spark rpc 整体架构图如下(自己画的😄,好久不画了,生疏了):

作如下说明:

1. spark 网络层是直接依赖于netty 框架的,它的适配器直接绑定到netty 的channel 上。

2. 图中的channel 的encoder 和 decoder 等等netty 相关的组件没有体现出来。

3. channel 是全双工的,所以NettyRpcEnv既有TransportClient 也有TransportServer。

4. 请求包括数据层面的chunk请求和控制层面的rpc请求。chunk请求会被StreamManager处理,rpc 请求会进一步通过Dispatcher分发给合适的endpoint。返回结果通过channel 返回给发送端。

5. RpcEndpointRef可以是本地的RpcEndpoint的简单包装也可以是远程RpcEndpoint 的代表。当RpcEndpoint 发送给 RpcEndpointRef 时,如果这个 RpcEndpointRef 是本地 RpcEndpointRef,则事件消息会被Dispatcher做进一步分发。如果是远程消息,则事件会被进一步封装成OutboxMessage,进而通过本地TransportClient将这个消息通过channel 发送给远程的 RpcEndpoint。

至此,spark rpc全部分析完毕。

posted @ 2019-07-09 21:07  JohnnyBai  阅读(1125)  评论(0编辑  收藏  举报