2010-10-16 150 views
5

这可能是一个基本问题,但我该如何有效地将更新部署到当前运行的node.js代码?部署更新到生产node.js代码

我从PHP的到来,JavaScript的(客户端)的背景,我在那里时,他们需要更新和变化都在加工生产时现场立即提供可以只覆盖文件。

但在node.js中我要覆盖现有文件,然后关机和重新启动应用程序。我应该担心潜在的停机时间吗?对我来说,这似乎是比PHP(脚本)方式更危险的方法。除非我有一个服务器群集,我可以一次取下一台服务器进行更新。

什么样的策略可用于此?

回答

2

对我来说,这几乎是:

svn up; monit restart node

这个节点服务器作为与长轮询客户彗星服务器,这样客户端只需重新连接就像他们通常会。节点服务器的第一件事是从数据库中获取当前状态信息,所以一切都很顺利。

我不认为这真的是比任何做一个svn up更新一堆PHP文件风险较高。如果有任何事情,它会更安全一些。当你更新一个大型的PHP项目时,有一个机会(如果它是一个高流量的网站,基本上有100%的机会),你可以通过网络服务器获取请求,而你仍然在更新。这意味着您将在同一请求中运行更新和过期的代码。至少通过Node方法,您可以更新的所有内容并重新启动节点服务器并知道您的所有代码都是最新的。

2

我不会担心太多的停机时间,你应该能够保持这么短的时间,以避免任何人会注意到的机会(杀死进程并在bash脚本中重新启动它,或者如果你想保留它到几分之一秒)。

更值得关注的是但是,许多节点应用程序保留了大量的内存,你要去当你重新启动它失去状态信息。例如,如果您正在运行聊天应用程序,则可能不记得用户正在与谁交谈,或者他们所在的频道/房间。处理此问题更多的是设计问题,而且与应用程序有关。

+0

是。这就是为什么将会话数据存储在永久性数据库而非内存中的原因。 – 2013-10-19 09:11:26

1

某些云托管提供程序Node.js(如NodeJitsu或Windows Azure)会将磁盘上的两个站点版本保留在不同的目录中,并且一旦新版本完全更新,就会将流量从一个版本重定向到新版本部署。

这通常是平台即服务(PaaS)提供者的内置功能。但是,如果您正在管理服务器,则需要构建一些功能,以便在新服务器完全部署后,流量从一个版本迁移到另一个版本。

这种方法的优点是,则回滚是容易的,因为以前的版本保持完好网站上。

1

如果你的Node.js应用程式“不能跳过一个节拍”,意思是它是根据传入的请求的持续轰击,你只是单纯的不能买得起的快速启动(即使nodemon)的停机时间。我认为在某些情况下,您只需要无缝地重新启动node.js应用程序。 要做到这一点,我用nought:https://github.com/superjoe30/naught 为您的节点零停机部署。js服务器使用内置集群API