hadoop-1.2.0的IPC源碼分析


一、客戶端工作流




二、客戶端同時多次調用服務器端


1、客戶端採用java代理來生成代理對象
2、客戶端只支持阻塞調用,也就是線程進行調用後,就需要等待結果返回
3、客戶端可以同時進行多次調用,也就是每個客戶端線程發起調用後會阻塞等待結果返回
4、客戶端和服務器端只維護一個socket連接,每個調用call都有一個序號id,且調用結果返回不保證有序



三、服務器端工作流



四、超時和網絡異常

1)客戶端讀寫異常:關閉connection,從connection pool中清除connection對象
2)客戶端讀超時:如果用戶調用時設置了超時rpctimeout,那麼直接拋出超時異常。如果用戶沒有設置rpctimeout,表示允許read超時,則發ping包到服務器端
3)客戶端connection空閒:客戶端有較長時間沒有使用連接,則直接關閉connection對象,下次調用時,重建connection對象

4)服務器端讀寫異常:直接關閉connection對象
5)服務器端call沒有長時間被返回結果:在responder線程中每個循環週期會檢測call,如果是長時間停留在responder中沒有被返回,則關閉連接,默認15Min
6)服務器端空閒的connection:在listener線程的每個循環週期都會檢測是否有connection空閒超過指定時間,如果檢測到空閒connection,則關閉連接,默認1s
7)服務器端不存在讀寫超時的情況,因爲使用nio沒有setSoTimeout(),除非自己設定定時器來處理。。服務器通過第5)和第6)的清理措施來清理掉讀寫超時的connection

五、服務器端對ByteBuffer的使用

1)客戶端發起一次遠程調用,包含數據長度+序列化後的數據
2)服務器端dataLengthBuffer來存儲數據長度,再根據數據長度分配一個dataBuffer存儲序列化後的數據
3)服務器端call返回時,將數據序列化到一個responseBuffer
4)整個過程沒有使用Buffer pool,存在內存的重複利用和非直接內存帶來的重複拷貝,值得優化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章