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