Hadoop的rpc机制分析

Hadoop RPC使用Java动态代理与反射实现对象调用方式,客户端到服务器数据的序列化与反序列化由Hadoop框架或用户自己来实现,即实现数据组装可定制化。Hadoop的rpc通信结构如下图所示:
Hadoop的rpc机制分析_第1张图片

 

 

远程的对象拥有固定的接口,对caller也是可见的,真正的实现(Object)只在服务端。用户如果想使用那个实现的话,调用过程如此:先根据那个接口动态代理生成一个代理对象,调用这个代理对象的时候,用户的调用请求被RPC捕捉到,然后包装成调用请求,序列化成数据流发送到服务端;服务端从数据流中解析出调用请求,然后根据用户所希望调用的接口,调用接口真正的实现对象,再把调用结果返回给客户端,底层调用关系如下图所示。

Hadoop的rpc机制分析_第2张图片

 

RPC server端的实体模型如下图所示。



     Hadoop的rpc机制分析_第3张图片
 

Listener

      监听RPC server的端口,如果客户端有连接请求到达,它就接受连接,然后把连接转发到某个Reader,让Reader去读取那个连接的数据。如果有多个Reader的话,当有新连接过来时,就在这些Reader间顺序分发。这里需要提到的是,Hadoop0.21版本在支持多Reader时有个bug(JIRA),如果有Reader在server运行期没被使用,Server进程不能正常关闭 

Reader 

      Reader的职责就是从某个客户端连接中读取数据流,然后把它转化成调用对象(Call),然后放到调用队列(call queue)里

Handler 

      真正做事的实体。它从调用队列中获取调用信息,然后反射调用真正的对象,得到结果,然后再把此次调用放到响应队列(response queue)里

Responder 

      它不断地检查响应队列中是否有调用信息,如果有的话,就把调用的结果返回给客户端。整个调用流程中与网络有关的地方都是用NIO来处理的。 

你可能感兴趣的:(Hadoop的rpc机制分析)