小弟,请教大家一个问题 Java web 项目 大家是怎么做到 服务器热更新的?

2018-08-07 10:33:19 +08:00
 zzf2017

最近开发了 java web 的项目 ,把代码 打成 war 包 放到服务器上,但是 我发现每次都要删除旧 war 包,添加新 war 包才能 发布新的版本,问问各位大佬,java 有没有什么 热更新技术?

11882 次点击
所在节点    Java
64 条回复
geying
2018-08-07 13:43:52 +08:00
换 PHP
LichMscy
2018-08-07 13:47:14 +08:00
多个 pod 拉起新的以后停掉旧的
acrisliu
2018-08-07 13:47:45 +08:00
@momocraft 哈哈哈,半夜偷偷换笑死
目前用 Spring Cloud 多实例负载均衡,更新的时候先更新一部分实例,待启动完毕后再更新剩下的。
zlhsvc
2018-08-07 13:48:22 +08:00
换 PHP 就没有这个问题了
xiaoheshang
2018-08-07 13:52:51 +08:00
我们就用的 3 楼的做法,只不过是用 jenkins 实现的,一直都很顺利。
lgpqdwjh
2018-08-07 13:59:46 +08:00


这样
choice4
2018-08-07 14:06:27 +08:00
使用 git 管理 弄个钩子好像就可以
zzf2017
2018-08-07 14:20:29 +08:00
@wanghui 我要的其实是热更新,但是后面大家提到了自动部署,我也去看了下 jenkins,感觉不错,我决定尝试下
lurenw
2018-08-07 14:28:51 +08:00
收费:JRebel
免费:DECVM

web 项目自动化+灰度发布就得了,用啥热更新。热更新最方便的地方还是辅助开发,不需要频繁 redeploy
TommyLemon
2018-08-07 14:40:56 +08:00
APIJSON 可以实现大部分 API 的热部署。
开放(GET,HEAD)API 是完全自动化的不用管;
简单的非开放 API(POST,DELETE,PUT)一般只需要后端修改校验规则的 Request 表就行,即时生效。

APIJSON 自动将前端传的 JSON 参数转为 SQL 语句执行并返回结果,
期间自动校验权限、结构、内容,自动防 SQL 注入。

通过自动化 API,前端可以定制任何数据、任何结构!
大部分 HTTP 请求后端再也不用写接口了,更不用写文档了!
前端再也不用和后端沟通接口或文档问题了!再也不会被文档各种错误坑了!
后端再也不用为了兼容旧接口写新版接口和文档了!再也不会被前端随时随地没完没了地烦了!

在线解析
自动生成文档,清晰可读永远最新
自动生成请求代码,支持 Android 和 iOS
自动生成 JavaBean 文件,一键下载
自动管理与测试接口用例,一键共享
自动校验与格式化 JSON,支持高亮和收展

对于前端
不用再向后端催接口、求文档
数据和结构完全定制,要啥有啥
看请求知结果,所求即所得
可一次获取任何数据、任何结构
能去除重复数据,节省流量提高速度

对于后端
提供通用接口,大部分 API 不用再写
自动生成文档,不用再编写和维护
自动校验权限、自动管理版本、自动防 SQL 注入
开放 API 无需划分版本,始终保持兼容
支持增删改查、模糊搜索、正则匹配、远程函数等

后端接口和文档自动化,前端(客户端) 定制返回 JSON 的数据和结构!
创作不易,GitHub 右上角点 Star 支持下吧,谢谢^_^
github。com/TommyLemon/APIJSON
zzf2017
2018-08-07 14:52:53 +08:00
@TommyLemon 这是在打广告吗
azev
2018-08-07 15:09:02 +08:00
@FanError 如果有用户正在访问要停掉的那个机器是怎么处理?
ETiV
2018-08-07 15:20:46 +08:00
nginx reload 热更新、upstream 配权重 灰度
zhangtao
2018-08-07 15:21:37 +08:00
换 golang
TommyLemon
2018-08-07 15:25:52 +08:00
@zzf2017 可以这么说,能帮到别人的广告就是好广告哦
mritd
2018-08-07 15:26:03 +08:00
@zhangtao #34 他是想实现那种 代码更新了 在不停机的情况下,程序 自动 reload 自己的代码;脚本语言好好些,静态编译语言不怎么好搞,而且说实话我感觉这玩意一直很危险....玩意出了个洞,relaod 一个 rm -rf 岂不爽歪歪了
TommyLemon
2018-08-07 15:27:30 +08:00
@zzf2017 评论里连换语言个建议都有,换个库不是更轻松嘛
zzf2017
2018-08-07 15:29:45 +08:00
@mritd 就是这个意思, 这位大哥说的对
zhangtao
2018-08-07 15:31:27 +08:00
@mritd 如果只是代码更新 reload,我觉得只实现了一半的平滑;举例来说配置文件更新了,还需要重启容器;所以要做到 web server 能平滑重启才是比较完美的,这一点 golang 可以完美做到,php 也是不行的,fpm 重启一样是不平滑的
mritd
2018-08-07 15:40:37 +08:00
@zhangtao #39 平滑重启 那个语言都有自己的套路,跑题了;楼主问的是 动态 reload 自己的代码,据我所知 go 目前唯一实现的就是那个 插件机制,编译成 so 然后实现热插拔; java 我记着是自己实现了 classloader ;由于 java 编译完的玩意理论上是个中间码,所以这方面的东西好像多一点; go 编译完是目标平台二进制,我估计也只有 动态库这个套路了;


@zzf2017 #38 但是不论哪种语言,我都不建议在生产环境做这种自我更新的行为,这种一旦出现漏洞或者安全问题,后果很严重;实际上 代码热更新与自动化部署最终对于用户来说目标只有一个 ==> "更新无感";要做到这种完全可以在运维层,比如负载均衡器、API 网关处做处理,而在应用层处理闲的有点多余了,就算你应用层做好处理了,将来架构扩展啥的都还得折腾;所以我建议 应用层做好本职工作,提供好服务;运维层也做好本职工作,实现可靠地 后端 HA 代理

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

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

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

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

© 2021 V2EX