分布式文件系统KFS源码阅读与分析(三):RPC实现机制(MetaServer端)
2012-02-20 18:29
344 查看
分布式文件系统KFS的MetaServer和Client采用服务器/客户端模型,MetaServer和Client之间的通讯是通过RPC机制来实现的。这里介绍下KFS中MetaServer端的RPC实现机制。
下图所示为MetaServer端的RPC相关实现类:
1、NetDispatch
(1)启动MetaServer端的epoll主循环;
(2)通过调用gNetDispatch.Start(gClientPort, gChunkServerPort),在指定的端口监听来自Client和ChunkServer的RPC请求:
启动ClientManager的接收者acceptor;
启动ChunkServerFactory的接收者acceptor。
2、NetManager
(1)通过epoll机制,维护一组NetConnection对象;当NetConnection状态发生变化时,调用其中的KfsCallbackObj的回调函数;
(2)同时实现了一个定时器机制。
3、NetConnection
(1)将KfsCallbackObj和TcpSocket关联起来,代表来自客户端的一个连接;
(2)当TCP连接的状态发生变化时,KfsCallbackObj的回调函数将会被调用执行。
4、Acceptor
(1)从Client/ChunkServer接收新的连接,然后创建一个新的NetConnection与这个新连接关联起来。NetConnection中含有相关的ClientSM/ChunkServer KfsCallbackObj,而ClientSM/ChunkServer KfsCallbackObj通过IAcceptorOwner的CreateKfsCallbackObj()方法被创建;
(2)继承于KfsCallbackObj,回调函数是Acceptor::RecvConnection:
一个Acceptor含有一个相关的NetConnection;
一个Acceptor含有一个成员变量mAcceptorOwner指向ClientManager或ChunkServerFactory。
5、IAcceptorOwner
(1)维护一个Acceptor,并提供CreateKfsCallbackObj()接口创建KfsCallbackObj。
6、ClientManager
(1)继承于IAcceptorOwner;
(2)含有一个Acceptor,用于接收新的连接;
(3)含有CreateKfsCallbackObj()方法,用于返回一个ClientSM KfsCallbackObj与Client的连接请求关联起来。
7、ChunkServerFactory
(1)继承于IAcceptorOwner;
(2)含有一个Acceptor,用于接收新的连接;
(3)含有CreateKfsCallbackObj()方法,用于返回一个ChunkServer KfsCallbackObj与ChunkServer的连接请求关联起来。
8、ClientSM
(1)继承于KfsCallbackObj,回调函数是HandleRequest();
(2)用于与一个Client连接建立关系,处理Client发起的请求。
9、ChunkServer
(1)继承于KfsCallbackObj,回调函数是HandleHello();
(2)用于与一个ChunkServer连接建立关系,处理ChunkServer发起的hello消息。
10、KfsCallbackObj
(1)调用SetHandler()设置回调函数,当外部事件发生时,调用HandleEvent()进行回调处理。
下图所示为MetaServer端的RPC请求处理过程的时序图:
KFS启动时,将RPC的各种请求操作映射到不同的处理函数上:kfs_startup (startup.cc) > initialize_request_handlers (request.cc) > setup_handlers (request.cc)。
更进一步来分析一下,以KfsClient与MetaServer之间的RPC为例,KfsClient与MetaServer建立RPC连接后,ClientSM作为KfsClient与MetaServer之间RPC请求的代理,ClientSM负责接收并转发来自KfsClient的各种不同Request信息,处理后负责向KfsClient写Response信息,RPC请求的处理过程如下图所示(以MetaLookup为例,图中详细展示了相关的类及方法的调用关系):
=======================================================================
作者:大圆那些事(原攀峰@淘宝)
技术点:架构设计、分布式计算和存储、实时计算、Hadoop、C、Erlang、设计模式
Email:ypf412@163.com
MSN:ypf412@hotmail.com
博客:http://www.cnblogs.com/panfeng412/
微博:http://weibo.com/moudayuan/
=======================================================================
1. RPC相关类
下图所示为MetaServer端的RPC相关实现类:1、NetDispatch
(1)启动MetaServer端的epoll主循环;
(2)通过调用gNetDispatch.Start(gClientPort, gChunkServerPort),在指定的端口监听来自Client和ChunkServer的RPC请求:
启动ClientManager的接收者acceptor;
启动ChunkServerFactory的接收者acceptor。
2、NetManager
(1)通过epoll机制,维护一组NetConnection对象;当NetConnection状态发生变化时,调用其中的KfsCallbackObj的回调函数;
(2)同时实现了一个定时器机制。
3、NetConnection
(1)将KfsCallbackObj和TcpSocket关联起来,代表来自客户端的一个连接;
(2)当TCP连接的状态发生变化时,KfsCallbackObj的回调函数将会被调用执行。
4、Acceptor
(1)从Client/ChunkServer接收新的连接,然后创建一个新的NetConnection与这个新连接关联起来。NetConnection中含有相关的ClientSM/ChunkServer KfsCallbackObj,而ClientSM/ChunkServer KfsCallbackObj通过IAcceptorOwner的CreateKfsCallbackObj()方法被创建;
(2)继承于KfsCallbackObj,回调函数是Acceptor::RecvConnection:
一个Acceptor含有一个相关的NetConnection;
一个Acceptor含有一个成员变量mAcceptorOwner指向ClientManager或ChunkServerFactory。
5、IAcceptorOwner
(1)维护一个Acceptor,并提供CreateKfsCallbackObj()接口创建KfsCallbackObj。
6、ClientManager
(1)继承于IAcceptorOwner;
(2)含有一个Acceptor,用于接收新的连接;
(3)含有CreateKfsCallbackObj()方法,用于返回一个ClientSM KfsCallbackObj与Client的连接请求关联起来。
7、ChunkServerFactory
(1)继承于IAcceptorOwner;
(2)含有一个Acceptor,用于接收新的连接;
(3)含有CreateKfsCallbackObj()方法,用于返回一个ChunkServer KfsCallbackObj与ChunkServer的连接请求关联起来。
8、ClientSM
(1)继承于KfsCallbackObj,回调函数是HandleRequest();
(2)用于与一个Client连接建立关系,处理Client发起的请求。
9、ChunkServer
(1)继承于KfsCallbackObj,回调函数是HandleHello();
(2)用于与一个ChunkServer连接建立关系,处理ChunkServer发起的hello消息。
10、KfsCallbackObj
(1)调用SetHandler()设置回调函数,当外部事件发生时,调用HandleEvent()进行回调处理。
2. 请求处理过程
下图所示为MetaServer端的RPC请求处理过程的时序图:KFS启动时,将RPC的各种请求操作映射到不同的处理函数上:kfs_startup (startup.cc) > initialize_request_handlers (request.cc) > setup_handlers (request.cc)。
更进一步来分析一下,以KfsClient与MetaServer之间的RPC为例,KfsClient与MetaServer建立RPC连接后,ClientSM作为KfsClient与MetaServer之间RPC请求的代理,ClientSM负责接收并转发来自KfsClient的各种不同Request信息,处理后负责向KfsClient写Response信息,RPC请求的处理过程如下图所示(以MetaLookup为例,图中详细展示了相关的类及方法的调用关系):
=======================================================================
作者:大圆那些事(原攀峰@淘宝)
技术点:架构设计、分布式计算和存储、实时计算、Hadoop、C、Erlang、设计模式
Email:ypf412@163.com
MSN:ypf412@hotmail.com
博客:http://www.cnblogs.com/panfeng412/
微博:http://weibo.com/moudayuan/
=======================================================================
相关文章推荐
- 分布式文件系统KFS源码阅读与分析(三):RPC实现机制(MetaServer端)
- 分布式文件系统KFS源码阅读与分析(四):RPC实现机制(KfsClient端)
- 分布式文件系统KFS源码阅读与分析(四):RPC实现机制(KfsClient端)
- 分布式文件系统KFS源码阅读与分析(二):MetaServer元数据持久化
- Hadoop源码分析之一(RPC机制之Server)
- 分布式文件系统KFS源码阅读与分析(二):MetaServer元数据持久化
- 分布式文件系统KFS源码阅读与分析(一):MetaServer元数据组织结构
- Hadoop源码分析之一(RPC机制之Server)
- 分布式系统Hadoop源码阅读与分析(一):作业调度器实现机制
- 分布式文件系统KFS源码阅读与分析
- Hadoop源码分析之一(RPC机制之Server)
- 分布式文件系统KFS源码阅读与分析(一):MetaServer元数据组织结构
- Dubbo源码分析系列-扩展机制的实现
- Hadoop源码分析----RPC反射机制
- struts2源码分析-IOC容器的实现机制(上篇)(转载)
- 基于Spring源码分析AOP的实现机制
- Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)
- Hadoop基础之RPC机制以及HDFS源码分析
- HBase 源码分析1 – RPC机制 : 基础
- 消息传递机制的具体实现过程(分析源码之后的总结)