分布式文件系统KFS源码阅读与分析(四):RPC实现机制(KfsClient端)

上一篇博客介绍了KFS中RPC实现机制MetaServer端的实现,下面接着介绍一下KfsClient端的实现框架。

KfsClient是为应用程序暴露的接口类,它是在应用程序代码和KFS Servers(MetaServer和Chunkserver)之间起着桥梁的作用,对于一个MetaServer,只能有一个KfsClient。KfsClientFactory单态工厂类负责为不同的MetaServer创建KfsClient。

KfsClientImpl是KfsClient的实现类,负责实际地与MetaServer的RPC请求的交互,如目录操作(cd、mkdir、rmdir、readdir等),文件操作(create、remove、rename等)。

FileTableEntry缓存已打开的文件/目录的句柄,包括当前的文件偏移(FilePosition对象),文件属性信息、chunk属性的集合(ChunkAttr对象)、chunk的缓存(ChunkBuffer对象),打开模式等。

FilePosition记录文件指针的位置,包括两个方面:文件的offset偏移被转换为一个chunk号及在chunk内的偏移量。为了提高性能,客户端对读写进行了缓存,存储的是当前chunk中的数据,这是通过PendingChunkRead来实现的,而缓存的是对应的FileTableEntry中的ChunkBuffer。

ChunkAttr包含chunk server的位置,chunk id,大小,版本号等基本属性信息。

ChunkBuffer是为了加速小的读写操作而设置的buffer,从当前chunk缓存一块数据。

PendingChunkRead用于chunk的预读操作:向chunk server发起读请求;从chunk server接收数据;通过重置与chunk server的连接,取消读请求。

下图概括地展示了这些类之间的关系:

 

 

(1)KfsClient中包含了一个代理类KfsClientImpl;

(2)KfsClientImpl中维护了一个FileTableEntry的集合,记录所有已打开的文件/目录的句柄;

(3)FileTableEntry中通过ChunkAttr缓存chunk属性信息(如chunk位置),通过FilePosition缓存当前chunk信息,通过ChunkBuffer对当前chunk进行buffer操作;

(4)ChunkAttr记录chunk server位置和chunk id等属性信息;

(5)FilePosition通过PendingChunkRead进行预读操作。

posted on 2011-12-24 23:35  大圆那些事  阅读(2486)  评论(1编辑  收藏  举报

导航