1、Spark組件之間使用RPC機制進行通信。RPC的客戶端在本地編寫並調用業務介面,介面在本地通過RPC框架的動態代理機制生成一個對應的實現類,在這個實現類中完成soket通信、遠程調用等功能的邏輯包裝,而在RPC的服務端既編寫業務介面也編寫了具體的業務實現類,通過RPC框架以介面的方式暴露出來, ...
1、Spark組件之間使用RPC機制進行通信。RPC的客戶端在本地編寫並調用業務介面,介面在本地通過RPC框架的動態代理機制生成一個對應的實現類,在這個實現類中完成soket通信、遠程調用等功能的邏輯包裝,而在RPC的服務端既編寫業務介面也編寫了具體的業務實現類,通過RPC框架以介面的方式暴露出來,供客戶端遠程調用。
Spark2.x之前使用的是Akka作為底層框架來實現Actor模型的,Spark2.x之後用Netty替換了Akka作為底層框架,來實現Actor模型(Akka底層用的也是Netty)。
BIO:客戶端調用後一直等待服務端的執行返回,客戶端才能繼續執行自生在調用點位後面的邏輯,造成客戶端邏輯的阻塞。
NIO:客戶端調用後,繼續執行調用點位後的本地邏輯,通過事件監聽等機制獲得服務端的返回,客戶端無阻塞,但是客戶端需要付出額為的精力去實時監聽服務端的執行是否完畢。
AIO:客戶端調用後,繼續執行調用點位後的本地邏輯,服務端主動將結果發送到共用的地方,客戶端靈活取用,客戶端無阻塞也無額外開銷,(服務端通常使用call-back等機制實現對客戶端的通知、Feature來約定共用數據區)但是目前Linux不支持AIO,Windows支持。
*
2、Actor模型:每一個通信端點都擁有一對inbox-outbox**,任何信息的接收都通過inbox,同樣任何信息的發送都必須通過outbox,多條信息就在box中排序處理。