FastDFS之客戶端與Tracker通訊

2021-06-27 18:35:18 字數 3466 閱讀 1893

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 2

)使用storage_id去查詢對應的storage,若其狀態為active則成功返回,否則轉變成輪詢方式選擇。

2、輪詢方式選擇

從上次的位置向後檢查狀態為

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 中寫入...