rpc、socket、mq

關於RPC與MQ異同的理解java

相同:
一、都利於大型系統的解耦;
二、都提供子系統之間的交互,特別是異構子系統(如java\node等不一樣開發語言);
不一樣:
一、RPC側重功能調用,所以多半是同步的;
備註:也有基於MQ上實現RPC的,這樣的話就是異步的,MQ自己,如rabbitMQ也有提供實現RPC的能力;
二、MQ 的使用,一方面是基於性能的考慮,好比服務端不能快速的響應客戶端(或客戶端也不要求實時響應),須要在隊列裏緩存;
另一方面,它更側重數據的傳輸,所以方式更加多樣化,除了點對點外,還有訂閱發佈等功能。
備註:以前在政府交換平臺項目中,源數據庫向目標庫同步數據,底層用的就是MQ;node

RPC(Remote Procedure Call,遠程過程調用)是創建在Socket之上的,出於一種類比的願望,在一臺機器上運行的主程序,能夠調用遠程另外一套機器上的子程序,就像LPC(本地過程調用).
越底層,代碼越複雜,靈活性越高,效率越高; 越上層,抽象封裝的越好,代碼越簡單,效率越差. Socket和RPC的區別再次說明了這點.
那麼, RPC與Socket通訊的區別是什麼呢?
RPC是創建在Socket之上的,RPC帶來了開發C/S程序的簡單可靠的手段,它經過一種叫XDR的數據表達方法描述數據,程序員寫僞代碼,而後由rpcgen程序翻譯爲真正的可編譯的C語言源代碼,再翻譯成真正的Client端和Server端程序.
RPC做爲廣泛的C/S開發方法,開發效率高效,可靠. 但RPC方法的基本原則是--以模塊調用的簡單性忽略了通信的具體細節,以便程序員不用關心C/S之間的通信協議, 集中精力對付實現過程. 這就決定了RPC生成的通信不可能對每種應用都有恰當的處理方法. 與Socket方法相比,傳輸相同的有效數據,RPC佔用更多的網絡帶寬.
RPC是在Socket的基礎上實現的, 它比socket須要更多的網絡和系統資源. 另外, 在對程序優化時, 程序員雖然能夠直接修改由rpcgen產生的使人費解的源程序. 但對於追求程序設計高效率的RPC而言, 得到的簡單性則被大大削弱.程序員

Linux編程中進程間的通訊是很重要的一部分,下面介紹下這部分的主題框架,讓人有一個很清楚的認識:
進程間通訊:
一、同一個主機之間的通信:
一、unix進程間通信的方式:無名管道、有名管道、信號
二、system V進程間通信的方式:信號量、消息隊列、共享內存
二、不一樣主機間(網絡)進程之間的通訊:
一、RPC
二、Socket數據庫

相關文章
相關標籤/搜索