V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wheeler
V2EX  ›  问与答

请教 V 友微服务对外发布升级的问题

  •  
  •   wheeler · 2021-05-10 17:56:22 +08:00 · 714 次点击
    这是一个创建于 1079 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如果我有一个应用是由三个容器构成的,这个应用要交给客户部署的。这种场景对外发布应用的话就是直接把镜像交给客户吗?后期应用升级该怎么做呢,发布新的镜像吗?不知道业界的主流实践是什么样的。

    本人刚接触微服务的概念,说的不对的请指教哈。要是推荐一些入门的书就更好了。🙏

    4 条回复    2021-05-10 20:06:00 +08:00
    timethinker
        1
    timethinker  
       2021-05-10 18:47:47 +08:00   ❤️ 1
    你这个问题其实这个跟微服务没啥关系,跟容器也没有太大的关系,想想没有容器之前我们是怎么交付软件的?有了容器之后区别在哪里?

    1 、当你发布的新的镜像,里面包含了最新的代码,那么客户升级的时候必然会拉取这个镜像并启动该镜像的容器。
    2 、启动容器的时候,以前的容器如果同时运行,此时适当的切换流量至最新的容器内,如果没有问题,旧容器就可以停止了。
    3 、如果不允许同时启动两个不同版本的容器,那么必然要停掉之前的,再启动新的(例如版本迁移,数据结构更改)。

    所以这里没有什么神奇的地方,对于不兼容的升级,该停机还是得停机,否则迁移成本太高(你得同时维护新老版本的数据兼容、API 变更等等)。
    wheeler
        2
    wheeler  
    OP
       2021-05-10 19:03:46 +08:00 via iPhone
    @qwe520liao 谢谢。目前客户希望我们拿到新镜像以后能够在用户界面一键升级,这让我很疑惑。

    这相当于容器自己得通之 docker daemon 来完成自己的升级。
    timethinker
        3
    timethinker  
       2021-05-10 19:22:32 +08:00
    这个需求可不简单了,毕竟涉及到的东西比较多,可能你需要透过容器调用 Docker 引擎的 API 来实现,这样做就跟你的部署配置耦合了,意味着你需要管理 Docker 的镜像以及容器。

    Docker 引擎 API 文档: https://docs.docker.com/engine/api/v1.41/
    可以使用 alpine/socat 这个容器将 Docker 的 unix socket 映射为一个可以请求的端口地址 ,加入到跟应用同一个 docker 网络中进行调用,这样你的服务就可以通过一个 HTTP 客户端来请求 Docker 引擎了。
    wheeler
        4
    wheeler  
    OP
       2021-05-10 20:06:00 +08:00 via iPhone
    @qwe520liao 是的。总感觉明明都用 docker 了,结果升级安装的时候还想隐藏细节的想法很怪异。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1350 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:35 · PVG 01:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.