標籤:base ref 基礎 ase ado toc proc telnet 使用者
遠程通訊機制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
RPC和Socket,RMI和RPC之間的關係