1、背景分析
對於傳統項目來說,所有模塊都在一個項目中開飯,包括所有的靜態資源文件如圖片等,都存儲在這一個tomcat服務器上,
如果訪問量小的話,這樣做的問題不大,但是對於互聯網項目來說,用戶訪問量很大,這樣一個tomcat服務器是遠遠不能滿足業務需求的。這時就需要部署tomcat集群,有集群就需要用到負載均衡,我們一般都會使用nginx來作為負載均衡服務器。
但是這種tomcat集群的缺點也很明顯,假如我們把一張a.jpg的圖片上傳到了tomcat1的目錄下了,由於nginx負責均衡處理請求,當用戶去請求訪問這張圖片的時候,假設第一次,nginx把請求交給tomcat1去處理,它到自己的images目錄下找這張圖片,發現是可以找到的,可以看到這張圖片;當我們第二次通過nginx去請求訪問該圖片時,nginx把請求交給tomcat2去處理,這時tomcat2去自己的目錄下查找這張圖片,發現沒有這張圖片,因此看不到這張圖片。作為用戶來講,一次訪問能看到,再刷新看不到,再刷新就看不到,這樣體驗感很差。
針對此問題,搭建一個圖片服務器,所有的tomcat都將用戶上傳的圖片上傳到圖片服務器上,tomcat本身並不保存圖片。我們采用http的方式來訪問圖片,這樣就需要使用http服務器,能作為http服務器的有很多種選擇。
- Tomcat可以作為http服務器,但是由於Tomcat服務器的強項並不在於處理靜態資源(它的強項是處理servlet和jsp等動態頁面),因此我們不選擇tomcat
- 使用Apache作為http服務器,Apache是由c語言編寫的一款服務器。
- nginx因為其獨特的優勢,作為http服務器是目前最火的。我們使用Nginx來統一管理這些圖片,這樣用戶要訪問圖片的時候,Nginx直接把服務器上的圖片返回就可以了,這樣就解決了tomcat集群資源無法共享的問題。
此時存在一個問題,既然是服務器,容量是有限制的,而且服務器有可能掛了,這時使用FastDFS集群來解決,FastDFS是一個開源的輕量級分布式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。FastDFS存儲資源的設備是按組來區分的,當存儲空間不足時,便可以通過水平增加分組並相應添加設備來達到擴容的目的,而且是沒有上限的。它還有個優勢是高可用,也就是說FastDFS集群能夠做到當提供服務的nginx發生故障時,自動切換到另一台nginx設備上,保障服務的穩定。
2、上傳文件的步驟
- 創建一個配置文件,配置文件的內容是指定TrackerServer的地址
- 使用全局方法加載配置文件
- 創建一個TrackerClient對象
- 通過TrackerClient對象獲得TrackerServer對象
- 創建StorageServer的引用,null就可以了
- 創建StorageClient對象,需要兩個參數,一個是trackerserver,一個是storageserver
- 使用StorageClient對象,上傳圖片。
此時創建一個工具類FastDFSUtils工具類。