Hadoop源码分析之一(RPC机制之Server)

网上已经有很多关于Hadoop源码分析的好文,在这记录的目的是把自己在看Hadoop源码时自己的一些体会,方便日后查询巩固。

相关阅读:Hadoop源码分析之二(RPC机制之Call处理)

想了解Hadoop是如何工作的,首先需要了解Hadoop RPC原理。Hadoop提供了一个统一的RPC机制来处理client-namenode, namenode-dataname,client-dataname之间的通信。整个机制中主要运用了如下技术:

Java dynamic proxy:主要用于处理client的代理来统一向Server端发送信息;

Google Protocal Buffer:主要用于把Request和Response序列化和反序列化成byte进行通信;

Java NIO:主要用于RPC Client与Server之间的通信;

下面主要介绍RPC Server主要的实现逻辑:

Hadoop源码分析之一(RPC机制之Server)

如上图Server端主要Listener, Responer Thread和Handler, Reader Thread Pool。

Listener Thread:Server端会启一个Listener线程主要用于监听Client发送过来的Request,Listener主要完成创建一个Connection Object并启动一组Reader Thread Pool,并把Connection通过NIO的SelectionKey传递给Reader,这样就解决了Listener单线程带来的可能的性能瓶颈,因为Listener只作了一层转发;

Reader Thread Pool:主要用于读取Listener传过来的Connection,并调用Connection的readAndProcess方法来读取Request,并封装成一个Call放到Call Queue中;

Hanlder Thread Pool:Server会启动一组线程组来处理Call Queue中Call,并把处理的Respone中放到response queue中,Hanlder怎么处理Call会在后续介绍;

Responder Thread:主要处理response queue中的response,并把response发送给client,如果当前response queue为空,在加了新的response时会马上发送给client端,不会通过responer thread来发送。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9cd0cb1bf468ec101f4299636895b009.html