首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

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

  •  
  •   waisir · 8 天前 · 3709 次点击

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

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

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

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

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

    你 PHP 上传代码不要时间吗...顶多说是线上修 bug 的时候方便点( doge )
        15
    daryu   7 天前
    用 docker swarm 的 stack destory,弄多个实例做灰度发布或者金丝雀发布
        16
    mritd   7 天前 via iPhone
    Kubernetes 了解一下
        17
    cominghome   7 天前
    直接覆盖代码你怕是没死过...
        18
    kaneg   7 天前 via iPhone   ♥ 3
    能接受 1G1 核的配置,还接受不了 15s 的停机时间?
        19
    lawler   7 天前   ♥ 1
    所以,你知道了为什么 PHP 是世界上最好的语言,而 Java 不是了吧?
        20
    whp1473   7 天前
    if(机器数>=2){ while(关闭一台旧的,启动一台新的) }
        21
    huijiewei   7 天前   ♥ 1
    nginx 后面跑 2 个 jar 实例 热切换
        22
    allanzhuo   7 天前
    生产环境热部署,真的是不怕死啊
        23
    keymao   7 天前
    单机热部署啥... 多个负载 切换一个 更新一个呗... 轮换着来 业务就不会停了...
        24
    chendy   7 天前
    前面放一个反代,启动新节点,启动之后把流量切过去就行了
    不过 1c1g 的配置也没多大的量吧,停一会就停一会吧…
        25
    zifangsky   7 天前
    不要问,问就是:PHP 是世界上最好的语言!
        26
    hantsy   7 天前
    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.
        27
    LokiSharp   7 天前
    多节点负载均衡
        28
    gscoder   7 天前
    集群部署呗。。开发模式下那种热更新浪费性能,没有用在生产环境的。你说的这种只有脚本型语言才做得到,比如 php
        29
    loveCoding   7 天前
    nginx 反代两个 jar 实例端口就行
        30
    abcbuzhiming   7 天前
    我就说很多人误以为 PHP 不需要编译,所以就能热部署了。实际上你们这种玩法就是错的。根本达不到真的热部署的要求
        31
    hahaayaoyaoyao   7 天前 via Android
    @abcbuzhiming 是的
        32
    luozic   7 天前
    冗餘 (網關 app 容器 數據庫)+ 分佈式并發控制架構才有 不停機更新,其他的估計是’自以爲“的不停機更新。
        33
    ala2008   7 天前
    负载均衡
        34
    yc8332   7 天前   ♥ 1
    其实楼主的意思就是不停机部署。。。单机应该是不可能,不然就是单机起两个,不同端口,启完了再切过去新端口
        35
    coolzilj   7 天前 via Android   ♥ 1
    你们吓得楼主都不敢出来说话了
        36
    waisir   7 天前   ♥ 1
    @coolzilj。。。

    非常感谢各位的回答,答案已经很清晰了。
        37
    freedomshi   7 天前
    还是 php 最好。。。
        38
    a663   7 天前 via Android
    k8s
        39
    hillMonkey   7 天前
    Portainer + Swarm
        40
    rffan   7 天前
    没办法单节点热部署,无论如何都得重启 tomcat 等容器。
        41
    xfriday   7 天前
    k8s 单节点也可以滚动更新的,更新过程中旧副本集继续提供服务,更新完成并成功才切换到新副本集,如果失败自动回滚
        42
    Infernalzero   7 天前
    你想就靠单机解决这个问题的话就只能不用 spring 这套了,micronaut 那套就是为了优化这个问题,在编译时完成了依赖注入
        43
    qiyuey   6 天前
    集群的事情,不要靠单机解决
        44
    ricwang   6 天前
    docker 部署,nginx 做负载,起一个新版本的容器,正常后再 kill 原本旧版本的容器
    我的处理方式
        45
    wizzer   1 天前
    自带运维中心,演示地址 https://nutzwk.wizzer.cn
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2052 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 265ms · UTC 16:14 · PVG 00:14 · LAX 09:14 · JFK 12:14
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1