一、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支持。
*
二、Actor模型:每個通訊端點都擁有一對inbox-outbox**,任何信息的接收都經過inbox,一樣任何信息的發送都必須經過outbox,多條信息就在box中排序處理。代理