遠程通信機制RPC與RMI的關系
http://blog.csdn.net/zolalad/article/details/25161133
1.RPC
RPC(Remote Procedure Call Protocol)遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。RPC不依賴於具體的網絡傳輸協議,tcp、udp等都可以。由於存在各式各樣的變換和細節差異,相應的rpc也派生出了各式遠程過程通信協議。RPC是跨語言的通信標准,SUN和微軟都有其實現,比如RMI可以被看作SUN對RPC的Java版本( 實現),而微軟的DCOM就是建立在ORPC協議之上。一言以蔽之,RPC是協議,而無論是SUN的RMI還是微軟的DCOM都是對該協議的不同實現,二者都為編程人員提供了應用PRC技術的程序接口(API)。
個人總結:RPC協議的實現框架比如RMI等 應該 是通過Socket接口里來使用TCP/IP協議來實現網絡通信的。其他常用應用層協議包括FTP、HTTP、TELNET、SMTP等也是通過Socket這個門面接口來使用TCP/IP協議來實現網絡通信的。
Socket是應用層與TCP/IP協議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式(Facade),它把復雜的TCP/IP協議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數據,以符合指定的協議。
有關Socket的更多內容,詳見:http://blog.csdn.net/zolalad/article/details/45599199
2. J2EE項目-使用JDK自帶的RPC實現——RMI
RMI是Java的一組擁護開發分布式應用程序的API。RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。簡單地說,這樣使原先的程序在同一操作系統的方法調用,變成了不同操作系統之間程序的方法調用,由於J2EE是分布式程序平台,它以RMI機制實現程序組件在不同操作系統之間的通信。比如,一個EJB可以通過RMI調用Web上另一台機器上的EJB遠程方法。
RMI(Remote Method Invocation,遠程方法調用)是用Java在JDK1.1中實現的,它大大增強了Java開發分布式應用的能力。Java作為一種風靡一時的網絡開發語言,其巨大的威力就體現在它強大的開發分布式網絡應用的能力上,而RMI就是開發百分之百純Java的網絡分布式應用系統的核心解決方案之一。其實RMI可以被看作是RPC的Java版本( 實現)。但是傳統RPC並不能很好地應用於分布式對象系統,而Java RMI 則支持存儲於不同地址空間的程序級對象之間彼此進行通信,實現遠程對象之間的無縫遠程調用。
RMI目前使用Java遠程消息交換協議JRMP(Java Remote Messaging Protocol)進行通信。JRMP是專為Java的遠程對象制定的協議。因此,Java RMI具有Java的“Write Once,Run Anywhere”的優點,是分布式應用系統的百分之百純Java解決方案。用Java RMI開發的應用系統可以部署在任何支持JRE(Java Run Environment Java,運行環境)的平台上。但由於JRMP是專為Java對象制定的,因此,RMI對於用非Java語言開發的應用系統的支持不足。不能與用非Java語言書寫的對象進行通信。
3. Hadoop中自定義的RPC實現原理
Hadoop作為一個存儲與服務的基礎性平台,同時它的內部有采用了master/slave架構,那么其內部通信和與客戶端的交互就是必不可少的了。Hadoop在實現時拋棄了JDK自帶的一個RPC實現——RMI,而自己基於IPC模型實現了一個更高效的輕量級RPC。
參考:
1.RPC,RMI,Webservice,JMS的區別
參考: http://www.tuicool.com/articles/2qAzqq
2.Hadoop中的RPC實現——客戶端通信組件
http://www.linuxidc.com/Linux/2012-02/54696.htm
http://www.linuxidc.com/Linux/2012-02/54695.htm