一、Hadoop RPC基本介绍
1.1 RPC基本概念
远程过程调用(Remote Procedure Call,RPC)是一种通过网络从远程计算机上请求服务,但不需要了解底层网络技术的协议。
RPC通常采用客户机/服务器模型。请求程序是一个客户机,而服务提供程序则是一个服务器。一个典型的RPC框架如下:
该框架主要包括以下四个部分:
(1)通信模块:两个相互协作的通信模块实现“请求—应答”协议。它们在客户机和服务器之间传递请求和应答消息,一般不会对数据包进行任何处理。
(2)Stub程序:客户端和服务端均包含Stub程序,可将之看作代理程序。它使得远程函数调用表现得跟本地调用一样,对用户程序完全透明。在客户端,它表现得就像一个本地程序,但不直接执行本地调用,而是将请求信息通过通信模块发送给服务器端。此外,当服务器端发送应答后,它会解码对应结果。在服务器端,Stub程序依次进行以下处理:解码请求消息中的参数、调用相应的服务过程和编码应答结果的返回值。
(3)调度程序:调度程序接收来自通信模块的请求消息,并根据其中的标识选择一个Stub程序处理。通常客户端并发请求量比较大时,会采用线程池提高处理效率。
(4)客户程序/服务过程:请求的发出者和请求的处理者。如果是单机环境,客户程序可直接通过函数调用访问服务过程,但在分布式环境下,需要考虑网络通信,这不得不增加通信模块和Stub程序(保证函数调用的透明性)。
1.2 RPC的基本流程
通常而言,一个RPC请求从发送到获取处理结果,所经历的步骤如下:
(1)客户程序以本地方式调用系统产生的Stub程序;
(2)该Stub程序将函数调用按照网络通信模块的要求封装成消息包,并交给通信模块发送到远程服务器端;
(3)远程服务器端接收此消息后,将此消息发送给相应的Stub程序;
(4)Stub程序拆封消息,形成被调用过程要求的形式,并调用对应的函数;
(5)被调用函数按照所获参数执行,并将结果返回给Stub程序;
(6)Stub程序将此结果封装成消息,通过网络通信模块逐级地传输给客户程序。
1.3 Hadoop RPC的特点
(1)透明性:当用户在一台计算机的程序调用调用另一台计算机上的子程序时,对用户