淘寶分布式的文件系統TFS的原理及應用
TFS開源項目:http://code.taobao.org/p/tfs/wiki/index/
TFS是taobao filesystem的簡稱,是一個分布式的文件系統,目前最新的版本是TFS2.X
TFS和NAS相比,具有線性擴容好,高并發性能好。和HDFS相比更適合小文件,和FastDF相比支持自定義文件夾結構
其1.0的架構如下:
其中,nameserver負責元數據的管理,文件的定位,寫文件塊的分配,dataserver的管理,數據備份監控,數據分布及負載均衡。以及操作日志的管理。
dataserver用來存儲管理數據文件,處理客戶端的文件訪問,轉發數據寫入請求,復制和處理數據文件。
resourcecenter用來管理應用(權限和統計),集群的管理(擴容及應用透明化),計算距離實現就近訪問
metaserver用來提供目錄和自定義文件服務,也能用來做為后端數據庫存儲的緩存
rootserver用來刮泥metaserver并且分配metaserver的服務對象
下面是TFS1的寫流程和讀流程
下面是TFS2的讀寫流程
TFS有自己的讀寫API,包括JAVA,c++,python,php各種版本,使用非常簡單,下面是我自己封裝的一個Utils類
/** * 獲取tfsmanager * @return */ public static DefaultTfsManager getTfSManager(){ String CONF_TFS_RS_ADDRESS=ConfigManager.getConfigValue("tfs.rsAddr"); String CONF_TFS_APPKEY=ConfigManager.getConfigValue("tfs.appkey"); String CONF_TFS_IMG_SERVER=ConfigManager.getConfigValue("tfs.image.host"); DefaultTfsManager tfsManager = new DefaultTfsManager(); tfsManager.setRsAddr(CONF_TFS_RS_ADDRESS); // 設置WebService Root Server地址,地址格式為 ip:port tfsManager.setAppKey(CONF_TFS_APPKEY); // 設置appkey tfsManager.init(); return tfsManager; } /** * 存儲tfs文件 * @param inputStream * @param fileName * @return */ public static String saveTfsFile(InputStream inputStream,String fileName){ try { DefaultTfsManager tfsManager=getTfSManager(); byte[] fileBytes = FileUtils.inputStreamToByte(inputStream); String fileExt=FileUtils.getFileExt(fileName); String tfsfileName=tfsManager.saveFile(fileBytes,null,fileExt,true); return tfsfileName; } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. return ""; } } /** * 獲取tfs文件 * @param tfsFileName * @return */ public static OutputStream getTfsFile(String tfsFileName){ DefaultTfsManager tfsManager=getTfSManager(); OutputStream outputStream=new ByteArrayOutputStream(); Map fileInfor=new HashMap(); boolean result=tfsManager.fetchFile(tfsFileName,"",outputStream,fileInfor); if(result){ return outputStream; }else { return null; } }
來自:http://my.oschina.net/zimingforever/blog/174879
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!