分布式圖片存儲系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式圖片存儲系統(tǒng),是一種具備容錯功能的網(wǎng)絡(luò)分布式文件系統(tǒng)。
【背景技術(shù)】
[0002]圖片在目前互聯(lián)網(wǎng)領(lǐng)域應(yīng)用越來越多,使用的存儲空間、傳輸帶寬、網(wǎng)頁體積絕對值和比重越來越大。因此降低存儲成本、提高圖片并發(fā)讀取性能、增強(qiáng)容量可擴(kuò)展能力等成為目前圖片存儲的主要問題。分布式系統(tǒng)具備高可擴(kuò)展性、高可用性、高穩(wěn)定性及高并發(fā)性等優(yōu)勢,能夠解決海量圖片存儲與讀取,提供優(yōu)良的解決方案。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是:提供一種分布式圖片存儲系統(tǒng),能夠提高圖片處理速度,提升系統(tǒng)穩(wěn)定性,實(shí)現(xiàn)海量圖片數(shù)據(jù)的存儲和訪問。
[0004]基于以上情況,本發(fā)明基于分布式系統(tǒng)具有多個計(jì)算節(jié)點(diǎn),具備保證系統(tǒng)的一致性、偵測故障節(jié)點(diǎn)、數(shù)據(jù)恢復(fù)、均衡負(fù)載、線性擴(kuò)展等特點(diǎn)提出了一種分布式圖片存儲系統(tǒng)。
[0005]本發(fā)明分布式圖片存儲系統(tǒng)由三個子系統(tǒng)組成,包括:
[0006]—、圖片上傳提交子系統(tǒng),圖片上傳提交子系統(tǒng)用于接收客戶端提交的圖片字節(jié)流,對原始圖片進(jìn)行信息提取、壓縮、加數(shù)字水印等處理,這些處理均采用并行方式執(zhí)行,最后將處理后的圖片存儲到圖片存儲子系統(tǒng)中。
[0007]二、圖片存儲子系統(tǒng),圖片存儲子系統(tǒng)可基于分布式文件存儲數(shù)據(jù)庫構(gòu)建,如基于Mongodb的GridFS構(gòu)建,其是一種由多個節(jié)點(diǎn)和分片組成的分布式文件存儲系統(tǒng),其中每一個節(jié)點(diǎn)中包含多個分片,實(shí)現(xiàn)數(shù)據(jù)的分塊存儲,提供系統(tǒng)的高可用性。采用一致性Hash算法來協(xié)調(diào)多個節(jié)點(diǎn)運(yùn)作,通過心跳機(jī)制來定位故障節(jié)點(diǎn),通過選舉算法選舉主控節(jié)點(diǎn),能在不終止服務(wù)的情況下動態(tài)的添加或移除節(jié)點(diǎn),動態(tài)調(diào)節(jié)圖片存儲子系統(tǒng)的存儲容量。
[0008]三、圖片讀取子系統(tǒng),圖片讀取子系統(tǒng)利用Web服務(wù)器,如高性能web服務(wù)器Nginx向用戶提供訪問圖片存儲子系統(tǒng)中的圖片服務(wù),通過Nginx處理訪問請求,解析請求參數(shù),根據(jù)參數(shù)不同實(shí)現(xiàn)讀壓縮功能,給用戶傳輸不同大小的圖片,以實(shí)現(xiàn)根據(jù)用戶的需求為用戶提供不同壓縮比的圖片的目的。
[0009]為實(shí)現(xiàn)本發(fā)明之目的,采用以下技術(shù)方案予以實(shí)現(xiàn):
[0010]本發(fā)明的技術(shù)方案如下:
[0011]分布式圖片存儲系統(tǒng)主要分為三個子系統(tǒng):圖片上傳提交子系統(tǒng)、圖片存儲子系統(tǒng)和圖片讀取子系統(tǒng)。各個子系統(tǒng)均以分布式架構(gòu)部署到不同的設(shè)備上,每個子系統(tǒng)也是集群的運(yùn)作方式。
[0012]一、圖片上傳提交子系統(tǒng)
[0013]該系統(tǒng)接收客戶端提交的圖片字節(jié)流,對原始圖片進(jìn)行提取信息、壓縮、數(shù)字水印等處理后,再與圖片存儲子系統(tǒng)交互,將圖片存儲在圖片存儲子系統(tǒng)上。系統(tǒng)采用高效的二進(jìn)制傳輸協(xié)議Hessian,接收客戶端傳來的圖片,在收到圖片后還要對原始圖片做一定的處理,包括提取圖片信息,根據(jù)用戶要求進(jìn)行壓縮,還可以在圖片上添加水印,這些圖片處理可通過基于開源框架Hadoop的MapReduce并行化進(jìn)行。提交子系統(tǒng)的服務(wù)器通過Tomcat接收請求,然后啟動MapReduce任務(wù),任務(wù)執(zhí)行完畢后返回到主線程,響應(yīng)客戶端。由于Hessian協(xié)議的語言無關(guān)性可以實(shí)現(xiàn)多語言客戶端,Hessian協(xié)議有很多開源實(shí)現(xiàn)版本,包括Java、Python、C++、.Net、Php、Ruby等,所以提交子系統(tǒng)也可以同時支持多種語言的客戶端。
[OOM] 對于圖片處理(MapReduce任務(wù)),該子系統(tǒng)米用多次任務(wù)分片(Map),一次整合(Reduce)的方式處理圖片。多次Map是指每一種圖片處理都是一個Map任務(wù),Map任務(wù)完成后將輸出傳給下一個Map任務(wù)進(jìn)行處理,當(dāng)判定圖片處理已經(jīng)完成時,啟動Reduce任務(wù)提交到存儲子系統(tǒng)中。如此設(shè)計(jì)可以實(shí)現(xiàn)圖片的管道化處理,這些管道可以在不同的節(jié)點(diǎn)(如Hadoop節(jié)點(diǎn))上進(jìn)行,可以同時并發(fā)處理多個提交請求,提高系統(tǒng)的并發(fā)能力。
[0015]二、圖片存儲子系統(tǒng)
[0016]圖片存儲子系統(tǒng)承載著圖片的物理存儲和索引機(jī)制,在整個系統(tǒng)中處于非常重要的地位。該系統(tǒng)可基于分布式文件存儲數(shù)據(jù)庫如Mongodb和對象存儲結(jié)構(gòu)如GridsFS實(shí)現(xiàn),采用分片架構(gòu)如Sharding架構(gòu),在其基礎(chǔ)上通過一致性Hash算法實(shí)現(xiàn)可以保證數(shù)據(jù)一致性的訪問層。通過心跳機(jī)制檢查故障節(jié)點(diǎn),基于二進(jìn)制日志提高數(shù)據(jù)恢復(fù)效率。
[0017]系統(tǒng)底層采用分布式文檔存儲數(shù)據(jù)庫,如Mongodb集群架構(gòu),使用大對象存儲結(jié)構(gòu)如GridFs結(jié)構(gòu)進(jìn)行物理存儲,對外采用訪問控制代理模塊,如mongo proxy,主要功能包括實(shí)現(xiàn)讀寫分離和連接池(預(yù)先生成的多個連接)。如圖2所示,該子系統(tǒng)包括:
[0018]數(shù)據(jù)庫分片(如Shards):—個shard為一組mongodb物理數(shù)據(jù)庫集群,由多個分片shard共同組成一個副本集合,每個shard上的數(shù)據(jù)為某一范圍的數(shù)據(jù)塊,可以支持指定shard范圍的查詢。數(shù)據(jù)在shard中的存儲方式是按塊存儲的,一旦某個數(shù)據(jù)塊的容量增長到最大容量時,這個數(shù)據(jù)塊會切分成兩塊。當(dāng)shard的數(shù)據(jù)過多時,數(shù)據(jù)塊將被迀移到系統(tǒng)的其他shard中。另外,新的shard加入時,數(shù)據(jù)塊也會迀移,即多個數(shù)據(jù)庫分片分別存儲某數(shù)據(jù)的一部分,組成該完整的數(shù)據(jù),當(dāng)增加數(shù)據(jù)庫分片時,重新計(jì)算每個分片上應(yīng)存儲的所述數(shù)據(jù)的一部分,各數(shù)據(jù)庫分片重新存儲按計(jì)算結(jié)果得到的該數(shù)據(jù)的一部分。
[0019]備份塊(如Replica set):由多個存儲數(shù)據(jù)相同、地位平等的mongodb物理數(shù)據(jù)庫集群共同組成,用于存儲備份數(shù)據(jù)塊,如上述副本集合。
[0020]控制中心(如Mongos):可以有多個,相當(dāng)于一個控制中心,負(fù)責(zé)數(shù)據(jù)請求的路由和協(xié)調(diào)操作,包括請求分發(fā)、數(shù)據(jù)整合等,使得mongodb集群像一個整體的系統(tǒng)。
[0021]用于提供配置接口、以訪問控制中心的配置服務(wù)器(Configserver):該配置服務(wù)器用于存儲每個shard、replica set、節(jié)點(diǎn)和塊數(shù)據(jù)的基本信息。每個config server上都有一份所有塊數(shù)據(jù)信息的拷貝,以保證每臺config server上的數(shù)據(jù)的一致性。
[0022]訪問控制代理模塊(如Mongoproxy):是一個提供實(shí)現(xiàn)讀寫分離、維護(hù)連接池的代理模塊。讀寫分離是將客戶的讀請求和寫請求進(jìn)行分離,分別轉(zhuǎn)發(fā)給不同的任務(wù)處理模塊進(jìn)行處理,在執(zhí)行寫請求時,mongod進(jìn)程就不會再接受其他任務(wù)請求,提高系統(tǒng)性能。
[0023]三、圖片讀取子系統(tǒng)
[0024]圖片讀取子系統(tǒng)面向的是終端瀏覽圖片的用戶,通過Httpurl的方式提供圖片瀏覽服務(wù)。url格式與參數(shù)如下:
[0025]http://{image_server}/imgname/{encoded_pic_id}.jpg?scale ={x|m|ssize}
[0026]image_server:圖片瀏覽請求處理Http服務(wù)器域名或ip;
[0027]ecode_pic_id:圖片id加密后的字符串;
[0028]scale:圖片尺寸x、m、s分別指大、中、小圖片,同時支持大于O的數(shù)字,指定圖片的一邊(長邊或短邊)變?yōu)檫@個數(shù)字,另一邊(短邊或長邊)則根據(jù)圖片的原來長度寬比進(jìn)行伸縮得到。
[0029]圖片讀取子系統(tǒng)介于最終瀏覽用戶和存儲子系統(tǒng)之間,主要功能是接受用戶請求,從存儲子系統(tǒng)中獲取圖片,然后響應(yīng)給用戶。這個過程還包括緩存交互和圖片壓縮等。[°03°] 該系統(tǒng)的http請求處理基于web服務(wù)器,如Ngnix實(shí)現(xiàn),Nginx收到Http請求之后,根據(jù)配置文件和負(fù)載均衡算法選擇該子系統(tǒng)的具體模塊(如過濾,重定向、反向代理、緩存、讀取等)進(jìn)行處理,處理模塊執(zhí)行處理之后,把結(jié)果輸出給客戶端。
[0031 ]該系統(tǒng)的緩存功能是基于分布式內(nèi)存對象緩存系統(tǒng),如memcached實(shí)現(xiàn),memcached是一個開源的基于內(nèi)存對象的分布式緩存系統(tǒng)。采用與web服務(wù)器如Ngninx集成的方式,web服務(wù)器Nginx在處理請求的過程中會先去memcached緩存中查找圖片數(shù)據(jù),如果沒有命中才會去數(shù)據(jù)庫中查詢圖片,這樣的實(shí)現(xiàn)方式進(jìn)一步提高了系統(tǒng)的響應(yīng)速度。
[0032]—種分布式圖片存儲系統(tǒng),包括圖片上傳提交子系統(tǒng)、圖片存儲子系統(tǒng)和圖片讀取子系統(tǒng),其特征在于:
[0033]圖片上傳提交子系統(tǒng)用于接收客戶端提交的圖片字節(jié)流,對原始圖片進(jìn)行處理,再將處理后的圖片存儲在圖片存儲子系統(tǒng)上;
[0034]圖片存儲子系統(tǒng)包括分布式文件存儲數(shù)據(jù)庫,用于存儲圖片;
[0035]圖片讀取子系統(tǒng)用于接收客戶端的圖片處理請求,將該請求的圖片處理結(jié)果返回給客戶端。
[0036]所述的分布式圖片存儲系統(tǒng),優(yōu)選的:
[0037]該圖片上傳提交子系統(tǒng)包括服務(wù)器、信息提取模塊、圖片壓縮模塊、數(shù)字水印模塊和應(yīng)用接口模塊;其中:
[0038]服務(wù)器用于通過應(yīng)用接口模塊接收客戶端提交的圖片二進(jìn)制字節(jié)流,服務(wù)器將該二進(jìn)制流復(fù)原為圖片后將該復(fù)原后的圖片保存到內(nèi)存中,再將圖片傳輸給信息提取模塊處理,之后再由圖片壓縮模塊處理,最后由數(shù)字水印模塊處理。
[0039]所述的分布式圖片存儲系統(tǒng),優(yōu)選的:
[0040]信息提取模塊用于提取圖片信息;
[0041]圖片壓縮模塊用于對圖片進(jìn)行壓縮;
[0042]數(shù)字水印模塊用于對圖片添加水印。
[0043]所述的分布式圖片存儲系統(tǒng),優(yōu)選的:
[0044]所述信息提取模塊、圖片壓縮模塊、數(shù)字水印模塊、應(yīng)用接口模塊均能夠?qū)Χ鄰垐D片進(jìn)行并行處理。
[0045]所述的分布式圖片存儲系統(tǒng),優(yōu)選的:圖片存儲子系統(tǒng)包括以下部分:
[0046](I)數(shù)據(jù)庫分片,每個數(shù)據(jù)庫分片為一組數(shù)據(jù)庫集群,用于存儲預(yù)定大小的數(shù)據(jù)塊;
[0047](2)數(shù)據(jù)庫備份塊,每個數(shù)據(jù)庫備份塊由多個存儲數(shù)據(jù)相同、地位平等的數(shù)據(jù)庫集群組成,用于存儲備份數(shù)據(jù)塊;
[0048](3)配置服務(wù)器,用于提供配置接口,以訪問控制中心;
[0049](4)控制中心,用于負(fù)責(zé)路由和協(xié)調(diào)操作;
[0050](5)訪問控制代理模塊,用于實(shí)現(xiàn)讀寫分離和連接池維護(hù)。
[0051 ]所述的分布式圖片存儲系統(tǒng),優(yōu)選的:
[0052]圖片讀取子系統(tǒng)包括圖片請求處理模塊、圖片處理模塊和圖片緩存模塊;
[0053]圖片請求處理模塊用于對收到的客戶端請求進(jìn)行負(fù)載均衡處理,之后交由圖片處理模塊處理,圖片處理模塊執(zhí)行以下操作:重定向、反向代理、緩存讀取,并把處理結(jié)果通過過濾模塊過濾之后將結(jié)果返回給客戶端;
[0054]圖片讀取子系統(tǒng)通過圖片請