一、本文目的
主要介绍RPC的一些概念和应用。
二、为什么要介绍RPC
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。上文黑色部分为官方对Dubbo的介绍,其中关键提到了Dubbo是RPC远程服务调用方案,那么先弄清楚RPC的概念和应用就非常重要了。
三、什么是RPC
1、百度百科:远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC采用客户机/服务器模式。 http://baike.baidu.com/link?url=t9qd0bvt1VXnt1Gt-LJP-Ku7HsB3AlMYETosi3yvLp8muFWkIE1eCtizFgqKcceAxpgxxSeyPXJA8jc3OR55zPO1FlFV0dl1zgvFXwslp421-IX2SDMoluj1LnmMUGvL-ZBvU26jjtRsXhFnxlzqIDp2TKb5bzgYpIRNyOTMoTpC4daUtPUxeFhvQaDbnS2F
2、维基百科:In distributed computing a remote procedure call (RPC) is when a computer program causes a procedure (subroutine) to execute in another address space (commonly on another computer on a shared network), which is coded as if it were a normal (local) procedure call, without the programmer explicitly coding the details for the remote interaction.
3、个人理解
a) 一般应用于分布式环境
b)采用客户机/服务器模式,客户端/服务器一般不在同一台机器或同一个网络中
c) 通过网络调用远程进程,但是给调用方的感觉就是调用本地程序一样
四、RPC的基本通讯过程
- 首先,要解决通讯的问题,主要是通过在客户端和服务器之间建立TCP连接,远程过程调用的所有交换的数据都在这个连接里传输。连接可以是按需连接,调用结束后就断掉,也可以是长连接,多个远程过程调用共享同一个连接。
- 第二,要解决寻址的问题,也就是说,A服务器上的应用怎么告诉底层的RPC框架,如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称名称是什么,这样才能完成调用。比如基于Web服务协议栈的RPC,就要提供一个endpoint URI,或者是从UDDI服务上查找。如果是RMI调用的话,还需要一个RMI Registry来注册服务的地址。
- 第三,当A服务器上的应用发起远程过程调用时,方法的参数需要通过底层的网络协议如TCP传递到B服务器,由于网络协议是基于二进制的,内存中的参数的值要序列化成二进制的形式,也就是序列化(Serialize)或编组(marshal),通过寻址和传输将序列化的二进制发送给B服务器。
- 第四,B服务器收到请求后,需要对参数进行反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值。
- 第五,返回值还要发送回服务器A上的应用,也要经过序列化的方式发送,服务器A接到后,再反序列化,恢复为内存中的表达方式,交给A服务器上的应用
五、RPC的协议
- CORBA
- Java RMI
- Hessian
- Thrift
- Web Service XML
- Web Service Restful
六、参考资料