別問我在哪裡
也許我早已不是我自己,別問我在哪裡,我一直在這裡。
突然不知道說些什麼了...
初識 FastDFS
記得那是我剛畢業後進入的第一家公司,一個技術小白進入到當時的專案組後,在開發中上傳使用者頭像呼叫了一個據說是叫 FastDFS 的東西,我並不懂是什麼,只知道是一個檔案伺服器,據說還是在 Linux 上部署的,還是多臺伺服器什麼的,還是切片儲存、說京東用的就是,反正很厲害的樣子,我其實並接觸不到這玩意兒,我的任務也只是呼叫大神們封裝好的介面就行了,這可能是我第一次和 FastDFS 的第一次親密接觸。
後來不知道為什麼,當時的檔案伺服器老是出問題,每次圖片下載不下來我就低聲下氣的去找運維說:檔案又下載不了了,老大讓你重啟一下 Storage 伺服器
。這時候我也並不知道 Storage伺服器
是什麼鬼,反正就好像專案一出問題都是程式猿的錯,真特麼的!!!
FastDFS is an open source high performance distributed file system (DFS). It's major functions include: file storing, file syncing and file accessing, and design for high capacity and load balance.
翻譯:FastDFS 是一個開源的高效能分散式檔案系統(DFS)。 它的主要功能包括:檔案儲存,檔案同步和檔案訪問,以及高容量和負載平衡。
這是餘慶老師在他的 Github 上介紹關於 FastDFS 這個開源專案的描述。說的很明白了,這是一個高效能的輕量級開源分散式檔案系統,解決了我們日常專案中眾所周知的檔案儲存效能問題,幾乎適合市面上所有專案使用,據說好多家你知道的大公司也在使用,甚至你使用的各大網盤公司也在使用(儘管最近多家網盤公司關閉了),反正就是特別好用。感謝餘慶老師對開源世界的無私奉獻,這是餘老師的 GitHub 地址: https://github.com/happyfish100/fastdfs
試著簡單瞭解一下
大家都在用,肯定錯不了。正好最近公司想搭建自己的檔案伺服器,好像據說是原來用的七牛產生了鉅額流量費用,領導安排瞭解一下這個開源分散式檔案系統。瞭解一個東西,我們就要進入她的內部,人也一樣。那我們首先來看一下他的內部是怎麼工作或者說設計的吧!
FastDFS 系統有三個角色:跟蹤伺服器(Tracker Server)、儲存伺服器(Storage Server)和
客戶端(Client)。
- Tracker Server: 跟蹤伺服器,主要做排程工作,起到均衡的作用;負責管理所有的 storage server
和 group,每個 storage 在啟動後會連線 Tracker,告知自己所屬 group 等資訊,並保持週期性心跳。 - Storage Server:儲存伺服器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多臺 storage server,資料互為備份。
- Client:客戶端,上傳下載資料的伺服器,也就是我們自己的專案所部署在的伺服器。
這裡免不了放一張餘慶老師介紹 FastDFS 的 PPT 中的一張架構圖,清晰的說明了上述職責及關係:
上述架構優點:1.高可靠性:無單點故障 2.高吞吐性:只要 Group 足夠多,資料流量將足夠分散。
那麼怎麼上傳下載以及同步檔案這麼操作呢?我在這就不詳細說全部流程了,大概上傳流程就是客戶端傳送上傳請求到Tracker Server
伺服器,接著Tracker Server
伺服器分配group
和Storage Server
,當然這是有一定規則的,選擇好Storage Server
後再根據一定規則選擇儲存在這個伺服器會生成一個file_id
,這個file_id
包含欄位包括:storage server ip、檔案建立時間、檔案大小、檔案 CRC32 校驗碼和隨機數;每個儲存目錄下有兩個 256 * 256 個子目錄,後邊你會知道一個Storage Server
儲存目錄下有好多個資料夾的,storage 會按檔案file_id
進行兩次 hash ,路由到其中一個子目錄,然後將檔案儲存到該子目錄下,最後生成檔案路徑:group 名稱、虛擬磁碟路徑、資料兩級目錄、file_id和檔案字尾就是一個完整的檔案地址。
可能我理解的也不是很徹底,下載、同步操作我不寫了,這裡有一篇文章 分散式檔案系統FastDFS設計原理 講解的很詳細,我就不班門弄斧了,大家可以點選去看看。
下面我要做什麼?
接下來我可能會安裝配置一下 FastDFS 服務,試著搭建一個分散式檔案伺服器,我試著把整體的詳細步驟都記錄下來,對以後專案中使用做技術儲備或者說讓自己以後翻起來也簡單一些。可能有時候說不定就幫助到你了...
我的搭建環境是:
- 作業系統: CentOS 7 或 CentOS 6.8
- FastDFS: fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7
- Nginx : nginx-1.10.1
應該都是截至目前最新版本了,可能和你網上能搜到的 4.05 、4.06 甚至 2.? 的版本步驟不一樣,我大概會分下面兩篇具體的文章來記錄這個過程:
我保證這也行是目前 FastDFS 最新最穩定最簡單坑最少的一個配置安裝部署教程了。期間我也會把我踩的坑都放出來,我保證大家照著做就幾乎不會有坑。其實我在寫這篇文章的時候已經踩了好多坑了,哈哈...
總結一下
FastDFS 是一個由 C 語言實現的開源輕量級分散式檔案系統,作者餘慶(happyfish100),支援 Linux、FreeBSD、AID 等 Unix 系統,解決了大資料儲存和讀寫負載均衡等問題,適合儲存 4KB~500MB 之間的小檔案,如圖片網站、短視訊網站、文件、app 下載站等,UC、京東、支付寶、迅雷、酷狗等都有使用。
再次感謝餘慶老師對開源世界的無私奉獻,這是餘老師的 GitHub 地址: https://github.com/happyfish100/