在小程序访问高峰期我用时4秒极速部署升级了JFinal项目

毫不夸张的说,我用了最快的速度了,其实还可以更快!!

时间:

2019年1月16日 下午13时

项目:

数据猫教育投资版 (JFinal+微信小程序开发的项目)

真实经历

上线内测了一周,也做了压测,各方面都比较满意的情况下,今天开始推广,中午十二点开始在各大投资人聚集群里推广小程序端卡片,这样群里投资人可以点卡片直接进入小程序,授权后成为我们的用户。

小程序在这点确实太方便了。

发现BUG:

下午13时到了高峰期,后台看了一下已经800多人了,每分钟都在涨数据,虽然比起其他互联网产品来说 成百上千人不算多,但是这可是精准用户,主要就是服务这些投资人和创业者的。小程序实时访问统计也在激增。

此时,我前端速算模型发现一个bug,后台自定义公式和表单,前端小程序根据配置解析生成表单,填写数据计算公式后,输出结果里百分比格式化居然忘了挪小数点。

一分钟修复完bug,JBolt工具一秒打包,剩下的就是FTP上传,部署,重启了。

但是,此时正是高峰期,正在推广中,怎么能突然重启服务器。团队老大不同意,说重新部署时间太长,等过了高峰期吧。

我说,保证5秒内完成升级。

方法如下:

因为项目使用的服务器是JFinal-Undertow,打包结构针对我这种只修改了后台java代码的情况来说,部署非常方便,只需要到打包出来的目录中找到lib目录下项目对应的Jar-就是整个项目的classes打包成的一个独立jar文件。

image.png

我确定,只需要替换线上整个文件就可以了。

替换简单啊,打开WinSCP,可视化,直接找到了线上的文件所在目录,拖进去覆盖就行了,不会影响正在运行的项目本身。

注意:这个替换jar的步骤 要跟重启服务器的指令执行前后不能超过1秒。我需要准备好输入的shell指令后,先快速覆盖Jar文件,后立马回车执行重启命令。

image.png


因为目前还是单机部署,用户量小,没必要搞那么大,使用shell 命令 找到undertow部署的根目录

image.png

可视化环境里看到的是这样,有个restart.sh 的重启脚本

重要的步骤就是这个了,屏住呼吸,鼠标拖放覆盖后,立马进入命令窗口敲了回车执行 sh restart.sh ,3秒内完成了服务器的重启,搞定!!

在这四秒钟,我一直开着微信小程序,去下拉刷新数据,因为前端小程序的访问做了timeout:10秒处理设置了,所以并没有出现网络断开或者异常的问题,而且小程序访问不是靠session 而是使用了微信服务器登录,本地服务器记录生成token的方式,所以通讯也没有问题,总之,我4秒内完成了高峰期的部署,确实没出什么问题。

疑问:

读到这里,可能你会问:'平时只修改一个Java文件,直接单独覆盖线上服务器对应的这一个class文件不就行了,如果开着热部署,也能几秒加载完成自动重启啊,就一个覆盖操作搞定了呀!'

是的,没错,但是生产环境不能儿戏,单独替换class文件会遇到很多问题,整体编译打包jar不会环境问题,单独从本地开发环境拷贝一个class文件,如果没编译好,很可能热加载失败,导致项目垮掉。再者,也不建议生产环境开热部署。

总结:

JFinal极速开发+极速部署,真不错,感谢JFinal为开发者所做的努力。

极速开发选JFinal,如果用Eclipse可以安装JBolt加速开发、打包和部署,总之能让你少敲一行、少点几次鼠标,总是值得的。

后记:

这四秒还是我手动操作的,这还不算重新打包,上传等操作消耗的时间,其实,如果 新版JBolt出来,这套流程就可以一键搞定了。

预告:

如果JBolt实现一键创建环境、一键编译打包、一键上传服务器指定目录,按需覆盖文件,按需执行部署和重启脚本,一气呵成,几秒搞定。那真的好爽!


另外:我们正在JFinal学院JFinal俱乐部里问答和交流,欢迎你来。

JFinal学院www.jfinalxueyuan.com

image.png

评论区

Jieven

2019-01-17 02:04

怎么听着好怪异啊, 当事人肯定不是小木啊.

yuezhenpeng

2019-01-17 08:43

求这个项目源码

山东小木

2019-01-17 09:45

@Jieven 哈哈哈 是我是我 写的比较怪异??(#^.^#)

workbgm

2019-01-17 11:02

@山东小木 用PHP就没你这个惊吓了

山东小木

2019-01-17 11:25

@workbgm 这项目 php搞不了

JFinal

2019-01-17 11:47

其实 jfinal.com 官网的升级也是这么干的,哈哈

Jieven

2019-01-17 14:32

@山东小木 核心点就是重启WebServer,其它的都是套路时间,用啥都是3s重启完成.

山东小木

2019-01-17 14:40

@Jieven 是呀 带着很多启动时运行的东西 之前tomcat都是10s才启动起来

Jieven

2019-01-17 14:41

@山东小木 10s 启动 那是 SSH吧, 用jfinal 之后 没超过3s

BigSnake1989

2019-01-17 18:00

表示干过同样的事情

rirai

2019-01-18 11:16

@山东小木 弱弱的问一句,用jfinal-Undertow,是不是容器也必须用Undertow?

山东小木

2019-01-18 11:28

@rirai 就是用undertow服务器

rirai

2019-01-18 11:29

蜡笔小新

2019-01-19 17:56

使用Nginx做双机负载运行,不停机部署发布(停一个部署一个运行一个,直到都部署完成)。

山东小木

2019-01-20 08:51

@蜡笔小新 是的 切换端口进行了 但是项目暂时没有这么弄 而且项目里的爬虫部分没有独立出来 所以同时运行数据有问题 暂时单机

热门分享

扫码入社