gpt4 book ai didi

clojure - 如何在部署 Clojure Web 服务时减少重新加载时间?

转载 作者:行者123 更新时间:2023-12-02 16:00:45 25 4
gpt4 key购买 nike

我使用 Linux/upstart 来启动我的 jar。我这样做是这样的:

  1. lein uberjar 生成 myapp.jar
  2. 通过 scp 将 myapp.jar 复制到专用服务器
  3. 通过 ssh 连接到专用服务器
  4. 停止myapp.jar
  5. 将 jar 复制到目标目录(因此 upstart 可以找到它)
  6. 启动myapp.jar

有几个问题:

  1. 执行步骤 1、2、3 和 6 很无聊。我认为可以在脚本中完成,但我不确定替换 myapp.jar之前是个好主意停止我的应用程序。在运行时更改 jar 文件是否安全?
  2. 第 5 步和第 7 步之间的延迟约为 10 秒。是否可以立即更新 myapp.jar?更有趣的是:是否可以当场更新:例如我已经打开了连接,我想保存它们。
  3. 是否可以像 Erlang 那样做?部署,如果失败,它将加载以前的版本。

最佳答案

您的问题由几个部分组成,让我逐个回答。

你是对的,替换 jar 文件不是一个好主意。您最好备份该文件(将其复制到 backup 目录中)而不是仅仅覆盖它。

如果您真的对启动时间和停机时间间隔感到好奇,有几个选项可以实现。首先,维护一个具有多个工作节点的布局和一个在它们之间分发传入请求的代理。因此,您更新第一个节点,当它处于离线状态时,所有请求都会转到第二个节点。然后你更新第二个就可以了。但它需要你首先获得一些操作技能。

第二个选项是执行热代码重新加载。简而言之,在生产服务器上公开一个 nREPL 端口。然后,您从 Emacs 或任何其他编辑器连接到它,打开更新的命名空间并按 C-c C-k 来评估远程计算机上的整个命名空间。因此,您可以在运行时更新代码,而无需重新启动计算机。但请记住,重新加载后不会保存更改。

一个小注意事项,您最好使用 Ansible 自动化该过程。它是一个工具,您可以在 YAML 文件中声明您的操作。结果将是一组看起来简单且易于维护的指令。 Ansible 在幕后考虑了很多事情。例如,当您尝试覆盖文件时,它可以自动创建备份。

关于clojure - 如何在部署 Clojure Web 服务时减少重新加载时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31131694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com