• 让 sdk 包静默升级的 SAO 操作,你见过几种?


    拓展阅读

    让 sdk 包静默升级的 SAO 操作,你见过几种?

    业务背景

    有时候为业务方提供了基础的 sdk 包,为了保证稳定性,一般都是 release 包。

    但是每一次升级都非常痛苦,也不可能写一个一步到位的 jar 包,因为业务一直在变化。

    那有什么方式,让 sdk 包静默升级呢?

    今天学习到一个骚操作,和大家分享一下。

    骚操作

    方式1-snapshot

    以 java 的 maven 包管理为例,如果使用 snapshot,那么就可以随时方便的升级包内容。

    优点

    非常简单,maven 天然支持、

    缺点

    • 包信息不够稳定,一般为了追求生产的稳定性,都会要求去 snapshot。

    • 升级失败,不兼容等,没有回滚的余地。

    方式2-nexus 等内部仓库直接替换

    方式:直接替换指定版本的仓库中的包。这种方式的核心和上面类似。只不过是看起来不是 snapshot,但是依然无法保障安全。

    方式3-shell 脚本结合 CI

    方式:使用 shell 脚本,在升级的时候,先备份,再替换。

    流程:一般结合 ci 流水线使用,部署打包的时候替换包版本到指定版本,相比较而言更加灵活,也有回旋的余地。

    缺点:要求比较多,比较麻烦。且要求应用必须通过 ci 流水线部署,否则就会被绕过。

    注意点

    1)需要保证 jar 版本之间的向前兼容性,避免升级导致问题。

    2)应用环境比较复杂,可能会出问题。所以一定要逐步的升级,让用户测试环境经过验证。

    3)提前通知用户,让用户知道这个事情。而且允许用户不做升级操作。

    小结

    这种方式给我的感觉是无可奈何,但是又非常巧妙。

    上一次有这种感觉的,还是运维怕磁盘爆,预留 500MB 放一个垃圾文件,磁盘满了直接移除,快速解决问题。

    你在日常工作中,见到过哪些 SAO 操作?

  • 相关阅读:
    elasticsearch导出和导入数据
    C++中的deque容器
    【JAVA基础】专题课(综合案例上)
    Spark调度底层执行原理详解(第35天)
    Dynamics 365应用程序开发 7. 使用Web API开发应用程序
    相似性和距离度量
    从零开始学Vue3--井字棋
    Linux-X86和Linux-ARM编译binutils
    docker镜像存储在哪里
    数据库设计三范式
  • 原文地址:https://www.cnblogs.com/houbbBlogs/p/17946072