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

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

  •  
  •   zhongjun96 · 2022-04-01 11:55:16 +08:00 · 1787 次点击
    这是一个创建于 727 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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