在spark 源碼分析之五 -- Spark內置RPC機制剖析之一建立NettyRpcEnv中,剖析了NettyRpcEnv的建立過程。html
Dispatcher、NettyStreamManager、TransportContext、TransportClientFactory、TransportServer、Outbox、Inbox等等基礎的知識都已經在前面剖析過了。網絡
能夠參照以下文章作進一步瞭解。架構
spark 源碼分析之五 -- Spark內置RPC機制剖析之一建立NettyRpcEnv框架
spark 源碼分析之六 -- Spark內置RPC機制剖析之二Dispatcher和Inbox、Outbox剖析源碼分析
spark 源碼分析之七 -- Spark內置RPC機制剖析之三RpcEndPoint和RpcEndPointRef剖析spa
spark 源碼分析之八 -- Spark內置RPC機制剖析之四TransportContext和TransportClientFactory剖析netty
spark 源碼分析之九 -- Spark內置RPC機制剖析之五StreamManager和RpcHandlercode
spark 源碼分析之十一 -- Spark內置RPC機制剖析之七TransportClient和TransportServer剖析blog
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所有分析完畢。
原文出處:https://www.cnblogs.com/johnny666888/p/11160486.html