版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、海量圖片的分布式存儲設(shè)計與實現(xiàn)一、研究背景:性能與資金,二者可兼得?那么問題來了?隨著互聯(lián)網(wǎng)的發(fā)展,許多大中型的網(wǎng)站都保存了大量的圖片資源, 用戶在訪 問這些圖片資源異常豐富的網(wǎng)站(如淘寶、京東等電子商務(wù)網(wǎng)站)時,網(wǎng)頁中的 圖片信息占據(jù)了頁面數(shù)據(jù)流量的很大部分,那么問題也來了:(1)由于受客戶端瀏覽器限制,無法從一臺服務(wù)器上同時下載頁面中所有 圖片信息;PS:當(dāng)一個網(wǎng)頁被瀏覽時,Web服務(wù)器與瀏覽器建立連接,每個連接表示一個 并發(fā)。當(dāng)頁面包含多個圖片時, Web服務(wù)器與瀏覽器會產(chǎn)生多個連接,同時發(fā)送 文字和圖片以提高瀏覽速度。因此,頁面中圖片越多Web服務(wù)器受到的壓力也就越大。同時由于受到瀏覽
2、器本身的并發(fā)連接數(shù)限制 (2個6個并發(fā)),意味著 頁面上有多于并發(fā)連接數(shù)限制的圖片時,也不能并行地把所有圖片同時下載和顯 示。(2)由于圖片保存在物理服務(wù)器上,訪問圖片需要頻繁進行I/O操作:因此當(dāng)并發(fā)用戶數(shù)越來越多時,I/O操作就會成為整個系統(tǒng)的 性能瓶頸;(3)由于受操作系統(tǒng)的限制,一個目錄中能存放的圖片文件數(shù)量也是 有限的: 隨著圖片資源不斷增加,如何有效管理和維護圖片也是一個難題;如何解決問題?(1)對于少數(shù)大型網(wǎng)站系統(tǒng),由于自身具有雄厚的資金和人力資源,可采 用NFS、CDN、Lighttpd、反向代理、負(fù)載均衡等技術(shù)提高用戶訪問速度;但 是,這些技術(shù)需要龐大的資金來支持。(2)對于
3、多數(shù)中小型網(wǎng)站系統(tǒng),有沒有一種方案適用于中等規(guī)模商務(wù)網(wǎng)站 的海量圖片數(shù)據(jù)分布式動態(tài)存儲及負(fù)載均衡的解決方案?該方案可否只需增加 很少的硬件成本,即可提升網(wǎng)站的訪問速度,并且可以根據(jù)需要動態(tài)調(diào)整圖片服 務(wù)器的數(shù)量及圖片的存儲目錄,確保系統(tǒng)具有可擴展性和伸縮性。二、架構(gòu)設(shè)計:構(gòu)建圖片服務(wù)器集群對于小型網(wǎng)站,由于數(shù)據(jù)規(guī)模小,可以把網(wǎng)站所有頁面和圖片統(tǒng)一存放在一個主目錄下,這樣的網(wǎng)站對系統(tǒng)架構(gòu)、性能要求都很簡單。但大中型網(wǎng)站都保存 有海量級的圖片文件,所采用的技術(shù)更是涉及廣泛,從硬件到軟件、編程語言、數(shù)據(jù)庫、Web服務(wù)器、防火墻等各個領(lǐng)域都有較高要求。因此,有必要設(shè)立單 獨的圖片服務(wù)器來專門存放圖片,
4、把圖片數(shù)據(jù)的流量從Web服務(wù)器上分離開,這樣的架構(gòu)可以有效緩解 Web服務(wù)器的I/O性能瓶頸,提升用戶的訪問速度。系統(tǒng)設(shè)計目標(biāo)基于以上的考慮,我們希望的設(shè)計目標(biāo)是:(1)圖片能進行分布式存儲;(2)圖片服務(wù)器能實現(xiàn)負(fù)載均衡;(3)能根據(jù)用戶訪問量及網(wǎng)站圖片數(shù)據(jù)量的增加能動態(tài)添加圖片服務(wù)器節(jié) 點;(4)圖片服務(wù)器節(jié)點的動態(tài)調(diào)整對網(wǎng)站用戶而言是透明的,并且不會中斷 系統(tǒng)的正常運行;其中,(1)和(2)是針對系統(tǒng)的高可用和伸縮性,而(3)和(4)則是針 對系統(tǒng)的高可用和可擴展而言的。系統(tǒng)架構(gòu)設(shè)計網(wǎng)站留努器集群團F服男器集肝系統(tǒng)整體架構(gòu)如上圖所示:包括客戶端、Web服務(wù)器、數(shù)據(jù)庫服務(wù)器、圖片服務(wù)器集群
5、4個部分。Web服務(wù)器部署網(wǎng)站的 Web頁面,用于響應(yīng)客戶端用戶的請求。當(dāng) 用戶瀏覽網(wǎng)頁時,Web服務(wù)器響應(yīng)請求并訪問數(shù)據(jù)庫服務(wù)器,獲得網(wǎng)頁中所有 圖片的URL路徑,然后生成頁面并返回給客戶端;(2)客戶端接收該頁面并由g據(jù)頁面中的圖片 URL路徑自動從不同的圖片服 務(wù)器下載并顯示相應(yīng)圖片。(3)數(shù)據(jù)庫服務(wù)器用于記錄所有圖片的編號以及圖片的存放位置等信息, 同時需要記錄所有圖片服務(wù)器的配置及當(dāng)前狀態(tài)信息。(4)圖片服務(wù)器集群用于存放網(wǎng)站的所有圖片信息,該集群的服務(wù)器數(shù)量 可以根據(jù)需要動態(tài)增加或刪減。三、系統(tǒng)實現(xiàn):一種簡單且價廉可用的方案數(shù)據(jù)庫設(shè)計與實現(xiàn):兩張簡單的表Web服務(wù)器需要及時掌握所有
6、圖片服務(wù)器的狀態(tài)和信息才能動態(tài)決定把圖 片保存到哪一臺圖片服務(wù)器。因此,需要把所有的圖片服務(wù)器的狀態(tài)信息全部紀(jì) 錄到數(shù)據(jù)庫服務(wù)器中,記錄圖片服務(wù)器信息和狀態(tài)的表格式如下圖所示:可以清楚地看出,圖片服務(wù)器信息表中記錄了圖片服務(wù)器的ID、名稱、URL、最大存儲數(shù)量、當(dāng)前已存數(shù)量以及服務(wù)器的狀態(tài)(True:可用,F(xiàn)alse:不可用),每個 圖片服務(wù)器下會有多個圖片信息記錄,因此它們是一對多的關(guān)系。王唐性# 王唐性# Sflrv&rldServerlName,ServerUHA PicRootPatbA MakPicAmountA CurPkAmountA FlgUgabL歸 magelnfoW Id
7、A ImageNameA Image Serve rid丹 tniaggEerverln;凸圖片記錄信息表圖片堀符器狀態(tài)信息表(1)圖片服務(wù)器狀態(tài)信息表建表語句:(2)圖片記錄信息表建表語句:文件上傳與瀏覽系統(tǒng)實現(xiàn):一個 ASP.Net MVC應(yīng)用程序這里我們使用一個ASP.NET MVC應(yīng)用程序部署在 Web服務(wù)器上,這個應(yīng) 用程序作為Web網(wǎng)站向客戶提供上傳和瀏覽的服務(wù)。因此,它最重要的功能就 是:一、接收用戶上傳的文件,并轉(zhuǎn)交給圖片服務(wù)器的相關(guān)處理程序進行處理和 保存;(哥?。┛蛻趱呱蟼餍陨絎EB觸導(dǎo)器過同數(shù)據(jù)庫中國片照籌程兼態(tài)表.崎逸出可用網(wǎng)用腹界器集合司象C( F JgUasbk=
8、l rue and MaxPicAniou nt Cur Pic Am cunt 并把集臺中的元嘉個數(shù)記作產(chǎn)生隨機數(shù)收匕并使I=H1%N網(wǎng)C.川為 fL.一要保存圖片的圖片服務(wù)器【山一處網(wǎng).隨過時向函救+隨機函數(shù)生成圖片文件臺礴保無重復(fù)的圖片名記作【】碼用I眼符粉上的5曲SE,心.根據(jù)指定的廣目錄名s以及圖片名D把圖片保存到相應(yīng)圖片眼笄器旭儂圖片的Uri跣徒信息保存到數(shù)據(jù)庫 雕第器中以福青詢(菇聿】二、取得所有圖片服務(wù)器中保存的有效圖片路徑,返回給客戶端瀏覽器,再由客戶端瀏覽器對圖片路徑向圖片服務(wù)器集群進行請求;(開始(站點)設(shè)計 Controller(1)圖片上傳的過程比較復(fù)雜,首先 Web
9、服務(wù)器接收客戶端的訪問請求 并訪問數(shù)據(jù)庫,在 Web端需要取得所有可用的圖片服務(wù)器的集合,這里使用到 了一個GetAllUseableServers 方法,它的實現(xiàn)如下:可以看出,我們需要判斷 FlgUsable 標(biāo)志為 true 以及 CurPicAmount當(dāng)前存儲量小于 MaxPicAmount最大存儲量這兩個條件。如果有宕機或不可用的情況,需要管理員將那一行的 FlgUsable 設(shè)置為 false。public List GetAllUseableServers。 List serverList = db.ImageServerInfo .Where(s = s.FlgUsable
10、= true & s.CurPicAmount s.MaxPicAmount) .ToList();return serverList; (2)這里用到了一個 GetServerIndex 的方法,它的實現(xiàn)如下:從圖片服 務(wù)器狀態(tài)信息表篩選出可用的圖片服務(wù)器集合記作C,并獲取集合的總記錄數(shù)N然后用隨機函數(shù)產(chǎn)生一個隨機數(shù) R1,用R1與N進行取余運算記作I=R1%N。 則CI即為要保存圖片的圖片服務(wù)器。這個方法基本保證了我們的圖片服務(wù)器的 負(fù)載是一個比較均衡的比例。(當(dāng)然,我們可以設(shè)計一個更加高效的,類似于一 致性哈希算法的哈希函數(shù))#region 01.獲取服務(wù)器索引號/ / 01.獲取服務(wù)器
11、索引號/ / 月艮務(wù)器數(shù)量 / 索弓 |號 public static int GetServerIndex(int serverCount) Random rand = new Random();int randomNumber = rand.Next();int serverIndex = randomNumber % serverCount;return serverindex;)#endregion(3)最后,Web端程序借助了 WebClient將服務(wù)器ID、文件擴展名以及 圖片的字節(jié)流轉(zhuǎn)交給了具體的圖片服務(wù)器處理程序: Web端程序的工作就到此 結(jié)束,但是這里木有采用異步,因此需要
12、等待圖片服務(wù)器的工作結(jié)束。WebClient client = new WebClient();client.UploadData(serverFullUrl,CommonHelper.StearmToBytes(file.InputStream);PS:由于B/S架構(gòu)本身技術(shù)限制,圖片無法通過 Web服務(wù)器直接上傳到不同的 圖片服務(wù)器中。因此,這里需要借助類似于WebClient、HttpWebRequest 等類向具體的圖片服務(wù)器發(fā)送 Http請求,或者是通過在圖片服務(wù)器上部署WebService ,以便Web服務(wù)器通過調(diào)用該服務(wù)執(zhí)行圖片的保存操作。設(shè)計 View(1)上傳頁面:在 for
13、m 標(biāo)簽中不要忘了 : enctype=multipart/form-data”(2)瀏覽頁面:這里主要通過對不同的圖片服務(wù)器發(fā)送請求獲取圖片,從而降低Web服務(wù)器的I/O性能瓶頸,加快整個系統(tǒng)的響應(yīng)時間。圖片服務(wù)器文件接收系統(tǒng)實現(xiàn):一個 ASP.Net 一般處理程序(1)這是一個簡單的一般處理程序,它首先接收要保存的圖片擴展名以及 服務(wù)器ID,根據(jù)規(guī)則生成具體的保存路徑,然后通過I/O流將圖片保存到該服務(wù)器的磁盤上;(2)最后將更改數(shù)據(jù)庫信息記錄,由于要同時對兩張表進行修改,這里我 們需要對這個方法進行一個簡單的封裝,使之成為一個事務(wù)?,F(xiàn)在我們來看看這 個Add方法的實現(xiàn):public Im
14、ageStatusEnum Add(ImageInfo imageEntity) (/首先是圖片信息表db.ImageInfo.Add(imageEntity);/其次是圖片服務(wù)器信息表ImageServerInfoserverEntity=db.ImageServerInfo.FirstOrDefault(s = s.ServerId = imageEntity.ImageServerId);if (serverEntity != null)/當(dāng)前服務(wù)器存儲數(shù)量+1serverEntity.CurPicAmount += 1;/ 一起提交到SQL Server數(shù)據(jù)庫中 int result
15、= db.SaveChanges();if (result 0)return ImageStatusEnum.Successful;elsereturn ImageStatusEnum.Failure;簡單測試圖片文件的上傳與瀏覽(1)測試前的準(zhǔn)備工作由于我的電腦不支持64位的虛擬機,因此原本打算在VMware中部署三 臺Windows Server 2008 R2 作為Web服務(wù)器和圖片服務(wù)器的打算被撤銷(沒 法任性地做實踐,我很不開心啊)。于是,我采用了在一臺電腦上部署多個應(yīng)用, 用端口號區(qū)分不同的服務(wù)程序來模擬效果。EDISOMCHOU (E&ISONCHCUA3r十日蜴夠的-網(wǎng)站B 硝
16、I Default Web SiteMylfnsgeDF5 8000 My I mageStrverl 8010Myl mggeServer2 8020將Web應(yīng)用程序和圖片服務(wù)應(yīng)用程序分別編譯發(fā)布,并部署到IIS中,分配不同的端口號:圖片上傳與瀏覽程序8000端口,圖片服務(wù)器的文件處理程序分別占用8010與8020端口;模推的網(wǎng)站般到事集整模觀的圖片愿至器集群圖片第資筋模觀的圖片愿至器集群圖片第資筋A(yù)Web限藥費7lndnwg 777 o Web限藥費7lndnwg 777 o 1 nnoo IS據(jù)庫索第看-01”。用皿1270 0 1 時 1。iSTOOiaOM(2)測試圖片文件上傳與存儲
17、ost:8 000/Home/I n dex圉片上傳系蛻上傳圖片選擇文件來喝芟文件上傳圖片C c p. right 20L4 Edison Cbou由于連續(xù)截屏所生成的gif圖片太大,因此這里只選擇了截取其中一次上傳的過程作為展示。在我連續(xù)上傳操作了 N次之后,現(xiàn)在我們來看看兩個文件服 務(wù)器所在的文件夾中是否有我們上傳的圖片文件 (這里主要是看部署的程序所在 的文件目錄,其中有一個專門保存圖片的文件目錄 Upload )圖片服務(wù)器A所保存的文件:包含郛庫中 共享,放映幻燈片刻錄新建文件夾jd castsjbveraion蹶lc679Bdl-&24e -47aa-a479-777 aSclcf3
18、acb.jpglceedBb4-270d-447a-ba4a-12aa&c72b8&.jpg崖下栽2bl33cel-e80f- 4a3O-9962-el2 dfl0bc05e.jpg47443777-6323-49fb-al9f-b2c a1913d7dcjpga2al8a2b-545c包含郛庫中 共享,放映幻燈片刻錄新建文件夾jd castsjbveraion蹶lc679Bdl-&24e -47aa-a479-777 aSclcf3acb.jpglceedBb4-270d-447a-ba4a-12aa&c72b8&.jpg崖下栽2bl33cel-e80f- 4a3O-9962-el2 dfl
19、0bc05e.jpg47443777-6323-49fb-al9f-b2c a1913d7dcjpga2al8a2b-545c-4377-ac&a-d2405cf700ae.jpgf3ac717e-3f&2-43b4-be52-0674 匚匚理 &f5 0 7,jpg圖片服務(wù)器圖片服務(wù)器B所保存的文件:lb81b2635796-470c-bf6fc226 e0aba2ef.jpg7dl6U)2a-al62-4376-b85d-ac2 e#5b3*bObjpg81fl8244-6eb74a24-9f8a-b9a9 413066d0jpg738deB60nHlc5lb81b2635796-470c
20、-bf6fc226 e0aba2ef.jpg7dl6U)2a-al62-4376-b85d-ac2 e#5b3*bObjpg81fl8244-6eb74a24-9f8a-b9a9 413066d0jpg738deB60nHlc5-4cdd-b6a5-74 dfcO72732fjpgaeaacfOl-lldb- 469d-g&dl-334 3ab672f22.jpgO435ccc2*34ff 47a9-9bc6-5f7962eO5c51Jpge60eda5f04e6-4Oal-aS6d-7ccc9115796d.jpg總結(jié):從圖中可以看出,我們一共上傳了 13張圖片,其中圖片服務(wù)器A保 存了 6張,圖片服務(wù)器B保存了 7張,兩個服務(wù)器的負(fù)載并沒有出現(xiàn)一頭小一 頭大,而是一個相對比較均衡的數(shù)量,這得益于我們的隨機函數(shù)。(3)測試圖片文件瀏覽請求是否顯示了圖片列表:矗F矗F鐳1量息除是否從不同圖片服務(wù)器獲取:,_苴、j j ki ,_苴、j j ki 巴臺.工 二的府白忙v-mufltDcalho
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度商業(yè)地產(chǎn)租賃權(quán)及使用權(quán)轉(zhuǎn)讓合同2篇
- 二零二五年度房屋置換與商業(yè)地產(chǎn)合作合同3篇
- 二零二五年度戶外景觀門窗安裝與裝飾服務(wù)協(xié)議6篇
- 二零二五年度委托代理合同詳細條款和條件
- 廣西桂林市(2024年-2025年小學(xué)六年級語文)部編版小升初真題(下學(xué)期)試卷及答案
- 廣西崇左市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版階段練習(xí)(上學(xué)期)試卷及答案
- 2025年度翻譯行業(yè)人才培養(yǎng)與實習(xí)實訓(xùn)合同
- 中國金屬粉末行業(yè)發(fā)展環(huán)境、市場運行格局及投資前景研究報告(2025版)
- 二零二五年度房地產(chǎn)稅收籌劃與價格評估合同3篇
- 四川省2021-2022學(xué)年物理高一下期末監(jiān)測試題含解析
- “婦科護理三基三嚴(yán)”考試試題及答案
- 發(fā)熱的診斷和治療(急診醫(yī)學(xué)課件)
- 系統(tǒng)遷移方案
- 房屋租賃管理條例2024年
- 《文獻檢索與論文寫作》教學(xué)大綱思政版
- 2024年廣東省學(xué)士學(xué)位英語歷年真題附答案
- 材料力學(xué)之彈塑性力學(xué)算法:等效塑性應(yīng)變計算:塑性流動理論與塑性硬化.Tex.header
- (高清版)AQ∕T 8006-2018 安全生產(chǎn)檢測檢驗機構(gòu)能力的通 用要求
- 高中數(shù)學(xué)人教A版必修第一冊 全冊 思維導(dǎo)圖
- 電梯井道改造施工合同
評論
0/150
提交評論