回到目錄 多看幾篇 之所以寫這篇文章完全是因為最近在研究FastDFS這個分散式的文件存儲系統,當然這不是我第一次研究它了,就像我們去看一本書,我們不會只看一篇,而是一次次,一篇篇,每看一次會有新的收穫,而研究技術,框架也是一樣,每研究一次,同樣會有不同層次的收穫,這次主要把fastDFS的集群就配 ...
多看幾篇
之所以寫這篇文章完全是因為最近在研究FastDFS這個分散式的文件存儲系統,當然這不是我第一次研究它了,就像我們去看一本書,我們不會只看一篇,而是一次次,一篇篇,每看一次會有新的收穫,而研究技術,框架也是一樣,每研究一次,同樣會有不同層次的收穫,這次主要把fastDFS的集群就配置了一下,客戶端的多tracker,併在程式執行過程中,自己也分析了一下它的集群原理。
原理
事實上,和mongodb,cat等集群原理相似,fastDFS也是有個路由伺服器(它被稱為trackers),首先客戶端根據自己的配置,與trackers進行通訊拿到有效的文件伺服器地址(被稱為storages),然後客戶端再真正的與它進行數據上的通訊,如上傳文件,下載文件里,因為fastDFS實際上把文件存儲到了storages伺服器上。
思維導圖
基礎概念
Stream:流,一般指文件流,記憶體流,可讀的流和可寫的流等,是一種數據轉換的格式,流在電腦里可以表示為流輸入或輸出的一個連續的位元組序列,它在使用完後,需要把資源釋放。
Byte[]:位元組數組,位元組是通過網路傳輸信息的單位。在ASCII碼中,一個英文字母(不分大小寫)占一個位元組的空間,一個中文漢字占兩個位元組的空間。當一個字元通過網路從一端發到別一端時,會將它轉換成位元組數組,需要再發送。
文件上傳時的Stream和byte[],有地我們需要進行轉換,這裡總結了兩個方法
public byte[] StreamToBytes(Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); stream.Seek(0, SeekOrigin.Begin); return bytes; } public Stream BytesToStream(byte[] bytes) { Stream stream = new MemoryStream(bytes); return stream; }
這種代碼其實不難理解,但其中的原理值得我們去回味,因為畢竟,流和位元組數據在網路傳輸中是並不可少的,也是電腦底層所認識的!