Spring Boot 2.0 你们是如何做到 0 宕机热部署的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waisir
V2EX    Java

Spring Boot 2.0 你们是如何做到 0 宕机热部署的?

  •  
  •   waisir 2019-04-15 23:44:11 +08:00 11263 次点击
    这是一个创建于 2371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Spring Boot 新手。正在学习中,新项目用到 Spring Boot,但在 0 宕机发布这个问题上有疑惑。

    由于之前使用 PHP,发布流程中使用新版代码替换原有代码即可。

    了解到 java 可以使用源代码、jar、war+tomcat 这几种方式运行。了解到有 spring-loaded 和 devtools 与热部署有关。(闻其名总感觉像类似像 webpack 中的 hot-reload...,仅限开发使用,用在存环境会不会有性能问题?)

    目前我使用的是 jar 包,每次发布需要中断约 15s 的时间(单机 1G+1Core)。我怀疑是我姿势不对,请不吝赐教。

    47 条回复    2021-10-18 11:01:46 +08:00
    mind3x
        1
    mind3x  
       2019-04-16 00:23:39 +08:00   2
    你没有 load balancer 和冗余节点,单机谈什么热部署……
    misaka19000
        2
    misaka19000  
       2019-04-16 00:29:05 +08:00 via Android   1
    多负载 + 优雅停机
    zjp
        3
    zjp  
       2019-04-16 01:06:02 +08:00 via Android
    有再加一层代理的可以用单机多实例,启动完切代理端口。不过 1G 内存有点悬…
    hyperbin
        4
    hyperbin  
       2019-04-16 01:07:54 +08:00 via Android
    Java 还能源码部署?
    WordTian
        5
    WordTian  
       2019-04-16 02:16:18 +08:00 via Android
    多节点加负载均衡吧
    yuikns
        6
    yuikns  
       2019-04-16 02:52:28 +08:00 via iPhone   1
    试试 docker ?
    petercui
        7
    petercui  
       2019-04-16 06:30:21 +08:00
    凌晨停机部署
    jbiao520
        8
    jbiao520  
       2019-04-16 06:50:07 +08:00 via Android
    滚动部署
    Cbdy
        9
    Cbdy  
       2019-04-16 07:03:59 +08:00 via Android
    lb 了解一下
    xuanbg
        10
    xuanbg  
       2019-04-16 07:55:35 +08:00   1
    idea 有热部署功能,但仅限于在 idea 里面运行或调试。生产环境就只能做双机热备或分布式才能实现不停机更新了。其实不停机热更也只适用于版本兼容的情况,不兼容的时候,热更是要出大问题的!
    hangszhang
        11
    hangszhang  
       2019-04-16 08:08:01 +08:00
    生产环境的热部署没有多大意义
    lhx2008
        12
    lhx2008  
       2019-04-16 08:10:32 +08:00 via Android   1
    你需要前端再带一个 nginx,然后旧的不要停,直接起一个新的 jar,然后 nginx 改端口,平滑重启,把旧 jar 包的 kill 掉
    gramyang
        13
    gramyang  
       2019-04-16 08:25:57 +08:00
    不是都说 Java 对热部署的支持不友好,最好不要热部署的吗?
    Sharuru
        14
    Sharuru  
       2019-04-16 08:32:29 +08:00 via Android
    单机谈什么热部署...

    你 PHP 上传代码不要时间吗...顶多说是线上修 bug 的时候方便点( doge )
    daryu
        15
    daryu  
       2019-04-16 09:09:40 +08:00
    用 docker swarm 的 stack destory,弄多个实例做灰度发布或者金丝雀发布
    mritd
        16
    mritd  
       2019-04-16 09:13:18 +08:00 via iPhone
    Kubernetes 了解一下
    cominghome
        17
    cominghome  
       2019-04-16 09:14:58 +08:00
    直接覆盖代码你怕是没死过...
    kaneg
        18
    kaneg  
       2019-04-16 09:15:04 +08:00 via iPhone   3
    能接受 1G1 核的配置,还接受不了 15s 的停机时间?
    lawler
        19
    lawler  
       2019-04-16 09:22:01 +08:00   1
    所以,你知道了为什么 PHP 是世界上最好的语言,而 Java 不是了吧?
    whp1473
        20
    whp1473  
       2019-04-16 09:47:49 +08:00
    if(机器数>=2){ while(关闭一台旧的,启动一台新的) }
    huijiewei
        21
    huijiewei  
       2019-04-16 09:54:01 +08:00   1
    nginx 后面跑 2 个 jar 实例 热切换
    allanzhuo
        22
    allanzhuo  
       201904-16 09:55:59 +08:00
    生产环境热部署,真的是不怕死啊
    keymao
        23
    keymao  
       2019-04-16 10:38:05 +08:00
    单机热部署啥... 多个负载 切换一个 更新一个呗... 轮换着来 业务就不会停了...
    chendy
        24
    chendy  
       2019-04-16 10:42:54 +08:00
    前面放一个反代,启动新节点,启动之后把流量切过去就行了
    不过 1c1g 的配置也没多大的量吧,停一会就停一会吧…
    zifangsky
        25
    zifangsky  
       2019-04-16 11:13:58 +08:00
    不要问,问就是:PHP 是世界上最好的语言!
    hantsy
        26
    hantsy  
       2019-04-16 11:24:43 +08:00
    You should consider applying blue-green pipelines with DevOps.

    It is an issue of the languages/frameworks you are using, you have to envolve your development progress.
    LokiSharp
        27
    LokiSharp  
       2019-04-16 11:46:41 +08:00
    多节点负载均衡
    gscoder
        28
    gscoder  
       2019-04-16 11:50:32 +08:00
    集群部署呗。。开发模式下那种热更新浪费性能,没有用在生产环境的。你说的这种只有脚本型语言才做得到,比如 php
    loveCoding
        29
    loveCoding  
       2019-04-16 11:52:10 +08:00
    nginx 反代两个 jar 实例端口就行
    abcbuzhiming
        30
    abcbuzhiming  
       2019-04-16 11:57:27 +08:00
    我就说很多人误以为 PHP 不需要编译,所以就能热部署了。实际上你们这种玩法就是错的。根本达不到真的热部署的要求
    hahaayaoyaoyao
        31
    hahaayaoyaoyao  
       2019-04-16 12:31:26 +08:00 via Android
    @abcbuzhiming 是的
    luozic
        32
    luozic  
       2019-04-16 13:00:25 +08:00
    冗 ( app 容器 )+ 分式并控制架才有 不停更新,其他的估是’自以“的不停更新。
    ala2008
        33
    ala2008  
       2019-04-16 16:35:29 +08:00
    负载均衡
    yc8332
        34
    yc8332  
       2019-04-16 16:50:32 +08:00   1
    其实楼主的意思就是不停机部署。。。单机应该是不可能,不然就是单机起两个,不同端口,启完了再切过去新端口
    coolzilj
        35
    coolzilj  
       2019-04-16 17:58:47 +08:00 via Android   1
    你们吓得楼主都不敢出来说话了
    waisir
        36
    waisir  
    OP
       2019-04-16 18:03:20 +08:00   1
    @coolzilj。。。

    非常感谢各位的回答,答案已经很清晰了。
    freedomshi
        37
    freedomshi  
       2019-04-16 19:38:26 +08:00/span>
    还是 php 最好。。。
    a663
        38
    a663  
       2019-04-16 19:49:25 +08:00 via Android
    k8s
    hillMonkey
        39
    hillMonkey  
       2019-04-16 19:53:26 +08:00
    Portainer + Swarm
    rffan
        40
    rffan  
       2019-04-16 21:26:54 +08:00
    没办法单节点热部署,无论如何都得重启 tomcat 等容器。
    xfriday
        41
    xfriday  
       2019-04-16 21:46:25 +08:00
    k8s 单节点也可以滚动更新的,更新过程中旧副本集继续提供服务,更新完成并成功才切换到新副本集,如果失败自动回滚
    Infernalzero
        42
    Infernalzero  
       2019-04-16 23:26:50 +08:00
    你想就靠单机解决这个问题的话就只能不用 spring 这套了,micronaut 那套就是为了优化这个问题,在编译时完成了依赖注入
    qiyuey
        43
    qiyuey  
       2019-04-17 09:29:52 +08:00
    集群的事情,不要靠单机解决
    ricwang
        44
    ricwang  
       2019-04-17 15:47:43 +08:00
    docker 部署,nginx 做负载,起一个新版本的容器,正常后再 kill 原本旧版本的容器
    我的处理方式
    wizzer
        45
    wizzer  
       2019-04-22 11:22:42 +08:00
    自带运维中心,演示地址 https://nutzwk.wizzer.cn
    zhaoxueqin248
        46
    zhaoxueqin248  
       2020-05-06 16:03:12 +08:00
    @mind3x 单纯请教,就是以前看过 Nginx 就是单机 直接更换 sbin/nginx 二进制执行文件,新老 NGINX 进程替换, 来进行的 Nginx 升级。讲道理 ,Spring-Boot 应该从技术上也是是可行的吧?
    Rorysky
        47
    Rorysky  
       2021-10-18 11:01:46 +08:00
    @allanzhuo 有需要不停机的场景
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2725 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 12:27 PVG 20:27 LAX 05:27 JFK 08:27
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86