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机制剖析之七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全部分析完毕。