在生产机器上部署和运行节点服务器的最佳方法?

Posted

技术标签:

【中文标题】在生产机器上部署和运行节点服务器的最佳方法?【英文标题】:Best approach to deploy and run node servers on production machines? 【发布时间】:2013-08-06 06:01:18 【问题描述】:

我正在使用 Webrtc、nodejs、Expressjs 作为框架来创建音频、视频和聊天应用程序。我使用 Forever 以便脚本连续运行。

因为我的应用程序处理音频、视频和聊天。用户的存在起着重要的作用。我们需要让系统始终启动并运行,避免系统崩溃和重启。如果发生这种情况,我们将丢失有关在线用户的所有信息。 需要建议什么是避免此类情况的最佳方法。

此外,在将新功能迁移到生产服务器时,我们应该考虑哪些步骤,以使应用程序不会停止,从而不会丢失用户信息。

如果服务器宕机或者我们不得不让它宕机怎么办。可以使用哪些不同的技术,以便我们不会丢失系统中在线用户的存在信息并将其恢复(如果需要)。

【问题讨论】:

您应该使用带有通用键值存储的无状态 API 调用来模拟需要的状态。除了公共键值存储之外,您还应该在 Node 进程之间使用消息队列。每个服务器都应该能够处理任何请求,而与连续请求的路由无关。使用持久连接部署多个进程时,在所有连接断开之前不要将它们关闭,并确保没有建立新连接。清单还在继续……应用程序离部署有多远? :) 【参考方案1】:

1) 使用节点集群为每个核心分叉多个进程。因此,如果一个进程死亡,另一个进程将自动启动。签出:http://nodejs.org/api/cluster.html

2) 使用域来捕获异步操作,而不是使用 try-catch 或 uncaught http://nodejs.org/api/domain.html。我并不是说尝试捕获或未捕获是不好的想法!

3) 使用 forever/supervisor 来监控您的服务

4) 添加守护程序以运行您的节点应用程序:http://upstart.ubuntu.com

希望这会有所帮助!

我也在这个帖子回复了:How do I prevent node.js from crashing? try-catch doesn't work

【讨论】:

以上是关于在生产机器上部署和运行节点服务器的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

生产中的节点服务器必须有节点模块吗?

部署为生产服务器

生产环境中的 Elasticsearch 配置和最佳实践

Octopus Deploy:如何将不同的项目部署到不同的生产机器上

jenkins节点机以服务的形式部署到机器上

Erlang/OTP 生产应用部署简介