fastdfs之客戶端與tracker通訊
基於fastdfs 5.03/5.04
2014-12-19
一、概述
客戶端大部分的操作過程都是要先查詢tracker,從tracker返回具體操作的storageip,然後連線該storageip,執行具體的操作。本篇將主要介紹三種型別的客戶端操作:upload、download、delete,tracker是如何選擇乙個可使用的storageip返回給客戶端。
二、tracker選擇upload storage
首先來看下
tracker.conf之中有關upload storage選擇的相關配置:
store_lookup = 0
##表示upload時group的選擇
0:所有的group以輪詢方式進行選擇 1
:指定group,該group名稱由store_group配置指定 2
:負載均衡,表示選擇空餘容量最大的group
store_server = 0
##表示如何選擇group中的storage
0:group中的所有storage進行輪詢 1
:選擇ip位址最大的storage 2
:根據優先順序配置(在每個storage.conf、upload_priority配置)
store_path = 0
##表示如何選擇storage中的store_path
0:對所有的store_path進行輪詢 1
:負載均衡,選擇空閒空間最大的store_path
根據上述的三個配置,也能猜到了,
tracker在收到客戶端的upload查詢時,需要返回三個值,group_name、storage_ip、storage_port、write_path_index(表示store_path的索引值)。下面依次說明這三個值的選擇:
1、group選擇
選擇的group需要滿足兩個條件:
group中當前要有處於active狀態的storage;
group
的空閒空間(組內storage最小的空閒空間)大於配置的保留空間。
1)判斷若store_lookup==round_robin或者load_balance
則直接使用
g_groups.current_write_group
值,該值預設為0,若選擇方式為輪詢
round_robin
則每次選擇後會遞增,而若為負載均衡
load_balance
則tracker在每次收到storage的磁碟使用率匯報訊息
storage_report_disk_usage
時更新。得到group的索引值後,只要去檢查該group是否滿足上面說到的兩個條件,若滿足,group就選擇好了。否則按照順序依次檢測後面的group找到乙個滿足條件的group即可。若依然沒找到則返回錯誤。
2)判斷若store_lookop==spec_group 表示指定group,那麼直接去檢查該group是否符合上述兩個條件,若符合則表示找到group,若不符合則返回錯誤。
2、storage選擇
1)pstoreserver指標
tracker
之中為每個group儲存乙個
pstoreserver
指標,該指標表示下次儲存資料時可使用的storage物件指標。在原始碼中通過
tracker_mem_find_store_server
函式來實現更新,在該group之中有storage狀態從非active變成active或者,從active變成非active時否將檢查是否更新。
pstoreserver
指標更新按照如下邏輯進行:若該組沒有狀態為active的storage則直接返回。若tracker.conf配置的store_server==2(按照優先順序),則會遍歷該組內的active狀態storage找到其中優先順序最小的那個storage賦予他;其他情況就是直接使用第乙個active狀態的storage賦予它。 若
store_server==round_robin則直接按照輪詢方式選擇下乙個active狀態的storage;否則直接使用該group的
pstoreserver
指標對應的storage即可。
3、storepath選擇
同樣tracker為每個storage儲存乙個
current_write_path
,該值表示當前應該使用的store_path_index。初始時該值等於零,同樣的若store_path==1(負載均衡,表示使用最大空閒空間的那個store_path),則在storage每次匯報磁碟空間使用率的訊息中更新,與group負載均衡方式類似。
此時只要從
current_write_path
開始選擇store_path,只要滿足空閒空間大於保留空間則選擇結束。
三、tracker選擇download storage
tracker
1 22、輪詢方式選擇)使用storage_id去查詢對應的storage,若其狀態為active則成功返回,否則轉變成輪詢方式選擇。
從上次的位置向後檢查狀態為
active的storage,做如下判斷,若條件符合則返回該storage:
1)檔案時間timpstamp為一天之前(fastdfs假設一天之前的檔案肯定同步完成) 2
)該storage的最後最早被同步時間大於該檔案的timestamp 3
)該storage
的最後被同步時間
+1大於檔案時間並且當前時間減去檔案時間大於
300秒
(不明白作者這個判斷的意圖) 4
)該storage就是檔案的源storage
當沒有乙個
storage符合條件時返回錯誤。
關於最後最早被同步時間,請參考我這篇文章第三部分:
四、tracker選擇delete storage
該過程與
tracker選擇download storage一樣。
FastDFS客戶端與自定義檔案儲存系統
1 安裝 2 使用 使用fastdfs客戶端,需要有配置檔案。我們在meiduo mall utils目錄下新建fastdfs目錄,將提供給大家的client.conf配置檔案放到這個目錄中。需要修改一下client.conf配置檔案 base path fastdfs客戶端存放日誌檔案的目錄 tr...
FastDFS客戶端與自定義檔案儲存系統
1 安裝 2 使用 使用fastdfs客戶端,需要有配置檔案。我們在meiduo mall utils目錄下新建fastdfs目錄,將提供給大家的client.conf配置檔案放到這個目錄中。需要修改一下client.conf配置檔案 base path fastdfs客戶端存放日誌檔案的目錄 tr...
使用tcp select實現客戶端與客戶端的通訊
使用多路復用實現客戶端與客戶端進行通訊 原理 客戶端只要一連上伺服器,立馬給伺服器傳送使用者名稱,然後在服務端將newsocketfd 存放在同乙個結構體中,客戶端先給伺服器傳送資料,然後通過伺服器 給客戶端。伺服器先會查詢對應名字的 newsocketfd 然後向該 newsocketfd 中寫入...