1. 程式人生 > >Spark RPC通訊層設計原理分析

Spark RPC通訊層設計原理分析

一個RpcEnv是一個RPC環境物件,它負責管理RpcEndpoint的註冊,以及如何從一個RpcEndpoint獲取到一個RpcEndpointRef。RpcEndpoint是一個通訊端,例如Spark叢集中的Master,或Worker,都是一個RpcEndpoint。但是,如果想要與一個RpcEndpoint端進行通訊,一定需要獲取到該RpcEndpoint一個RpcEndpointRef,而獲取該RpcEndpointRef只能通過一個RpcEnv環境物件來獲取。所以說,一個RpcEnv物件才是RPC通訊過程中的“指揮官”,在RpcEnv類中,有一個核心的方法:
def setupEndpoint(name: String, endpoint: RpcEndpoint): RpcEndpointRef
通過上面方法,可以註冊一個RpcEndpoint到RpcEnv環境物件中,有RpcEnv來管理RpcEndpoint到RpcEndpointRef的繫結關係。在註冊RpcEndpoint時,每個RpcEndpoint都需要有一個唯一的名稱。
Spark中基於Netty實現通訊,所以對應的RpcEnv實現為NettyRpcEnv,上面方法的實現,如下所示: