RPC是什麼?

丁浪發表於2016-12-04

RPC概念及分類

RPC全稱為Remote Procedure Call,翻譯過來為“遠端過程呼叫”。目前,主流的平臺中都支援各種遠端呼叫技術,以滿足分散式系統架構中不同的系統之間的遠端通訊和相互呼叫。遠端呼叫的應用場景極其廣泛,實現的方式也各式各樣。

從通訊協議的層面,大致可以分為:

基於HTTP協議的(例如基於文字的SOAP(XML)、Rest(JSON),基於二進位制Hessian(Binary))

基於TCP協議的(通常會藉助Mina、Netty等高效能網路框架)

從不同的開發語言和平臺層面,分為:

單種語言或平臺特定支援的通訊技術(例如Java平臺的RMI、.NET平臺Remoting)

支援跨平臺通訊的技術(例如HTTP Rest、Thrift等

從呼叫過程來看,分為:

同步通訊呼叫(同步RPC)

非同步通訊呼叫(MQ、非同步RPC)

常見的幾種通訊方式

1. 遠端資料共享(例如:共享遠端檔案,共享資料庫等實現不同系統通訊)

2. 訊息佇列

3. RPC(遠端過程呼叫)

 

序列化/反序列化

只有二進位制資料才能在網路中傳輸,序列化和反序列化的定義是:

將物件轉換成二進位制流的過程叫做序列化,

將二進位制流轉換成物件的過程叫做反序列化。

Java.NET平臺中常見的通訊技術

Java中支援的包括:

技術

簡介

是否支援跨平臺

Corbra

90年代產物,已被淘汰

不支援

RMI

EJB時代產物,已逐漸被淘汰

不支援

WebService

基於Http SOAP,效率低,逐漸被淘汰

支援

Hessain

基於Http,二進位制序列化,效率高,使用廣泛

支援

Restspring mvc等)

支援Http Rest,廣泛應用於無線API,開放平臺等

支援

JMS、開源MQ

Java訊息服務(訊息中介軟體),使用廣泛

支援

Socket

基於MinaNettyNIOAIO高效通訊)

理論上支援

 

 

 

.NET中包括:

技術

簡介

是否支援跨平臺

WebService

基於Http SOAP,效率低,逐漸被WCF整合淘汰

支援

.NET Remoting

通訊效率尚可,使用複雜,逐漸被WCF整合淘汰

不支援

WCF SOAP

整合了原有的WebService,通訊效率低

支援

WCF NET.TCP

通訊效率高,部分.NET專案內部服務在使用

不支援

WCF Rest

使用較少,已經被Web Api逐漸取代

支援

Web Api

支援Http Rest,廣泛應用於無線API,開放平臺等

支援

MSMQ、開源MQ

微軟自己的訊息中介軟體或者其他開源MQ

支援(MSMQ除外)

Hessain .NET

基於Http,二進位制序列化,效率高,使用較少

支援

Socket

通過Socket網路程式設計方式實現系統通訊

理論上支援

 

 

網際網路時代常見的RPC技術和框架

應用級的服務框架:

Dubbo/Dubbox

ZeroICE

GRpc

Spring Boot/Spring Cloud

 

基礎通訊框架:

Protocol Buffers

Thrift

 

遠端通訊協議:

RMI

Socket

SOAP(HTTP XML)

REST(HTTP JSON)

RPC的注意事項

效能

影響RPC效能的主要在幾個方面:

1.序列化/反序列化的框架

2.網路協議,網路模型,執行緒模型等

安全

RPC安全的主要在於服務介面的鑑權和訪問控制支援。

 

 

跨平臺

跨不同的作業系統,不同的程式語言和平臺。

 

跨平臺RPC技術和常見框架介紹

SOAP WebService

Hessian

HTTP Rest

Thrift

GRpcProtobuffer

Zero ICE

訊息中介軟體

 


相關文章