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
消息中间件