我不应该使用Ngnix/HAProxy。还请告诉我节点服务器应该如何设置:要么是主动-主动,要么是主动-被动。
PM2 is a production process manager for Node.js applications with a built-in load balancer. It allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.
Starting an application in production mode is as easy as:
$ pm2 start app.js
PM2 is constantly assailed by more than 700 tests.
Official website: http://pm2.keymetrics.io
Works on Linux (stable) & MacOSx (stable) & Windows (bêta).
你面临着几个问题:
守护进程 - 保持应用程序不停机: 如前所述,可以使用像forever
这样的脚本来监控您的nodeJS应用程序,在失败时重新启动它。这对于在最坏的情况下启动应用程序非常有用。
同样,可以使用recluster来分叉应用程序,并通过创建一个监管进程和子进程使其更具容错性。
未捕获异常: 在nodejs中已知的障碍是不能使用try/catch块捕获异步错误。因此,异常可能会冒泡并导致整个应用程序崩溃。
与其让这种情况发生,您应该使用domains来创建一个逻辑活动组,受到异常影响,并根据需要处理它。如果您正在运行带状态的Web服务器,则应该捕获未处理的异常,并在终止应用程序之前优雅地关闭所有其他连接。
(如果您正在运行无状态应用程序,则可以尝试忽略异常并尝试继续运行;但这并不一定是明智之举,请谨慎使用。)
安全: 这是一个很大的主题。您至少需要确保:
另外,我看到你在NodeJS前面使用了Apache,这不一定是必要的,因为Apache的线程模型可能比NodeJS的事件循环模型更难以承受负载。
forever
一样。(Websocket Router)
|
|_(Chat Channel #1) \
|_(Chat Channel #2) - Channel Cache // hold last 15 messages of every channel
|_(Chat Channel #3) /
|_(Authentication handler) // login-logout
forever
或PM2
来管理你的Node.js进程。我尝试了很多方法,但仍然无法解决套接字问题,每当进程停止时它总是被杀死。Pm2 start app.js -I 0
。这将以集群模式运行您的应用程序,为同一线程创建许多子进程。您可以在各个进程之间共享套接字信息。