TFS的文件名由塊號和文件號經過某種對應關係組成,最大長度爲18字節。文件名固定以T開始,第二字節爲該集羣的編號(能夠在配置項中指定,取值範圍 1~9)。餘下的字節由Block ID和File ID經過必定的編碼方式獲得。文件名由客戶端程序進行編碼和解碼,它映射方式以下圖:
TFS客戶程序在讀文件的時候經過將文件名轉換爲BlockID和FileID信息,而後能夠在!NameServer取得該塊所在!DataServer信息(若是客戶端有該Block與!DataServere的緩存,則直接從緩存中取),而後與!DataServer進行讀取操做。html
TFS系統中,nameserver會保證一個文件有多個副本存儲於不一樣的dataserver上以保證冗餘。當因爲dataserver服務器宕機或因爲其餘緣由退出系統致使某些文件副本數量降低時,nameserver將會調度新的dataserver節點存儲文件備份。一樣爲了保證數據一致性,當寫入一個文件時,只有全部參與的dataserver均寫入成功時,該操做纔算成功。TFS的寫操做數據流圖以下所示:緩存
客戶端首先向nameserver發起寫請求,nameserver須要根據dataserver上的可寫塊,容量和負載加權平均來選擇一個可寫的block。而且在該block所在的多個dataserver中選擇一個做爲寫入的master,這個選擇過程也須要根據dataserver的負載以及當前做爲master的次數來計算,使得每一個dataserver做爲master的機會均等。master一段選定,除非master宕機,不會更換,一旦master宕機,須要在剩餘的dataserver中選擇新的master。返回一個dataserver列表。
客戶端向master dataserver開始數據寫入操做。master server將數據傳輸爲其餘的dataserver節點,只有當全部dataserver節點寫入均成功時,master server纔會向nameserver和客戶端返回操做成功的信息。服務器
根據TFS文件名解析出Block ID和block中的File ID.分佈式
向nameserver發送查詢請求獲得Block ID所在的dataserver地址。網站
因爲nameserver中維護了block和dataserver的對應關係,因此nameserver可以提供相應的信息。編碼
Note: 因爲TFS是把大量小文件放在一個block裏面,url
因此TFS的文件複製是基於block的,並且複製出來的block的block id應該是一致的spa
經過發送Block_ID、File_ID和offset爲參數的讀請求到對應的dataserver,獲得文件內容。3d
dataserver會根據本地記錄的信息來獲得File ID所在block的偏移量,從而讀取到正確的文件內容.code
TFS 在2.0版本增長了一個server, 叫作 rcserver. 這個 server 主要是爲了淘寶內部管理使用 TFS 的各個應用. 咱們給每一個應用分配一個惟一的 AppKey. TFS 客戶端使用這個 AppKey 登陸到 rcserver, 取得本身應該訪問的 TFS 集羣信息. 客戶端還會按期把本身的一些統計值發送給 rcserver. 具體信息能夠參看源碼中 doc 目錄下的關於 rcserve 的文檔.
ZOOM 雲視頻會議網站:http://www.zoomonline.cn/