文档章节

如何解决远程机房上传war包文件慢问题?

qquunn
 qquunn
发布于 2018/05/22 09:03
字数 478
阅读 498
收藏 5

上传文件到远程机房速度一般比较慢,例如100KB/s。使用putty工具上传war包(40M)到远程服务器需要几分钟。

 

为了提高效率,减少上传文件时间,我们可以尽量减少要传输的文件内容。

war包是zip压缩文件,同一个应用,不同版本的war包,会包含很多相同的压缩文件。上传文件时,如果不需要上传服务器端已经存在的压缩文件,那就可以大大减少要传输的文件内容。

 

实现方案

1. 客户端在上传文件前,解析文件,计算压缩文件中每个Entry内容的MD5值。

2. 客户端将Entry内容的MD5值和长度发送到服务器端,检查服务器是否已存在对应的Entry。

3. 服务器根据Entry内容的MD5值和文件长度进行判断,检查服务器端存在哪些Entry,并返回给客户端。

4. 客户端将服务器端已存在的Entry从文件中删除,生成新文件(压缩文件内容)。

5. 客户端将新文件,和已去掉的Entry列表发送给服务器端。

6. 服务器端将去掉的Entry还原到上传的文件中(还原文件内容)。

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包的方式。

 

© 著作权归作者所有

qquunn
粉丝 7
博文 29
码字总数 6307
作品 0
广州
私信 提问
加载中

评论(4)

很拽De土豆
很拽De土豆

引用来自“很拽De土豆”的评论

一般不是使用rsync做么,你这么做如果之前服务器中存在很多文件在客户端已经被删除了,服务端会留存有越来越多的垃圾文件。可以再优化一下。做成类似rsync那种的加个配置,比如哪些目录要做同步,哪些要排除,删除服务器文件最好做个备份。

引用来自“qquunn”的评论

rsync确实强大。这个方案是有垃圾文件问题,适合企业内部的war包管理系统。目录同步场景这种方案没有优势。
每种东西出现都是有一定需求,至少你学到了怎么增量同步文件过去。😄学习的过程总是愉快的~
qquunn
qquunn 博主

引用来自“很拽De土豆”的评论

一般不是使用rsync做么,你这么做如果之前服务器中存在很多文件在客户端已经被删除了,服务端会留存有越来越多的垃圾文件。可以再优化一下。做成类似rsync那种的加个配置,比如哪些目录要做同步,哪些要排除,删除服务器文件最好做个备份。
rsync确实强大。这个方案是有垃圾文件问题,适合企业内部的war包管理系统。目录同步场景这种方案没有优势。
抢小孩糖吃
抢小孩糖吃
正确的做法可以参考docker的标准。建立git,自动化同步git代码,然后加载自定义配置文件,启动运行
很拽De土豆
很拽De土豆
一般不是使用rsync做么,你这么做如果之前服务器中存在很多文件在客户端已经被删除了,服务端会留存有越来越多的垃圾文件。可以再优化一下。做成类似rsync那种的加个配置,比如哪些目录要做同步,哪些要排除,删除服务器文件最好做个备份。
lianglongqun/app-pool-server

app-pool-server 项目介绍 上传文件到远程机房速度一般比较慢,例如100KB/s。使用putty工具上传war包(40M)到远程服务器需要几分钟。 为了提高效率,减少上传文件时间,我们可以尽量减少要传...

lianglongqun
2018/05/22
0
0
jenkins 集成与远程部署 tomcat

记录jenkins 集成与远程部署 tomcat主要配置,这里以远程执行脚本的方法部署TOMCAT。 主要流程如下: MAVEN打包 -> SSH上传到TOMCAT部署目录下 -> 重启TOMCAT 1 系统管理-管理插件 安装 publ...

long0404
2017/07/04
0
0
2016/11/15工作小结

1.把昨天测试写的脚本真正应用到dockerfile中。之中也出现了一个传参数的问题。现在已经解决。脚本也写好了可以直接开启或者关闭debug docker run -e:是传参数可以多个。启动时传参数IS_OP...

并不是
2016/11/15
2
0
java_speed/stream

#Stream 上传插件 Stream 是解决不同浏览器上传文件的插件,是Uploadify的Flash版和Html5版的结合! #Stream 简介 Stream 是根据某网的文件上传插件加工而来,支持不同平台(Windows, Linux,...

java_speed
2014/04/09
0
0
Gogs+Jenkins的持续集成系统部署与开发

gogs是一款用go语言开发的语言,开始的时候觉得可能有点难,但是现在用起来觉得挺不错的,既有c语言的方便简洁,又有许多集成的类和方法。 网址的话是这个http://gogs.io/ 我的话是用源码安装...

openthings
2015/12/09
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

Minecraft Fabric Client 教程 #5 添加Event、Sprint和ToggleCommand

首发于Enaium的个人博客 添加Event 下载 放在cn.enaium.excel里 然后在Excel.java里面添加EventManager public enum Excel { [...] public EventManager eventManager; pu......

Enaium
31分钟前
65
0
记 S3Service 代码中的一个低级错误

osgl-storage 是 osgl 工具箱 中用于简化存储的. 其特点是接口简单, 支持多种存储引擎插件, 包括本地文件系统, AWS S3, Azure Blob, 七牛 Kodo 服务. 最近老码农在一次调试中偶然发现了 osgl...

开源老码农
33分钟前
649
3
如何实现Samba文件共享服务

目标:实现Samba文件共享服务 试验环境:两台主机服务端:192.168.56.11客户端:192.168.56.12 配置用户认证共享 服务端操作: 1.关闭防火墙,关闭selunix [root@hejie ~]# setenforce 0[...

linuxprobe2020
35分钟前
44
0
SQL Server Profiler - 如何过滤跟踪以仅显示来自一个数据库的事件?

如何将SQL Server Profiler跟踪限制为特定数据库? 我看不到如何过滤跟踪,看不到我连接的实例上的所有数据库的事件。 #1楼 在Trace properties> Events Selection选项卡下>选择show all co...

技术盛宴
35分钟前
59
0
Kafka配置及常用命令笔记

一、kafka配置 1. 服务端 server.properties #broker 的全局唯一编号,不能重复broker.id=0#删除 topic 功能使能delete.topic.enable=true#处理网络请求的线程数量num.network.thr...

liddblog
40分钟前
41
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部