摘 要:針對海量圖片給網站帶來的訪問速度降低、性能壓力增大和I/O瓶頸等問題,提出一種海量圖片的分佈式存儲及負載均衡技術。經過把圖片數據和 網站內容分開部署、在數據庫中記錄和維護圖片服務器狀態信息等方法實現圖片和頁面數據的分離。實驗結果代表,該技術能提升網站的訪問速度和運行效率,並可 動態增長圖片服務器的數量知足日益增長的性能需求。算法
關鍵詞:海量圖片;分佈式存儲;負載均衡數據庫
【Abstract】Aiming at the problems of the mass images can cause to Web site such as lower access speed, more performance pressure, I/Operformance bottle-neck, etc., a technology of distributed store and load balance for mass images is proposed. By the means of deploying Website pages and images separately and recording status of image servers in database, solves the problem of separation for image data and page data.Experimental result shows that the solution can improve the access speeds and running efficiency for Web site, and can add additional imageservers to meet the increasing performance demands.編程
【Key words】mass images; distributed store; load balance瀏覽器
1、概述服務器
隨着計算機網絡技術的發展和普及,出現了愈來愈多像「新浪」、「淘寶」大型門戶站點及電子商務網站[1]。這類網站都保存有大量圖片資源。用戶 在訪問這些站點網頁時,網頁中圖片信息佔到頁面數據流量的大部分。因爲受客戶端瀏覽器限制,沒法從一臺服務器上同時下載頁面中全部圖片信息,所以即便服務 器有很高帶寬,用戶的訪問速度仍是會受到很大影響。因爲圖片保存在物理硬盤上,訪問圖片須要頻繁進行I/O操做,所以當併發用戶數愈來愈多時,I/O操做 就會成爲整個系統的性能瓶頸[2]。同時,因爲受操做系統的限制,一個目錄中能存放的圖片文件數量是有限的,所以隨着圖片資源的不斷增長,如何合理有效地 對圖片進行管理和維護也是一個難題。網絡
對於少數大型網站系統,因爲自身具備雄厚的資金和人力資源,可採用NFS[3]、CDN[4]、Lighttpd、反向代理、負載均衡等技術提 高用戶訪問速度。但這些技術須要龐大的資金支持,對於處於創業初期中等規模的商務網站,因爲缺乏必要的資金支持,所以沒法採用這些技術提高網站的訪問速 度。對此,筆者提出了適用於中等規模商務網站的海量圖片數據分佈式動態存儲及負載均衡的解決方案。該方案只需增長不多的硬件成本,便可提高網站的訪問速 度,而且能夠根據須要動態調整圖片服務器的數量及圖片的存儲目錄,確保系統具備可擴展性和伸縮性[5]。架構
2、系統架構設計併發
對於Web服務器而言,用戶對圖片信息的訪問是很消耗服務器資源的。當一個網頁被瀏覽時,Web服務器與瀏覽器創建鏈接,每一個鏈接表示一個並 發。當頁面包含多個圖片時,Web服務器與瀏覽器會產生多個鏈接,同時發送文字和圖片以提升瀏覽速度。所以,頁面中圖片越多Web服務器受到的壓力也就越 大。同時因爲受到瀏覽器自己的併發鏈接數限制(2個~6個併發),意味着頁面上有多於併發鏈接數限制的圖片時,也不能並行地把全部圖片同時下載和顯示。對 於小型網站,因爲數據規模小,能夠把網站全部頁面和圖片統一存放在一個主目錄下,這樣的網站對系統架構、性能要求都很簡單。但大中型網站都保存有海量級的 圖片文件,所採用的技術更是涉及普遍,從硬件到軟件、編程語言、數據庫、Web服務器、防火牆等各個領域都有較高要求。所以,有必要設立單獨的圖片服務器 來專門存放圖片,把圖片數據的流量從Web服務器上分離開,這樣的架構能夠有效緩解Web服務器的I/O性能瓶頸,提高用戶的訪問速度。負載均衡
系統架構設計須要知足如下4點要求:(1)圖片能進行分佈式存儲;(2)能實現負載均衡;(3)能根據用戶訪問量及網站圖片數據量的增長能動態 添加圖片服務器節點;(4)圖片服務器節點的動態調整對網站用戶而言是透明的,而且不會中斷系統的正常運行。系統總體架構如圖1所示,包括客戶端、Web 服務器、數據庫服務器、圖片服務器集羣4個部分。編程語言
圖1 系統架構
客戶端是指IE、Firefox等經常使用的客戶端瀏覽器,用戶能夠經過客戶端來瀏覽網站的圖片信息,也能夠經過客戶端上傳圖片信息。
Web服務器部署網站的Web頁面,用於響應客戶端用戶的請求。當用戶瀏覽網頁時,Web服務器響應請求並訪問數據庫服務器,得到網頁中全部圖 片的URL路徑,而後生成頁面並返回給客戶端,客戶端接收該頁面並根據頁面中的圖片URL路徑自動從不一樣的圖片服務器下載並顯示相應圖片。當用戶上傳圖片 時,Web服務器首先從數據庫服務器中獲取全部圖片服務器的當前狀態,並根據相關算法選擇一個圖片服務器及保存的目錄,再調用該圖片服務器的Web Service方法把圖片保存到該服務器,最後在數據庫服務器中紀錄該圖片的編號及URL路徑等信息。
數據庫服務器用於記錄全部圖片的編號以及圖片的存放位置等信息,同時須要記錄全部圖片服務器的配置及當前狀態信息。
圖片服務器集羣用於存放網站的全部圖片信息,該集羣的服務器數量能夠根據須要動態增長。
3、系統實現及關鍵技術
增長了圖片服務器後,對於客戶端而言,整個網站系統執行過程應該仍然是透明的,不會給用戶帶來任何影響。但後臺系統須要解決如下4個問題: (1)如何實現圖片的分佈式部署,圖片上傳時如何動態肯定保存到哪臺圖片服務器;(2)如何作到圖片服務器的負載均衡,既要保證全部圖片服務器都有均等的 機會來保存圖片,又要考慮到不一樣服務器的硬件配置和性能差別來區別對待;(3)如何把一臺圖片服務器上圖片均衡保存到多個子目錄中以便突破操做系統在同一 個目錄中保存文件數的限制,對圖片進行更好的管理和維護;(4)如何能根據性能須要和圖片數量的增長實現圖片服務器的動態擴充。
3.1 狀態信息表
Web服務器須要及時掌握全部圖片服務器的狀態和信息才能動態決定把圖片保存到哪一臺圖片服務器,所以,須要把全部的圖片服務器的狀態信息所有 紀錄到數據庫服務器中,記錄圖片服務器信息和狀態的表格式如表1所示。狀態信息表中的ServerId字段爲主鍵自增列,惟一表明一條圖片服務器紀錄。 ServerName字段記錄服務器的名稱,方便管理員識別該記錄表明哪臺服務器。ServerUrl字段標識了圖片服務器上圖片主目錄的URL根路徑。 PicRootPath字段標識了保存圖片的物理主目錄。MaxPicAmount字段表示圖片服務器能保存的最大圖片數,該數能夠根據圖片服務器的硬件 配置和性能以及用戶實際須要而進行動態調整。CurPicAmount字段表示當前已保存的圖片數,當 CurPicAmount≥MaxPicAmount時系統將再也不把圖片上傳到該服務器。SubFoldAmount字段描述了在PicRootPath 中指定的圖片主目錄下的子目錄數。這樣能夠把圖片均勻分佈到不一樣子目錄下,避免在同一個目錄下保存過多圖片,從而方便對圖片進行維護和管理。 FlgUsable字段表示圖片服務器是否可用。
3.2 圖片瀏覽
客戶端用戶經過瀏覽器向Web服務器發出瀏覽某頁面的請求,Web服務器從數據庫服務器中獲取該頁面的全部圖片URL信息,並根據URL信息去 搜索表1所列的狀態信息表,判斷該URL所指向的圖片服務器的狀態字段FlgUsable,若FlgUsable == false表示該圖片服務器當前因某種緣由處於不可用狀態,則把該圖片的URL替換成Web服務器上保存的一個默認圖片的URL,不然把該URL直接返回 給客戶端。客戶端再根據圖片的URL路徑自動從不一樣的圖片服務器上下載並顯示相應的圖片。因爲圖片URL路徑直接指向具體的圖片服務器,所以須要在每一個圖 片服務器的保存圖片的主目錄上創建一個Web站點。因爲客戶端瀏覽器所須要的圖片是從多個圖片服務器上直接下載,所以瀏覽器能夠併發地從多臺服務器上同時 下載圖片,這樣就縮短了圖片下載時間,同時也減輕了Web服務器的I/O請求及性能壓力,所以,提升了網站的訪問速度。瀏覽圖片算法如圖2所示。
3.3 圖片上傳
因爲B/S架構自己技術限制,圖片沒法經過Web服務器直接上傳到不一樣的圖片服務器,所以須要在全部圖片服務器上部署一個Web Service[6]以便Web服務器可經過調用不一樣圖片服務器上的Web Service執行保存或刪除圖片的操做。
圖片上傳的過程比較複雜,首先Web服務器接收客戶端的訪問請求並訪問數據庫,經過執行「select * from tb_ServerStatus where FlgUsalbe = 1 and MaxPicAmount >CurPicAmount」語句(tb_ServerStatus爲表1所列的圖片服務器狀態信息表),從狀態表篩選出可用的圖片服務器集合記做 C,並獲取集合的總記錄數N。而後用隨機函數產生一個隨機數R1並用R1與N進行取餘運算記做I=R1%N。則C[I]即爲要保存圖片的圖片服務器。獲取 C [I]記錄中的SubFoldAmount的值記做K,K即爲C[I]圖片服務器中的圖片子目錄的個數。爲了簡化算法,規定全部的子目錄名從「0」開始編 號,直到「K-1」。例如:SubFoldAmount值爲1 000,則圖片服務器上圖片子目錄名分別爲「0」、「1」、「2」、…、「999」。再用隨機函數生成隨機數R2,使得S=R2%K,則S即爲要保存的圖 片的子文件夾名稱。爲了確保上傳的圖片名稱不重複,以當前時間+隨機數的形式組成圖片名稱。綜上所述,經過利用隨機函數取值的隨機性和取餘運算,使每臺圖 片服務器及同一臺服務器上的全部圖片子目錄都有均等的機會保存圖片。所以,全部圖片都是被隨機保存到不一樣圖片服務器的不一樣子目錄中,實現了圖片的分佈式部 署和負載均衡。同時網站管理員也可經過設定服務器狀態信息表中的「MaxPicAmount」和「SubFoldAmount」2個字段的值來限定所能保 存圖片的最大數和子目錄數,從而可以根據服務器的硬件配置和性能差別等因素來決定該服務器能保存圖片的最大數和子目錄數,所以,進一步提高了整個圖片服務 器集羣的負載均衡能力。當須要增長圖片服務器時,也只需在狀態信息表中增長一條新的圖片服務器紀錄,添加新圖片服務器的過程對整個網站系統的運行沒有任何 影響,從而實現了圖片服務器的動態增長。用戶上傳圖片的算法如圖3所示。
3.4 圖片刪除
客戶端向Web服務器發出刪除某個圖片的請求,Web服務器接收請求並搜索圖片數據庫獲取待刪除圖片的URL信息。把該URL信息經過字符串運 算分隔爲圖片服務器的URL根路徑R、圖片所存放的子目錄D以及圖片名稱N。再查找圖片數據庫狀態信息表,獲取與R匹配的記錄記做C,C即爲要刪除圖片的 圖片服務器。而後調用C圖片服務器上的WebService[7]方法,並以圖片名稱N和圖片所存放的子目錄D爲參數通知該方法刪除該圖片,最後把該圖片 紀錄從數據庫服務器中刪除。用戶刪除圖片信息的算法如圖4所示。
3.5 圖片修改
修改圖片的算法是刪除圖片和上傳圖片2個功能的疊加。客戶端發出修改圖片的請求並把新的圖片上傳到Web服務器,Web服務器訪問數據庫獲取舊 圖片的URL地址,調用刪除圖片的功能把舊圖片刪除,最後調用上傳圖片的功能完成新圖片的上傳。最後修改圖片數據庫,紀錄新圖片的URL路徑。其算法流程 如圖5所示。
4、系統性能分析
在局域網環境中,對採用圖片服務器和不採用圖片服務器2種狀況進行了性能測試。硬件配置以下:Web服務器、數據庫服務器各一臺,配置爲 CPU: Intel Xeon四核2.2 GHz,內存4 GB,網絡帶寬100 Mb/s。客戶端機器5臺爲CPU:Pentium 3.0 GHz,內存2 GB,網絡帶寬100 Mb/s。圖片服務器3臺,爲普通的PC機: CPU: Intel雙核P2.0 GHz,內存1 GB,網絡帶寬100Mb/s。測試數據中共有300萬張圖片,均勻分佈在3臺圖片服務器上,每臺圖片服務器創建1 000個子目錄。在5臺客戶端上同時運行壓力測試軟件,分別模擬200個~1 000個併發用戶的請求,測試結果如圖6所示。
從圖6能夠看出,採用3臺普通PC機做爲圖片服務器後,整個系統的響應時間大大減小,性能獲得明顯提高,並且併發訪問量越大,性能的提高越明顯,而對於整個系統而言增長的硬件成本卻頗有限。
5、結束語
面對網站日益增加的圖片數據,本文設計並實現了一種適用於中等規模網站的圖片分佈式部署和負載均衡的解決方案。論述了對圖片分佈式存儲、數據庫 結構設計及相關查詢、修改、刪除算法等關鍵技術。經過性能分析數據可知,該解決方案只需增長不多的硬件成本便可大幅度提高網站的訪問速度和運行效率。
參考文獻
[1] 胡興軍.內容分發網絡(CDN)技術及市場應用[J].當代通訊,2005, 30(17):23-26.
[2] 田 臣,陳金華,王 瑋,等. CDN內容分發策略數學建模研究[J].計算機工程與科學, 2009, 31(5): 4-7.
[3] 郭 勁,李 棟,張繼徵,等. iSCSI, CIFS, NFS協議的性能評測[J].小型微型計算機系統, 2006, 27(5): 833-836.
[4] Radkov P, Li Yin, Goya P, et al. A Performance Comparisonof NFS and iSCS I for P2networked Storage[EB/OL]. (2009-08-30).http://www1.cs.columbia.edu/~cs699810/nfs-iSCSI.pdf.
[5] Laoutaris N, Zissimopoulos V, Stavrakakis I. Joint ObjectPlacement and Node Dimensioning for Internet ContentDistribution[J]. Information Processing Letters, 2004, 89(6):273-279.
[6] 畢 敬,朱志良,鐵 鳴.基於Web services的分佈式企業信息整合模型[J].計算機工程, 2008, 34(12): 280-282.