网络通信模块是分布式系统中最低层的模块,直接支撑上层分布式环境下的复杂的进程间通信逻辑。是分布式系统的基础。远程过程调用
是一种常用的分布式网络通信协议,它允许运行于一台计算机的程序调用另一台计算机上运行的子程序,同时将网络通信的细节隐藏起来
是用户无法进行额外的编程。
RPC:透明性,高性能,可控性
透明性:感觉只在一台机器上执行操作,感觉不到调用了其他计算机的程序。
高效性:Hadoop各个系统均采用的是Master/Slave结果。Master就相当于RPC server,它负责处理集群中slave发送过来的所有服务请求。RPC
必须能够高效的处理这些请求。
可控性:
Hadoop RPC主要分成四层
序列化层:序列化就是将结构化数据转换成字节流以便通过网络进行传输或者持久化存储。在RPC框架中,主要用于将用户请求中的参数或者应答
转换成字节流,方便机器之间的传输。
函数调用层:采用反射机制和动态代理实现。
网络传输层:采用的是TCP/IP的SOCKET机制。
服务器端处理框架:可悲抽象为网络IO模型,描述了客户端与服务器端的信息交互方式,它的设计直接决定这服务器端的并发处理能力。
一个典型的RPC框架主要有下面几个部分:通信模块,Stub程序,调度程序,客户程序
通信模块:两个相互协作的通信模块实现请求-应答协议,它们在客户机,服务器之间传递请求和应答消息,一般不会对数据包进行任何处理。(同步方式,异步方式)
Stub程序:客户端和服务器端都包含Stub程序,可将其看作为代理程序。使得远程函数调用跟本地调用一样,对用户程序完全透明。在客户端,它表现的像一个本地程序
,单不直接执行本地调用,而是将请求信息通过网络模块发送给服务器端,此外当服务器端发送应答后,它会解码对应的结果。在服务器端,Stub程序依次进行如下处理:
解码请求消息中的参数,调用相应的服务过程,编码应答结果的返回值。
调度程序:调度程序接受到来自通信模块的请求消息,并根据其中的标示选择一个Stub程序处理。通常客户端并发请求量大,采用线程池提高处理效率。
客户程序/服务过程:请求的发送者和请求的处理者。
一个RPC请求从发送到获取结果主要步骤如下:
1.客户程序以本地方式调用系统产生的Stub程序
2.该Stub程序将函数调用信息按照网络通信模块的要求封装成消息包,并交给通信模块发送到远程服务器端
3.远程服务器端接收此消息后,将此消息发送给想要的Stub程序。
4.Stub拆分信息,形成被掉过程要求的形式,并调用对应的函数。
5.被调用函数按照所获参数执行,并将结果返还给Stub程序。
6.Stub程序将此结果封装成消息,通过网络通讯模块逐级的传送给客户程序。
Hadoop RPC框架
Hadoop RPC主要提供了两个接口:
代理模式是一种常见的设计模式:其目的就是为其他对象提供一种代理以控制这个对象的访问。代理类负责对委托类进行预处理,或者执行完后的
后续处理。