Nodejs故障转移

我是nodejs的初学者。 我正在尝试在生产中使用nodejs。 我想实现nodejs故障转移。 当我正在执行聊天应用程序时,如果节点服务器失败,则聊天不应该分解,应该自动连接到不同的节点服务器,并且应该使用相同的套接字ID进行进一步聊天,以便聊天消息不应该closures。 这是可以实现的吗? 任何样品。

我不应该使用Ngnix / HAProxy。 另外让我知道节点服务器应该是:主动 – 主动或主动 – 被动

PM2最好是进程pipe理者,特别是自动故障切换,自动分割,自动重启的特点。

介绍如下,

PM2是具有内置负载平衡器的Node.js应用程序的生产过程pipe理器。 它使您可以永久保持应用程序的活动状态,无需停机即可重新加载应用程序,并且可以方便常见的系统pipe理任务

在生产模式下启动应用程序非常简单:

$ pm2 start app.js 

PM2不断受到700多个testing的攻击。

官方网站: http : //pm2.keymetrics.io

适用于Linux(stable)&MacOSx(stable)&Windows(bêta)。

有几个问题,你立即在那里解决:

守护进程 – 保持您的应用程序 :如前所述,可以使用诸如forever脚本来监督您的nodeJS应用程序在失败时重新启动它。 这对于最坏情况下启动应用程序是很好的。

同样,可以使用recluster来分叉应用程序,并通过创build主pipe进程和subprocess来使其更具有防故障function。

未捕获的exception :nodejs中的一个已知障碍是asynchronous错误不能被try / catch块捕获。 因此,exception可能会导致整个应用程序崩溃。

您应该使用域来创build受exception影响的活动的逻辑分组,并根据需要进行处理,而不是让这种情况发生。 如果您正在运行带有状态的networking服务器,则可能会捕获未处理的exception,并在终止应用程序之前closures其他连接。

(如果你正在运行一个无状态的应用程序,可能只是忽略这个exception,并试图继续;虽然这不一定是明智的,小心使用它)。

安全 :这是一个巨大的话题。 您至less需要确保:

  1. 您的应用程序以最less权限的非root用户身份运行。 端口<1024需要root权限。 通常这是用nginx,docker或者类似的代码从更高的端口代理的。
  2. 你正在使用头盔,并尽可能地硬化你的应用程序。

顺便说一下,我看到你在NodeJS前面使用的是Apache,这不一定是因为apache可能会在负载的情况下使用它的线程模型而不是nodeJS的事件循环模型。

假设你使用数据库进行客户端身份validation,那就没有太多的工作要做,我的意思是,一个脚本来pipe理服务器脚本的状态,就像forever那样,

如果失败,它会尝试启动脚本,而不是devise服务器脚本来处理每个已知和可能的未知错误,发送给它的任何信号等。

stream是一个小例子。

 (Websocket Router) | |_(Chat Channel #1) \ |_(Chat Channel #2) - Channel Cache // hold last 15 messages of every channel |_(Chat Channel #3) / |_(Authentication handler) // login-logout 

– 希望我以某种方式帮助。

对于一个简单的方法,我认为你应该在你的客户端build立一个重新连接机制,并使用一个forever的进程pipe理或PM2来pipe理你的Node.js进程。 我尝试了太多的方法,但仍然无法克服套接字问题,只要进程停止,它总是被终止。

你可以尝试使用Pm2 start app.js -I 0 。 这将以集群模式运行您的应用程序,为同一个线程创build多个subprocess。 您可以在各个进程之间共享套接字信息。