java 文件存儲

1、小應用存儲方案linux

在開發中上傳文件存儲是個問題,而通常小應用開發會選擇服務器本地目錄作爲存儲地址,經過保存文件的相對路徑來獲取文件,在應用不要求高可用的狀況下這是一種廣泛的方案。git

問題: 在每次更新Java版本時,都須要將文件目錄作一次備份,否則直接將打包好的war包替換原來的版本時可能會丟失文件(有時可能會直接刪除原來的版本目錄而後在將新版本放到tomcat的webapps目錄)。github

解決方案: 使用 linux (windows的快捷方式) 的軟鏈接方式將文件目錄存儲在tomcat webapps文件目錄以外,這樣應用程序只須要讀取軟鏈接的目錄便可上傳文件到真正的文件目錄地址,而讀取文件仍是從軟鏈接的目錄讀取,這樣整個應用目錄被刪除文件也不會丟失。這裏須要提一下在tomcat中讀取軟鏈接文件須要在context.xml文件配置一個allowLinking屬性(只要添加屬性便可,不要刪除其餘配置)。web

<!--tomcat 5 6 7-->    
<Context allowLinking="true"/> 

<!--tomcat 8-->    
<Context>  
  <Resources allowLinking="true"/> 
</Context>

2、雲存儲方案windows

隨着文件系統規模愈來愈大,以及對應用的高可用與高併發需求。特別在應用須要快速迭代時能夠選擇比較成熟雲存儲解決方案。tomcat

雲存儲是在雲計算(cloud computing)概念上延伸和發展出來的一個新的概念,是指經過集羣應用、網格技術或分佈式文件系統等功能,應用存儲虛擬化技術將網絡中大量各類不一樣類型的存儲設備經過應用軟件集合起來協同工做,共同對外提供數據存儲和業務訪問功能的一個系統。因此雲存儲能夠認爲是配置了大容量存儲設備的一個雲計算系統。安全

現國內較成熟的雲存儲有阿里雲的Oss,騰訊的Cos (本人並無使用過) 即其餘雲服務提供商,雲計算的基本特色是對外提供的海量、安全、低成本、高可靠的雲存儲服務。您能夠經過本文檔提供的簡單的REST接口,在任什麼時候間、任何地點、任何互聯網設備上進行上傳和下載數據。服務器

基於大存儲優點,您能夠搭建出各類多媒體分享網站、網盤、我的和企業數據備份等基於大規模數據的服務。網絡

缺點: 運營會產生額外的費用。架構

優勢: 開發成本低,能夠配置cdn加速網絡...

3、分佈式文件系統方案

常見的分佈式文件系統有,GFS、HDFS、FastDFS等。各自適用於不一樣的領域。它們都不是系統級的分佈式文件系統,而是應用級的分佈式文件存儲服務。

1.GFS(Google File System)

Google公司爲了知足本公司需求而開發的基於Linux的專有分佈式文件系統,儘管Google公佈了該系統的一些技術細節,但Google並無將該系統的軟件部分做爲開源軟件發佈。

2.HDFS

Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有不少共同點。但同時,它和其餘的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是做爲Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。

3.FastDFS

FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。

FastDFS爲互聯網量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高性能等指標,使用
FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳、下載等服務。

FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要作調度工做,在訪問上起負載均衡的做用。

FastDFS原理

FastDFS經過客戶端鏈接tracker集羣,tracker返回一個集羣中可用的storage節點給客戶端,客戶端直接與storage鏈接傳輸文件,當storage文件保存成功並將信息同步到tracker時,storage將返回一個fileId給客戶端(fileId 字段中的 group能夠計算出對應服務器IP,M00是軟鏈接文件存儲的目錄),客戶端能夠經過這個fileId直接訪問到文件,也能夠經過fileId下載圖片。

FastDFS集羣線性擴容

因爲FastDFS經過tracker來管理存儲節點,要實現線性擴容只要添加storage而後配置新的group便可,這裏能夠只要使用默認的負載方案(根據存儲節點大小決定)將文件存儲在高容量節點,注意兩相同group中採起最小的節點爲準。

FastDFS冗餘備份

FastDFS文件備份根據相同的group個數來決定備份的個數,當有兩個group相同,上傳文件時將在另一臺機器上進行同步操做,以此類推。若是另外一臺機器宕機了,那將在恢復工做後繼續同步。若是在新增的節點上配置已有的group,而且group已經有文件,那麼新的節點也將同步已有的文件。

FastDFS架構圖
圖片來自網絡

FastDFS安裝

FastDFS具體安裝請參照 https://github.com/happyfish1... 注意:在配置tracker_server時配置多個就是多節點。

案例地址: https://github.com/tzling/fas...

FastDFS與HDFS的區別

定位和應用場合不同,Hadoop的文件系統HDFS主要解決並行計算中分佈式存儲數據的問題,其單個數據文件一般很大,採用了分塊(切分)存儲的方式。

FastDFS主要用於大中網站,爲文件上傳和下載提供在線服務,在負載均衡、動態擴容等方面都支持得比較好,FastDFS不會對文件進行分快(切分)存儲。

優勢:高容錯性能,高擴張性。

缺點:開發成功高,配置難度較複雜。

部分信息來自網絡。

相關文章
相關標籤/搜索