羅友之家服務器文件管理升級小記

元旦先後,網站增長了直播功能,但發現,有時候打開頁面,網站反應很慢。數據庫

嚇死寶寶了,覺得服務器出了啥子問題。瀏覽器

後來發現,因爲上傳圖片,當一個頁面有十多張圖片,每一個圖片都有一兆多的時候,瞬間佔滿了一兆的帶寬。緩存

 

問題來了,就得解決。服務器

原來的服務器文件,上傳了,就放在那裏,請求來了,便給。這樣,若是一個頁面有三兩個一兆以上的文件,便會加載很慢,同時,其餘訪問,便擁堵了。工具

還有一個問題,原來的文件,都放到了數據庫裏,這樣方便服務器橫向擴展的時候,不用關心文件,反正都在數據庫裏。但,租用的數據庫,也漸漸地滿了。性能

最快捷的解決方法:加錢買啊!測試

錢能解決的問題,就不是問題。可,問題是沒錢。網站

且,這麼簡單粗暴地解決問題,也不是我得風格。插件

 

因而,挽起袖子,本身解決。設計

需求以下:

1.圖片要處理。圖片有多種使用場景,縮略圖,常規圖,廣告圖片,海報圖片等,規格都不同。要隨需供應。

2.語音也要處理。目前找到的文件500KB左右,加載要三兩秒時間,明顯等待。不爽。

3.要緩存。

4.支持全部文件。一個是用戶上傳的文件,另外一個是ckeditor插件上傳和管理的文件。

 

功能實現。

這是有史以來最廢紙的功能,用了兩頁紙!平日裏,一個功能,半張一張的,也就夠了。

FreeFile領域類,用於存儲文件元數據。主要是名稱大小,路徑之類(再也不存數據庫了)。爲啥叫FreeFile,沒啥意思,我是個愛自由的人。也想,這個設計能行雲流水般的流暢好用。

FileHub工具類,用於處理文件。一個是收文件,用戶上傳後,他負責存儲到FreeFile和本地,也負責整合ckeditor裏面的文件。另外一個是發文件,根據FreeFile和場景生成文件連接,根據連接返回處理過(壓縮和緩存)的文件。

功能基本也就這麼實現了。還有一些支持工具類。

FileConvert工具類。用於壓縮轉換文件。使用FFMPEG來處理語音,用ImageMagick處理圖片。之前卻是用純Java處理圖片,圖片質量降低明顯,且有隱含的性能問題。

寫了一大批臨時代碼,用於遷移現有的文件到新的系統。

這不是第一次給飛馳的火車換輪子了,好在,有驚無險。

 

實際效果。

圖片通過處理,體積大大縮小。縮略圖(80X80),通常7KB左右,頭像(200X200),通常17KB左右,大圖(640X)通常30KB左右。這樣一個頁面上,即使有幾十張圖片,也能夠快速加載了。這些圖片,都是請求時,按需生成。

語音通過壓縮,測試,碼率24k是一個較均衡的選擇。體積從500KB下降到180KB,點擊,瞬間便播放了。基本在一秒之內。

完善了緩存。經過瀏覽器緩存,etag等,極大地減小服務器的壓力和流量。

 

這個方案,估計能堅持一陣兒了。

 

本文出處 http://luoyouzhijia.cn/blogs/461?tc=201706261108.1.0

相關文章
相關標籤/搜索