基于nginx及fastdfs,完成商品圖檔的上傳及展示
一、傳統圖檔存儲及展示方式
![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示
存在問題:
1)大并發量上傳通路圖檔時,需要對web應用做負載均衡,但是會存在圖檔共享問題 2)web應用伺服器的存儲空間有限,它是web應用伺服器,而不是存儲伺服器。 3)web應用伺服器的本身的io讀寫性能不高,圖檔上傳下載下傳時,速度偏慢 4)web應用伺服器通路圖檔時,由于圖檔内容較大,并發量大的時候,會占用web應用伺服器的帶寬,這樣該web應用伺服器的其他功能就會受到較大的影響。
解決方案:
1)将圖檔集中存儲到io讀寫性能高的圖檔伺服器中。 2)下載下傳通路圖檔時,使用http伺服器直接讀取圖檔伺服器中的圖檔。
二、叢集模式
![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示
(1)nginx快速入門
nginx是一個高性能的http和反向代理伺服器,也是一個imap/pop3/smtp伺服器。主要應用于:http伺服器、反向代理伺服器\負載均衡伺服器、虛拟主機。 nginx的安裝(另見《電商常用軟體安裝篇》) nginx的使用(通過修改nginx.conf配置檔案實作)
1)虛拟主機配置 将網絡中的每一台計算機分成多個虛拟主機,每個虛拟主機可以單獨對外提供www服務。 a)基于端口配置(ip位址一緻,端口不一緻)
#基于80端口的虛拟主機 server { listen 80; server_name 192.168.242.128; location / { root html; index index.html index.htm; } #基于81端口的虛拟主機 listen 81; location /{ root html81;
b)基于域名配置 ①修改hosts檔案,實作ip位址和域名的映射配置: hosts檔案的位置:c:\windows\system32\drivers\etc\hosts 建議使用switchhosts工具修改本地dns配置。 ②配置nginx.conf
#基于www.aaa.com域名的虛拟主機 listen 80; root htmlaaa; #基于www.bbb.com域名的虛拟主機 listen 80; server_name www.bbb.com; root htmlbbb;
2)反向代理配置 通常的代理伺服器,隻用于代理内部網絡對internet的連接配接請求;而反向代理(reverse proxy)方式是指以代理伺服器來接受internet上的連接配接請求。 簡單了解:以tomcat為中心,以内外網為前提,tomcat主動出擊是正向代理,而tomcat 被動接受請求就是反向代理。 3)負載均衡配置
簡單了解:反向代理負載均衡技術是把将來自internet上的連接配接請求以反向代理的方式動态地轉發給内部網絡上的多台伺服器進行處理,進而達到負載均衡的目的。 ① 負載均衡的方式:硬負載(f5伺服器)、軟負載(nginx) ② 負載均衡的政策:輪詢、ip_hash等
![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示
③ 具體配置 tomcat+nginx示範: 修改nginx配置檔案,修改如下:
upstream tomcat1{ #weight 權重,預設是1,權重越高,被配置設定的幾率越大 server 192.168.242.128:8080 weight=2; server 192.168.242.128:8282; #配置一個虛拟主機 server { server_name www.tomcat1.com; proxy_pass http://tomcat1;
(2)fastdfs
fastdfs是用c語言編寫的一款開源的分布式檔案系統。fastdfs為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用fastdfs很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。 1)fastdfs架構(tracker server + storage server) ① tracker server作用是對storage server進行負載均衡和排程,在檔案上傳時會直接請求tracker server,然後tracker server可以根據一些政策找到storage server來提供檔案上傳服務。是以可以将tracker稱為追蹤伺服器或排程伺服器。 ② storage server作用是檔案存儲,用戶端上傳的檔案最終存儲在storage伺服器上,storage server沒有實作自己的檔案系統而是利用作業系統的檔案系統來管理檔案。可以将storage稱為存儲伺服器。 具體架構如下圖:
![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示
2)tracker 叢集 fastdfs叢集中的tracker server可以有多台,tracker server之間是互相平等關系同時提供服務,tracker server不存在單點故障。用戶端請求tracker server采用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker。 3)storage叢集 storage叢集采用了分組存儲方式。storage叢集由一個或多個組構成,一個組由一台或多台存儲伺服器組成,組内的storage server之間是平等關系,不同組的storage server之間不會互相通信,同組内的storage server之間會互相連接配接進行檔案同步,進而保證同組内每個storage上的檔案完全一緻的。一個組的存儲容量為該組記憶體儲伺服器容量最小的那個,叢集存儲總容量為叢集中所有組的存儲容量之和,由此可見組記憶體儲伺服器的軟硬體配置最好是一緻的。 采用分組存儲方式的好處是靈活、可控性較強。比如上傳檔案時,可以由用戶端直接指定上傳到的組也可以由tracker進行排程選擇。一個分組的存儲伺服器通路壓力較大時,可以在該組增加存儲伺服器來擴充服務能力(縱向擴容)。當系統容量不足時,可以增加組來擴充存儲容量(橫向擴容)。 4)storage狀态收集 storage server會連接配接叢集中所有的tracker server,定時向他們報告自己的狀态,包括磁盤剩餘空間、檔案同步狀況、檔案上傳下載下傳次數等統計資訊。 5)檔案上傳流程用戶端上傳檔案後存儲伺服器将檔案id傳回給用戶端,此檔案id用于以後通路該檔案的索引資訊。檔案索引資訊包括:組名,虛拟磁盤路徑,資料兩級目錄,檔案名。![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示 n 組名:檔案上傳後所在的storage組名稱,在檔案上傳成功後有storage伺服器傳回,需要用戶端自行儲存。 n 虛拟磁盤路徑:storage配置的虛拟路徑,與磁盤選項store_path*對應。如果配置了store_path0則是m00,如果配置了store_path1則是m01,以此類推。 n 資料兩級目錄:storage伺服器在每個虛拟磁盤路徑下建立的兩級目錄,用于存儲資料檔案。 n 檔案名:與檔案上傳時不同。是由存儲伺服器根據特定資訊生成,檔案名包含:源存儲伺服器ip位址、檔案建立時間戳、檔案大小、随機數和檔案拓展名等資訊。 6)檔案下載下傳流程![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示 tracker根據請求的檔案路徑即檔案id來快速定義檔案。 比如請求下邊的檔案:![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示 1.通過組名tracker能夠很快的定位到用戶端需要通路的存儲伺服器組是group1,并選擇合适的存儲伺服器提供用戶端通路。 2.存儲伺服器根據“檔案存儲虛拟磁盤路徑”和“資料檔案兩級目錄”可以很快定位到檔案所在目錄,并根據檔案名找到用戶端需要通路的檔案。![]()
【JAVA秒會技術之圖檔上傳】基于Nginx及FastDFS,完成圖檔的上傳及展示