Hadoop入门教程:RPC通信模型
Hadoop入门教程:RPC通信模型,RPC是一种通过网络从远程计算机上请求服务,但不需要了解底层网络技术的协议。RPC 协议假定某些传输协议(如 TCP 或 UDP等)已经存在,并通过这些传输协议为通信程序之间传递访问请求或者应答信息。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发分布式应用程序更加容易。
RPC 通常采用客户机/服务器模型。请求程序是一个客户机,而服务提供程序则是一个服务器。一个典型的RPC框架如图3-1所示,主要包括以下几个部分:
通信模块。两个相互协作的通信模块实现请求-应答协议,它们在客户和服务器之间传递请求和应答消息,一般不会对数据包进行任何处理。请求–应答协议的实现方式有同步方式和异步方式两种。
如图3-1所示,同步模式下客户端程序一直阻塞到服务器端发送的应答请求到达本地;而异步模式不同,客户端将请求发送到服务器端后,不必等待应答返回,可以做其他事情,待服务器端处理完请求后,主动通知客户端。在高并发应用场景中,一般采用异步模式以降低访问延迟和提高带宽利用率。
Stub程序。客户端和服务器端均包含Stub程序,可将之看做代理程序。它使得远程函数调用表现得跟本地调用一样,对用户程序完全透明。在客户端,它表现得就像一个本地程序,但不直接执行本地调用,而是将请求信息通过网络模块发送给服务器端。此外,当服务器发送应答后,它会解码对应结果。在服务器端,Stub程序依次进行解码请求消息中的参数、调用相应的服务过程和编码应答结果的返回值等处理。
调度程序。调度程序接收来自通信模块的请求消息,并根据其中的标识选择一个Stub程序进行处理。通常客户端并发请求量比较大时,会采用线程池提高处理效率。
客户程序/服务过程。请求的发出者和请求的处理者。如果是单机环境,客户程序可直接通过函数调用访问服务过程,但在分布式环境下,需要考虑网络通信,这不得增加通信模块和Stub程序(保证函数调用的透明性)。
通常而言,一个RPC请求从发送到获取处理结果,所经历的步骤(见图3-2)下所示。
1)客户程序以本地方式调用系统产生的Stub程序;
2)该Stub程序将函数调用信息按照网络通信模块的要求封装成消息包,并交给通信模块发送到远程服务器端。
3)远程服务器端接收此消息后,将此消息发送给相应的Stub程序;
4)Stub程序拆封消息,形成被调过程要求的形式,并调用对应函数;
5)被调用函数按照所获参数执行,并将结果返回给Stub程序;
6)Stub程序将此结果封装成消息,通过网络通信模块逐级地传送给客户程序。
-
标签错误:<!-- #Label#
labelId=20160707140604
moduleId=1
classId=12231768634
orderby=2
fields=url,title,u_info
attribute=
datatypeId=22192428132
recordCount=3
pageSize=
<htmlTemplate><dt><img src="/images/index_26${index}.jpg" width="100" height="62" /><a href="$url" title="${title}">${title}</a><span>${api.left(u_info,60)}</span></dt></htmlTemplate>
-->
- 我要参加技术沙龙