分布式文件系統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進行預讀操作。
浙公網安備 33010602011771號