天天看點

網站檔案系統發展&&分布式檔案系統fastDFS

1、單機時代的圖檔伺服器架構

   初創時期由于時間緊迫,開發人員水準也很有限等原因。是以通常就直接在website檔案所在的目錄下,建立1個upload子目錄,用于儲存使用者上傳的圖檔檔案。如果按業務再細分,可以在upload目錄下再建立不同的子目錄來區分。例如:upload\QA,upload\Face等

優點:實作起來最簡單,無需任何複雜技術,就能成功将使用者上傳的檔案寫入指定目錄。儲存資料庫記錄和通路起來倒是也很友善。

缺點:上傳方式混亂,嚴重不利于網站的擴充。

2、單獨立檔案伺服器

   随着公司的業務不斷的發展,将服務和檔案放在同一伺服器下面的弊端越來越明顯;這個時候就該上線獨立的圖檔伺服器系統;通過ftp或者ssh工具将檔案上傳到圖檔伺服器的某個目錄下面,在通過ngnix或者apache伺服器來做圖檔的通路,給圖檔伺服器配置獨立的子域名,例如 img.xx.com。在業務處理檔案時通過ftp或者ssh将檔案上傳到檔案伺服器,傳回給程式一個獨立域名的圖檔url位址,網站正常通路的時候就通過這個URL位址來通路檔案。

優點:圖檔通路是很消耗伺服器資源的(因為會涉及到作業系統的上下文切換和磁盤I/O操作)。分離出來後,Web/App伺服器可以更專注發揮動态處理的能力;獨立存儲,更友善做擴容、容災和資料遷移;友善做圖檔通路請求的負載均衡,友善應用各種緩存政策(HTTP Header、Proxy Cache等),也更加友善遷移到CDN。

缺點:單機存在性能瓶頸,容災、垂直擴充性稍差

3、分布式檔案系統

   業務繼續發展,單獨單台的伺服器存儲和響應也很快到達了瓶頸,新的業務要求,檔案通路高響應性,高可用性來響應業務對系統的要求。分布式檔案系統,一般分為三塊内容來配合,服務的存儲、通路的仲裁系統,檔案存儲系統,檔案的容災系統來構成,總裁系統相當于檔案伺服器的大腦,根據一定的算法來決定檔案存儲的位置,檔案存儲系統負責報錯檔案,容災系統負責檔案系統和自己的互相備份。

優點:擴充能力: 毫無疑問,擴充能力是一個分布式檔案系統最重要的特點;高可用性: 在分布式檔案系統中,高可用性包含兩層,一是整個檔案系統的可用性,二是資料的完整和一緻性;彈性存儲: 可以根據業務需要靈活地增加或縮減資料存儲以及增删存儲池中的資源,而不需要中斷系統運作

缺點:系統複雜度稍高,需要更多伺服器

1、什麼是FastDFS

FastDFS是一個開源的輕量級分布式檔案系統。它解決了大資料量存儲和負載均衡等問題。特别适合以中小檔案(建議範圍:4KB < file_size <500MB)為載體的線上服務,如相冊網站、視訊網站等等。在UC基于FastDFS開發向使用者提供了:網盤,社群,廣告和應用下載下傳等業務的存儲服務。

2、FastDFS架構和原理

FastDFS服務端有三個角色:跟蹤伺服器(tracker server)、存儲伺服器(storage server)和用戶端(client)。

tracker server:跟蹤伺服器,主要做排程工作,起負載均衡的作用。在記憶體中記錄叢集中所有存儲組和存儲伺服器的狀态資訊,是用戶端和資料伺服器互動的樞紐。相比GFS中的master更為精簡,不記錄檔案索引資訊,占用的記憶體量很少。

storage server:存儲伺服器(又稱:存儲節點或資料伺服器),檔案和檔案屬性(meta data)都儲存到存儲伺服器上。Storage server直接利用OS的檔案系統調用管理檔案。

client:用戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協定與跟蹤器伺服器或存儲節點進行資料互動。

網站檔案系統發展&&分布式檔案系統fastDFS

Tracker相當于FastDFS的大腦,不論是上傳還是下載下傳都是通過tracker來配置設定資源;用戶端一般可以使用ngnix等靜态伺服器來調用或者做一部分的緩存;存儲伺服器内部分為卷(或者叫做組),卷于卷之間是平行的關系,可以根據資源的時候情況随時增加,卷内伺服器檔案互相同步備份,以達到容災的目的

上傳機制:

首先用戶端請求Tracker服務擷取到存儲伺服器的ip位址和端口,然後用戶端根據傳回的IP位址和端口号請求上傳檔案,存儲伺服器接收到請求後,生産檔案file_id并且将檔案内容寫入磁盤傳回給用戶端file_id和路徑資訊、檔案名,用戶端儲存相關資訊上傳完畢

下載下傳機制:

用戶端帶上檔案名資訊請求Tracker服務擷取到存儲伺服器的ip位址和端口,然後用戶端根據傳回的IP位址和端口号請求下載下傳檔案,存儲伺服器接收到請求後傳回檔案給用戶端。

3、如何搭建fastDFS

請參考以下文章:

FastDFS + Nginx 反向代理緩存 安裝與配置

位址:http://www.linux178.com/storage/fastdfs-nginx-cache.html

4、使用java調用fastDFS

以下代碼是一個spring mvc中一個完整的上傳請求

fastDFS java用戶端配置檔案fdfs_client.conf配置如下:

參考:

http://blog.chinaunix.net/uid-20196318-id-4058561.html

http://tech.uc.cn/?p=221

作者:純潔的微笑

出處:www.ityouknow.com

資源:微信搜【純潔的微笑】關注我,回複 【程式員】【面試】【架構師】有我準備的一線程式必備計算機書籍、大廠面試資料和免費電子書。 一共1024G的資料,希望可以幫助大家提升技術和能力。

本文如對您有幫助,還請多幫 【推薦】 下此文。

點我了解:Tooool-程式員一站式導航網站