如何解決遠程機房上傳war包文件慢問題?

上傳文件到遠程機房速度通常比較慢,例如100KB/s。使用putty工具上傳war包(40M)到遠程服務器須要幾分鐘。java

 

爲了提升效率,減小上傳文件時間,咱們能夠儘可能減小要傳輸的文件內容。git

war包是zip壓縮文件,同一個應用,不一樣版本的war包,會包含不少相同的壓縮文件。上傳文件時,若是不須要上傳服務器端已經存在的壓縮文件,那就能夠大大減小要傳輸的文件內容。緩存

 

實現方案服務器

1. 客戶端在上傳文件前,解析文件,計算壓縮文件中每一個Entry內容的MD5值。app

2. 客戶端將Entry內容的MD5值和長度發送到服務器端,檢查服務器是否已存在對應的Entry。工具

3. 服務器根據Entry內容的MD5值和文件長度進行判斷,檢查服務器端存在哪些Entry,並返回給客戶端。優化

4. 客戶端將服務器端已存在的Entry從文件中刪除,生成新文件(壓縮文件內容)。spa

5. 客戶端將新文件,和已去掉的Entry列表發送給服務器端。.net

6. 服務器端將去掉的Entry還原到上傳的文件中(還原文件內容)。code

7. 服務器端將文件解壓縮,將文件包含的Entry創建緩存。

 

運行效果

  須要傳輸的文件大小 上傳耗時
優化前 14330 KB 140 秒
優化後       90 KB     5 秒

 

代碼倉庫

https://gitee.com/jscode/app-pool-server

https://gitee.com/jscode/app-pool-client

 

注意:

使用java.util.zip.ZipFile先解壓war包,再將解壓後目錄壓縮成zip文件,兩個文件的MD5值不同。參見

https://my.oschina.net/u/1263909/blog/1811881

 爲了保證上傳文件後MD5值不變,採起了直接修改war包的方式。

相關文章
相關標籤/搜索