Spark作為分布式計算框架,多個節(jié)點的設(shè)計與相互通信模式是其重要的組成部分。

 

一、組件概覽

     對源碼分析,對于設(shè)計思路理解如下:

          移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

  • RpcEndpoint:RPC端點 ,Spark針對于每個節(jié)點(Client/Master/Worker)都稱之一個Rpc端點 ,且都實現(xiàn)RpcEndpoint接口,內(nèi)部根據(jù)不同端點的需求設(shè)計不同的消息和不同的業(yè)務(wù)處理,如果需要發(fā)送/詢問則調(diào)用Dispatcher

  • RpcEnv:RPC上下文環(huán)境,每個Rpc端點運行時依賴的上下文環(huán)境稱之為RpcEnv

  • Dispatcher:消息分發(fā)器,針對于RPC端點需要發(fā)送或者遠程RPC介紹到的消息分發(fā)至對應(yīng)的指令收件箱/發(fā)件箱,如果指令接收方是自己存入收件箱,如果指令接收方為非自身端點,則放入發(fā)件箱

  • Inbox:指令消息收件箱,一個本地端點對應(yīng)一個收件箱,Dispatcher在每次向Inbox存入消息時都會將對應(yīng)EndpointData加入內(nèi)部待Receiver Queue中,另外Dispatcher創(chuàng)建時會啟動一個單獨線程進行輪詢Receiver Queue,進行收件箱消息消費

  • OutBox:指令消息發(fā)件箱,一個遠程端點對應(yīng)一個發(fā)件箱,當(dāng)消息放入Outbox后,緊接著將消息通過TransportClient發(fā)送出去,在同一個線程中進行,原因為遠程消息分為RpcOutboxMessage, OneWayOutboxMessage兩種消息,而針對于需要應(yīng)答的消息直接發(fā)送更加合適

  • TransportClient:Netty通信客戶端,根據(jù)outbox的消息的receiver請求對應(yīng)遠程TransportServer,

  • TransportServer:Netty通信服務(wù)端,一個RPC端點一個TransportServer,接受遠程消息后調(diào)用Dispatcher分發(fā)消息至對應(yīng)收發(fā)件箱

  • 特別說明


    • TransportClient與TransportServer通信虛線表示兩個RpcEnv之間的通信,圖示沒有單獨表達式

    • 一個Outbox一個TransportClient,圖示沒有單獨表達式

    • 一個RpcEnv中存在兩個RpcEndpoint,一個代表本身啟動的RPC端點,另外一個為 RpcEndpointVerifier

 

二、Endpoint啟動過程

     啟動的流程如下:

  移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

  • Endpoint啟動過程基本上與組件概覽中組件能很好的對應(yīng)

  • Endpoint啟動后,默認會向Inbox中添加OnStart消息,不同的端點(Master/Worker/Client)消費OnStart指令時,進行相關(guān)端點的啟動額外處理

  • Endpoint啟動時,會默認啟動TransportServer,且啟動借宿后會進行一次同步測試rpc可用性(askSync-BoundPortsRequest)

  • Dispatcher作為一個分發(fā)器,內(nèi)部存放了Inbox,Outbox的等相關(guān)句柄和存放了相關(guān)處理狀態(tài)數(shù)據(jù),結(jié)構(gòu)大致如下移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)移動開發(fā)培訓(xùn),Android培訓(xùn),安卓培訓(xùn),手機開發(fā)培訓(xùn),手機維修培訓(xùn),手機軟件培訓(xùn)

     

<