RPC全稱爲Remote Procedure Call,翻譯過來爲「遠程過程調用」。目前,主流的平臺中都支持各類遠程調用技術,以知足分佈式系統架構中不一樣的系統之間的遠程通訊和相互調用。遠程調用的應用場景極其普遍,實現的方式也各式各樣。spring
從通訊協議的層面,大體能夠分爲:數據庫
基於HTTP協議的(例如基於文本的SOAP(XML)、Rest(JSON),基於二進制Hessian(Binary))編程
基於TCP協議的(一般會藉助Mina、Netty等高性能網絡框架)安全
從不一樣的開發語言和平臺層面,分爲:網絡
單種語言或平臺特定支持的通訊技術(例如Java平臺的RMI、.NET平臺Remoting)架構
支持跨平臺通訊的技術(例如HTTP Rest、Thrift等)mvc
從調用過程來看,分爲:框架
同步通訊調用(同步RPC)異步
異步通訊調用(MQ、異步RPC)編程語言
1. 遠程數據共享(例如:共享遠程文件,共享數據庫等實現不一樣系統通訊)
2. 消息隊列
3. RPC(遠程過程調用)
只有二進制數據才能在網絡中傳輸,序列化和反序列化的定義是:
將對象轉換成二進制流的過程叫作序列化,
將二進制流轉換成對象的過程叫作反序列化。
Java中支持的包括:
技術 |
簡介 |
是否支持跨平臺 |
Corbra |
90年代產物,已被淘汰 |
不支持 |
RMI |
EJB時代產物,已逐漸被淘汰 |
不支持 |
WebService |
基於Http SOAP,效率低,逐漸被淘汰 |
支持 |
Hessain |
基於Http,二進制序列化,效率高,使用普遍 |
支持 |
Rest(spring mvc等) |
支持Http Rest,普遍應用於無線API,開放平臺等 |
支持 |
JMS、開源MQ |
Java消息服務(消息中間件),使用普遍 |
支持 |
Socket |
基於Mina、Netty(NIO、AIO高效通訊) |
理論上支持 |
.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網絡編程方式實現系統通訊 |
理論上支持 |
應用級的服務框架:
Dubbo/Dubbox
ZeroICE
GRpc
Spring Boot/Spring Cloud
基礎通訊框架:
Protocol Buffers
Thrift
遠程通訊協議:
RMI
Socket
SOAP(HTTP XML)
REST(HTTP JSON)
影響RPC性能的主要在幾個方面:
1.序列化/反序列化的框架
2.網絡協議,網絡模型,線程模型等
RPC安全的主要在於服務接口的鑑權和訪問控制支持。
跨不一樣的操做系統,不一樣的編程語言和平臺。
SOAP WebService
Hessian
HTTP Rest
Thrift
GRpc(Protobuffer)
Zero ICE
消息中間件