V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
zhongjun96
V2EX  ›  程序员

寻找一个 Java 应用本地更新方案

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

    公司采用工控机整机交付客户。机器上运行 jar 包+Mysql 数据库+web 应用。机器能访问外网。 如何更新这些应用? 目前考虑采用 shell 更新。更新 jar->更新数据库结构->启用 jar->更新 web 。 但是万一 jar 更新失败或者启动失败,需要回滚数据库及 web 。也无法保证回滚成功。 对这种问题,市面上有什么现成的解决方案吗?

    第 1 条附言  ·  176 天前
    现在暂时使用 shell 脚本。jar 启动后,检查进程是否启动,进程未启动或启动后接口无法访问,直接回滚 web 和 mysql 。输出回滚日志,判断没成功就推送日志到飞书通知,再手动看啥原因,再下发新的回滚脚本。人工运维的方法。
    22 条回复    2022-04-02 22:00:40 +08:00
    qfdk
        1
    qfdk  
       177 天前 via iPhone
    哈哈哈 shell 更新….
    letitbesqzr
        2
    letitbesqzr  
       177 天前
    打包成 docker ,方案就比较多了..
    wxy1991
        3
    wxy1991  
       177 天前
    你们公司没有测试吗。。。
    chengyiqun
        4
    chengyiqun  
       177 天前
    没有测试环境?
    LoNeFong
        5
    LoNeFong  
       177 天前
    准备数据库 up down 脚本 出问题好及时回滚
    工控机安装 docker 也不现实 看来只能 scp 了
    zhongjun96
        6
    zhongjun96  
    OP
       177 天前
    @wxy1991 测试归测试啊,毕竟机器不在我们这边,啥情况都有可能。肯定要考虑启动失败的情况
    zhongjun96
        7
    zhongjun96  
    OP
       177 天前
    @LoNeFong scp 也不太可能,没有公网 ip ,也不允许外网映射。所以只能程序自己检测并自动更新
    tuboshuv1
        8
    tuboshuv1  
       177 天前
    其实保证数据库更新不出错就可以了。应用开始更新的时候,就给中央服务器发通知,执行状态什么的。然后每走一步就仔细校验,错了立马暂停。这种情况的更新不可能没人值守的
    anyele
        9
    anyele  
       176 天前
    难点是数据库更新, 要保留回滚的措施
    night98
        10
    night98  
       176 天前
    linux cron 每天晚上 3 点定期拉取 docker hub latest 镜像并重启,java 服务打包成 docker 镜像,内置一下 flyway ,最好买个 flyway 的授权
    zhongjun96
        11
    zhongjun96  
    OP
       176 天前
    @night98 工控机不能装 docker 。内存不够。
    zzh7982
        12
    zzh7982  
       176 天前
    @zhongjun96 内存不够那为啥用 java 不用 go 呢
    zhongjun96
        13
    zhongjun96  
    OP
       176 天前
    @zzh7982 因为我不会 go
    zzh7982
        14
    zzh7982  
       176 天前
    @zhongjun96 学啊
    zzh7982
        15
    zzh7982  
       176 天前
    @zhongjun96 好像你 java 多会一样( dog
    aptupdate
        16
    aptupdate  
       176 天前
    机器多大内存? docker 自身不会占用很多内存的。
    gitdoit
        17
    gitdoit  
       176 天前
    别更表了, 直接建新库, 在新库上更新表结构,同步数据; 执行成功了 把数据源切过去
    sky857412
        18
    sky857412  
       176 天前
    你需要再写一个监控程序,负责更新。监控程序,集成 web shell 的功能,让客户再给你们开个跳板机,做运维。这样虽然麻烦一点,但是靠谱一点
    AItsuki
        19
    AItsuki  
       176 天前 via Android
    建议还是上 Docker ,并且用 compose 配置,占不了多少内存的,java 你可以选择使用 openj9 版本。
    zhongjun96
        20
    zhongjun96  
    OP
       176 天前
    @aptupdate 只有 4G 。还要装 mysql ,nginx
    git00ll
        21
    git00ll  
       176 天前
    写代码时,尽量保证数据库兼容性。
    如加字段这种可以兼容的改动,失败代码回滚后不影响。
    如修改字段,删除字段这种改动,可分多次代码迭代实现,如增加字段取代旧的,然后再删除旧的。
    night98
        22
    night98  
       176 天前
    4G 内存够够的,java1g ,mysql1g ,nginx0.5g ,完美
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2624 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 15:11 · PVG 23:11 · LAX 08:11 · JFK 11:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.