Java 是不是没有好的热部署方案?

2019-07-24 09:46:43 +08:00
 StarkWhite

像 Node,PHP 推代码到服务器就行了,Java 每次打 jar/war 包、停止旧服务、启动新服务,挺麻烦的,从启动到能访问还得等几分钟。

17237 次点击
所在节点    Java
118 条回复
est
2019-07-24 11:48:52 +08:00
node 那个不叫热部署吧。。。

严格的说文件拷贝过程中出了什么差错还会出问题的。
th00000
2019-07-24 12:01:30 +08:00
现在部署都是集群内的 rolling update, 楼主的热部署指的是在同一个服务不停的情况下, 直接推送更新吧, 在当前的集群环境下, 个人认为必要性越来越低.
但是开发的时候爽啊
不用改一行代码就重启了, 直接 reload 完事.
ninjachen
2019-07-24 12:06:26 +08:00
对的,nginx 那边做个路由,然后反向代理到多个 port,也就是多个 java 实例
Weixiao0725
2019-07-24 12:38:46 +08:00
从根本上来说,java 是做不到热更新的,因为 Java 中只要 jar 包中的文件被载入到内存后,就不支持删除。像 Tomcat 那种热部署,无非也就是把所有的数据结构重新载入一遍。
akira
2019-07-24 12:59:53 +08:00
热不热不重要,只要能"快速"
StarkWhite
2019-07-24 14:22:00 +08:00
@qiyuey 能省很多时间啊
StarkWhite
2019-07-24 14:23:00 +08:00
@cshijiel 感谢。
“注意,redefine 后的原来的类不能恢复,redefine 有可能失败(比如增加了新的 field ),参考 jdk 本身的文档。”
看来不稳定啊,还是有缺陷。
StarkWhite
2019-07-24 14:23:54 +08:00
@akira 也是,就是想省事儿~ 如果有别的类似热更新、热加载之类方式的也行啊
pursuer
2019-07-24 14:34:52 +08:00
@Weixiao0725 classloader 是可以从内存卸载 jar 包的,只是如果不清除外部引用的话不会被 gc 清理
StarkWhite
2019-07-24 14:43:06 +08:00
@jowan 也是,这个又引申出来状态丢失问题。所有重启服务的方式,都会导致缓存丢失。。。
StarkWhite
2019-07-24 14:44:11 +08:00
@th00000 对的,但我就一台服务器啊,搞不了集群
StarkWhite
2019-07-24 14:44:51 +08:00
@est 文件都拷贝出差错了,那用什么方式都会有问题吧 😂
gwybiaim
2019-07-24 14:46:45 +08:00
@StarkWhite 没错,redefine 有很多约束
wr410
2019-07-24 14:46:50 +08:00
与其想办法怎么弄热部署,不如想办法从前端做多机均衡,如果你关闭指令发出之后,还有线程没跑完连接没断开,这时候你就知道前端均衡的好处了。
yuankui
2019-07-24 14:50:13 +08:00
需要一套新轮子,楼主等我消息 😆
freexyxyz
2019-07-24 14:51:27 +08:00
用 Jenkins 之类的工具,配个流水线就行了……
est
2019-07-24 14:57:31 +08:00
@StarkWhite 比如你 index.html 先拷贝完毕,这个时候引用了 main.23333.js 然后这个文件还没拷完。

是不是就出问题了。
StarkWhite
2019-07-24 14:59:31 +08:00
@cshijiel hotswap 限制太大了,基本没法用啊,除了修复小 bug。。。
“只允许修改方法体,不允许增加新的 class、不允许新增字段、不允许新增方法、不允许修改方法签名”
cominghome
2019-07-24 15:00:12 +08:00
事实上有成熟的流水线的话,热更新听起来就像一个伪需求
StarkWhite
2019-07-24 15:00:23 +08:00
@yuankui 期待,到时候记得通知我哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX