首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在部署clojure web服务时减少重新加载时间?

如何在部署clojure web服务时减少重新加载时间?
EN

Stack Overflow用户
提问于 2015-06-30 07:04:35
回答 1查看 93关注 0票数 3

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

  1. lein生产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那样做吗?部署,如果失败,它将加载以前的版本。
EN

回答 1

Stack Overflow用户

发布于 2019-03-01 07:45:40

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

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

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

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

一小段笔记,你最好用Ansible自动处理这个过程。这是一个在YAML文件中声明操作的工具。结果将是一组看起来简单且易于维护的指令。Ansible在引擎盖下考虑了很多事情。例如,当您试图覆盖一个文件时,它可以自动创建备份。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31131694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档