海量文檔緩存 內(nèi)存_海量圖片存儲hbase_基于Hadoop的海量圖片存儲模型 的分析和設計
本文關鍵詞:海量圖片存儲,由筆耕文化傳播整理發(fā)布。
目前國內(nèi)外在面對圖片存儲問題時,所采取的解決方案有兩種,分別是圖片保存至數(shù)據(jù)庫和圖片存儲在硬盤。鑒于海量圖片規(guī)模下,數(shù)據(jù)庫承載太多圖片會導致數(shù)據(jù)庫容量和效率成為極大的瓶頸。常見的做法是圖片保存至硬盤,數(shù)據(jù)庫中保存圖片的存儲路徑。分布式存儲為海量圖片存儲提供了原始模型,一些研究成果和實踐表明,圖片存儲架構需要從容量和負載兩方面設計,且還要根據(jù)業(yè)務需求制定特定的緩存策略。容量方面,大部分的解決方案都是使用海量存儲,比如專業(yè)的磁盤陣列,入門級的磁盤柜或者高級的光纖盤陣、局域網(wǎng)盤陣等。此外,在采用多臺服務器存儲的前提下,需要提供NFS的分區(qū)給前端應用使用,在前端應用的程序邏輯中加入控制圖片存儲在哪一臺服務器的NFS分區(qū),常用的根據(jù)用戶id或者圖片id,通過關鍵詞的散列,到達同一類型圖片存儲在一臺服務器,加快讀取效率;旧蠄D片負載高的解決辦法有兩種,前端squid緩存和鏡像,通過對存儲設備使用鏡像,可以分布到多臺服務器上對外提供圖片服務,然后再配合 squid實現(xiàn)負載的降低和提高用戶訪問速度。這里我們采用Hadoop作為我們設計圖片存儲系統(tǒng)的基礎,一方面是因為Hadoop開源的特性,方便我們根據(jù)業(yè)務需求做一些源代碼方面的改善;令一方面,Hadoop可以部署在廉價的PC上,通過軟件實現(xiàn)高容錯性,符合圖片存儲業(yè)務發(fā)展的特性。Hadoop 各方面都符合我們的項目需求,這使其成為我們確定的基礎研究技術方向。同時我們采用Ngix+Redis做緩存策略,優(yōu)化圖片讀取。
存儲系統(tǒng)架構
1、存儲單元:采用Hadoop中的HDFS存儲大、中、小圖片,其中小圖片采用打包策略存儲,并且提供監(jiān)控管理界面,查看各個節(jié)點存儲空問運行狀態(tài)。通過HDFS的冗余備份和心跳檢測保證存儲數(shù)據(jù)的安全性,通過設定負載均衡策略,保證各個存儲節(jié)點的運行穩(wěn)定。
2、圖片索引:將圖片名和圖片元數(shù)據(jù)作為鍵值對<Key,Value>,放入HBase中存儲,并且進行數(shù)據(jù)查詢,避免圖片重復存儲,便于將來管理。
3、采用MapReduce進行圖片業(yè)務處理的編程實現(xiàn),針對大數(shù)據(jù)上傳后的批量處理和存儲優(yōu)化制定相應策略。
4、W曲服務:采用Nginx.0.9.6做圖片的web服務器,對網(wǎng)站的大、中、小圖片進行讀取,加上Nginx的Redis模塊對緩存中的微型圖片進行讀取。
5、緩存服務器:存儲網(wǎng)站的微型圖片,簽名照,小頭像,表情圖片,通過Nginx的Redis模塊直接讀取,通過調(diào)用Redis的JavaAPI程序?qū)?shù)據(jù)進行寫入。
6、負載均衡:HAproxy采用RoundRobin負載均衡算法,分載前端用戶請求的壓力到每個web圖片服務器上。
7、應用服務器:對圖片寫入的操作全部由Java應用服務器完成。
存儲系統(tǒng)寫流程
圖片寫請求由用戶發(fā)起后,通過負載均衡模塊的過濾,首先來到應用服務器排隊等待進入HDFS存儲系統(tǒng),通過NameNode分配DataNode進行存儲,圖片寫入過程中先確定寫入Block,再確定Sequence File,系統(tǒng)將二者的ID組合命名為圖片的系統(tǒng)內(nèi)的名稱。圖片元數(shù)據(jù)保存在HBase,同時元數(shù)據(jù)也保存在由Redis構建的緩存系統(tǒng)中。
Hadoop是為解決大文件存儲、大任務處理而生的分布式架構,作為圖片存儲業(yè)務中的圖片一般大小小于Hadoop的設計要求,這里我們通過合并小文件實現(xiàn)基于Hadoop的海量圖片存儲系統(tǒng)的設計,,并采取了優(yōu)化,總結如下:1、通過HA的架構對NameNode進行了熱備份,采用heartbeat3實現(xiàn)心跳檢測判斷NameNode健康狀況,解決了NameNode單點的安全隱患。
2、針對圖片的大小,對大圖片采取并行讀取,提高了大圖片存取效率,且還能通過配置文件的修改動態(tài)更改圖片大小設定。通過Sequence實現(xiàn)對小圖片的合并,并在合并過程中設定單個Sequence File的偏移量,加快圖片的訪問。
3、設計了圖片URL,將圖片存儲信息設定在圖片URL中,通過解析URL快速定位存儲圖片Block的DataNode和Fileld。將圖片元數(shù)據(jù)存放在HBase中,解決海量數(shù)據(jù)擴容和快速檢索的問題。
4、使用了Redis和HAProxy構建緩存區(qū)和負載均衡,使整個系統(tǒng)達到穩(wěn)定健康狀態(tài)。
本文關鍵詞:海量圖片存儲,由筆耕文化傳播整理發(fā)布。
本文編號:59063
本文鏈接:http://sikaile.net/wenshubaike/shangbiaozhuanli/59063.html