vlambda博客
学习文章列表

HDFS、YARN核心框架RPC基础模型

最近处理YARN线上问题时,顺便梳理了下其RPC流程,发现其和HDFS使用的是同一套RPC模型,其逻辑较容易理解。如下图:


                                       HDFS RPC通信模型


1Listener :负责客户端请求,通过select注册监听accept事件,通过hash选择后端的Reader,并将接受的Request放到ReaderBlockingQueue队列。通过BlockQueueReader解耦,防止Reader处于running状态时,更改Select导致线程不安全事件产生。

 

nReader 负责读取客户端的Rpc请求,并做一些预处理事件,把Rpc请求包装成Call对象,放到ServerCallQueueManagerCallQueue

 

nHandler:在CallQueue阻塞,负责从CallQueue里读取Call,解析出request的函数和参数,通过反射调用对应的RPC函数,处理完成后,注册一个write事件到Responderselect上,并唤醒waitResponder

 

1Responder:接收Handle的处理结果,并序列化后发到Client。如果一次可以发送无法发送完,则继续注册write事件到自己的select上,等到下次轮训时继续发送。

 

注意:ListenerReader线程都有一个Select和一个队列;每个Handler有一个Select,另外所有Handler共用一个队列;Responder只有一个Select()