Spring 启动时长优化是否有必要

2023-08-16 09:22:28 +08:00
 linyimin520812

最近在 reddit 上推广自己的关于 Spring 启动优化小项目,之前也在 v 站推广过:

评论区有个评论者 ta 的意见是没有意义,理由如下:

一开始看到这个评论还挺难过的,毕竟辛苦做的东西,被别人说的一文不值。后面去了解了一下这个开发者说的 GraalVM ,发现确实很强大,编译出的 native 启动速度确实非常的快。

所以我也开始认真的思考这个项目是否真的有意义,这个项目的背景是公司为了降低线上故障时回滚止血时间,要求应用启动时长必须要小于指定的时间,结合一些可以显著提高 Java 启动速度方法无观测不优化的观点实现的,最大的一个优化应用是:将启动时间由原来的将近 6 分钟优化至 3 分钟。

如果没有公司的强推,那还有没有必要这样做 spring 应用启动的优化,就像评论说的直接使用 GraalVM 。个人觉得还是有必要的:

以上就是我能想到的观点,感觉这个评论者是 GraalVM 的忠实粉丝,而且认为这是在发布垃圾消息,所以选择在 v 站想和大家再讨论一下,spring 启动时长的优化是否有必要

7118 次点击
所在节点    程序员
90 条回复
me1onsoda
2023-08-16 11:28:59 +08:00
@kaedeair 滚动发布这类对用户无感,但是对开发还是有感,你还是得等着确认每一个节点都 up 了,当然还是越快越好,我的理解是这样
rrfeng
2023-08-16 12:00:09 +08:00
当然有意义,很多人忽视这点。

比如你开发,启动一次节省 5 分钟,一天可以省很多时间,这不是价值是什么。

更不用说线上了,滚动升级一次,每个实例要 5 分钟才起来,大规模集群几千实例你算算又浪费多少时间。

MTTR 更是能直接看到收益的。
rrfeng
2023-08-16 12:01:02 +08:00
换 graalvm 也是优化方法的一种啊,并不冲突。
flyqie
2023-08-16 12:08:11 +08:00
@Uyuhz #13

啥类型项目加载启动能花几小时?

太吓人了。
mgzu
2023-08-16 12:30:07 +08:00
v2e0xAdmin2
2023-08-16 12:49:48 +08:00
我觉得很牛逼
james122333
2023-08-16 12:51:20 +08:00
不能秒开的都是糟糕的东西 实现的并不精美
cnzjl
2023-08-16 13:26:25 +08:00
借楼问一下,quarkus 的内存使用情况如何
runliuv
2023-08-16 13:35:07 +08:00
优化个啥啊,用 .NET CORE.
weijancc
2023-08-16 13:51:58 +08:00
个人认为没有必要, spring boot 启动如果很慢, 多半是引入了了一大堆无用的依赖, 把这些去掉就好了, 另外一个就是 jpa, 也是影响 spring boot 启动速度的一大因素.
lifespy
2023-08-16 13:55:03 +08:00
@yazinnnn #14 朋友,请问群链接有吗?我想进去瞅瞅
gongxuanzhang
2023-08-16 14:19:26 +08:00
公司曾经尝试使用 graalVM 。
在关于反射的各种逆天坑之后放弃了。。。
yazinnnn
2023-08-16 14:25:27 +08:00
@lifespy 群超过 200 人了, 你可以先加我, 我拉你

echo YWFkcmVhbQo= |base64 -d
yazinnnn
2023-08-16 14:39:41 +08:00
miaotaizi
2023-08-16 14:51:39 +08:00
@linyimin520812 我同时开俩机器, 直接通过负载均衡来做是不是就不用关心 启动速度了?
troywinter
2023-08-16 14:52:09 +08:00
优化启动时间是没有意义的,觉得启动时间太长,那就不要用 spring 写了,框架就是这么工作的,再怎么优化也没有意义,项目本身需要保持正常的依赖,如果某些库在启动时做太多事情,那就考虑去掉或者拆分服务,如果部署服务花费太多时间,那应该把精力放在优化部署 pipeline ,通过蓝绿发布等手段自动化部署,k8s 本身就可以通过 Readiness Probe 在健康时再切换,那么优化启动时间就变得没有意义,省下来的时间干点别的不好嘛
linyimin520812
2023-08-16 15:18:54 +08:00
@miaotaizi #55 感觉还是需要关注的,负载均衡下的机器提供的服务是一致的,如果线上出现故障要回滚,这时需要重新发布所有的机器才能保证服务回退到没有问题的版本,假设有两台机器,每台机器的启动时间是 5 分钟,那么故障会持续 10 分钟,而如果启动时间只有 1 分钟,那么故障只持续 2 分钟
linyimin520812
2023-08-16 15:21:30 +08:00
@xiaocaiji111 对于没有重依赖的应用来说确实优化的意义不大
hakr
2023-08-16 15:22:34 +08:00
@abcbuzhiming #26 是的之前用过这玩意编译一个 springboot crud 项目编译那么长时间让我傻眼了
linyimin520812
2023-08-16 15:24:51 +08:00
@runliuv 切换一门语言的成本太大了,而且作为普通开发决定不了使用什么语言和框架

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

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

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

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

© 2021 V2EX