天天看點

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

概要

Spark RPC概述中介紹了Spark PRC抽象接口RpcEndpointRef 、RpcEndpoint的用法,RpcEndpointVerifier的作用是,當RpcEndpointRef通路對應的RpcEndpoint前,判斷RpcEndpoint是否存在。

定義

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

RpcEndpointVerifier定義如上圖,主要有兩點

  1. RpcEndpointVerifier也是RpcEndpoint的實作類,就意味着和Master、Worker等RpcEndpoint實作類處理消息的流程一緻,具體參考這兩篇Spark RPC之RpcRequest請求處理流程、 Spark RPC之RpcResponse處理,後面不再介紹。
  2. 定義了消息類型CheckExistence。

請求流程

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

上圖的Spark PRC例子主要做了以下幾件事

  1. 代碼82行,此處省略了env對象的建立,建立env調用RpcEnv.create方法,同時底層會注冊RpcEndpointVerifier到Dispatcher,名字為endpoint-verifier,服務client端請求。
  2. 82-88行,server端注冊對象RpcEndpoint,名字為send-remotely。
  3. 90行,建立client端RpcEnv對象。
  4. 91行,擷取RpcEndpointRef對象,此對象用來和步驟1中注冊的名稱為send-remotely的RpcEndpoint通信,底層NettyRpcEnv發送消息RpcEndpointVerifier.CheckExistence(“send-remotely”)給server端,server端使用步驟1中注冊的RpcEndpointVerifier處理,傳回RpcEndpoint是否存在。
  5. 93行,進行通信。

server端注冊RpcEndpointVerifier

如上面步驟1描述,建立RpcEnv對象時底層會注冊RpcEndpointVerifier到Dispatcher,以deploy子產品中Master類建立RpcEnv為例,流程如下

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

NettyRpcEnv的startServer方法中注冊RpcEndpointVerifier,源碼如下

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

至此,server端完成了RpcEndpointVerifier的注冊,後續對于client請求的處理,參考Spark RPC之RpcRequest請求處理流程、 Spark RPC之RpcResponse處理。

client發請求CheckExistence

如Spark PRC例子中步驟5描述,調用setupEndpointRef方法會發送CheckExistence消息,檢查RpcEndpoint是否存在,簡單流程如下

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

NettyRpcEnv.asyncSetupEndpointRefByURI方法中發送消息CheckExistence的源碼如下

Spark RPC之RpcEndpointVerifier概要定義請求流程總結

到這裡,client發送消息的過程就結束了,此外,ask方法發送資訊到server的詳細流程和server端如何利用注冊的RpcEndpointVerifier處理請求,

請參考Spark RPC之RpcRequest請求處理流程、 Spark RPC之RpcResponse處理。

總結

介紹了RpcEndpointVerifier的定義和作用,以及發揮其作用的完整流程,到這裡,關于Spark RPC的源碼解讀也告一段路了,spark-core中RPC子產品的代碼基本都覆寫到了。

繼續閱讀