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

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

  •  
  •   waisir · 235 天前 · 4719 次点击
    这是一个创建于 235 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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