?
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
1.名詞解釋:
tracker服務器:中文叫做跟蹤器,主要做調度工作,在訪問上起負載均衡的作用。(tracker告訴WWW,與哪臺Storage通訊)
storage服務器:中文叫做存儲器,主要用來存儲數據,它上面可以建立節點(或者叫卷,組)
tracker和storage都可以由多臺服務器組成,storage的各位服務器數據都是同步的,這是實現負載均衡的前提。
?
?
?
?
2.上傳流程:
?
?
?
?
? ? FastDFS file upload 上傳文件交互過程:
? ? 1. client詢問tracker上傳到的storage,不需要附加參數;
? ? 2. tracker返回一臺可用的storage;
? ? 3. client直接和storage通訊完成文件上傳。
? ??
? ? FastDFS file download 下載文件交互過程:
? ? 1. client詢問tracker下載文件的storage,參數為文件標識(卷名和文件名);
? ? 2. tracker返回一臺可用的storage;
? ? 3. client直接和storage通訊完成文件下載。
? ??
首先客戶端 client 發起對 FastDFS 的文件傳輸動作,是通過連接到某一臺 Tracker Server (跟蹤器)的指定端口來實現的,
Tracker Server 根據目前已掌握的信息,來決定選擇哪一臺 Storage Server (存儲器),
然后將這個Storage Server 的地址等信息返回給 client,
然后 client 再通過這些信息連接到這臺 Storage Server,將要上傳的文件傳送到給 Storage Server上。
?client向tracker發一個HTTP的GET請求,并把它自己的信息放在GET的參數中;
這個請求的大致意思是:我是xxx(一個唯一的id),我想下載yyy文件,我的ip是aaa,我用的端口是bbb...
tracker對所有下載者的信息進行維護,當它收到一個請求后,首先把對方的信息記錄下來
(如果已經記錄在案,那么就檢查是否需要更新),然后將一部分
(并非全部,根據設置的參數已經下載者的請求)參與下載同一個文件(一個tracker服務器可能同時維護多個文件的下載)的下載者的信息返回給對方。
Client在收到tracker的響應后,就能獲取其它下載者的信息,那么它就可以根據這些信息,與其它下載者建立連接,從它們那里下載文件片斷。
?
FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器(tracker)主要做
調度工作,就像公交車站里面的調務員一樣,它負責通過負載均衡選出最優的存儲節點(storage)。存儲節點(storage)顧名思義就是負責存儲、
數據同步、數據的操作的一個服務,完成文件管理的所有功能:存儲、同步和提供存取接口,FastDFS同時對文件的meta data進行管理。
所謂文件的meta data就是文件的相關屬性,以鍵值對(key value pair)方式表示,
如:width=1024,其中的key為width,value為1024。文件meta data是文件屬性列表,可以包含多個鍵值對。
3.架構簡析、特點
FastDFS 是包括一組 Tracker Server 和 Storage Server 的。
Tracker Server 與 Storage Server 之間不直接通信,其基本的信息由配置文件在系統啟動加載時獲知。
Storage Server 是分成多個 Group,每個 Group 中的Storage 都是互相備份的,
就是說,如果 Group1 有 Storage1、Storage2、Storage3,其容量分別是100GB、100GB、100GB,那么 Group1 的存儲能力是 100GB,
而不是 300GB,這就是互相備份的意思。
進一步說,整個 Group 的存儲能力由該組中該儲能力最小的 Storage 決定。
多個 Group 之間的存儲方式,可以采用 round robin(輪訓)、load balanced(負載均衡)或指定 Group 的方式。
?FastDFS 架構中,數據最終是與一個 available (有空的、可獲得的) Storage Server 進行傳輸的。
?FastDFS的特點包括(1)高可靠性:無單點故障;(2)高吞吐量:只要 Group 足夠多,數據流量是足夠分散的。
?(3)適用于小文件存儲,因為 FastDFS 不回對文件進行分塊。
?因為文件比較小(比如普通級別的圖片類應用,文件最大就在幾個MB的量級),一來沒有必要分塊, 二來分塊會加重服務器的工作量。
?但是,如果把 FastDFS 應用于大文件存儲的場景,可能這一特點就會變成缺點。
需要說明的是,client為使用FastDFS服務的調用方,client也應該是一臺服務器,它對tracker和storage的調用均為服務器間的調用。
以上講解參考:http://blog.csdn.net/mr_smile2014/article/details/52095966
https://zhidao.baidu.com/question/9124794.html
http://www.cnblogs.com/lori/archive/2013/05/21/3090134.html
https://www.oschina.net/p/fastdfs
?
?
http://blog.csdn.net/poechant/article/details/6996047?
?
?
使用樣例見 ;
jQuery上傳插件Uploadify使用Demo、本地上傳(ssm框架下)
?