将Nodejs服务器扩展到多个系统?

我想使用express来构buildnodejs中的聊天服务器。我已经使用集群模块在多个核心之间扩展服务器,但是如何扩展到不同的系统?

由于Node.js不支持共享内存,因此在多台计算机上分发Node.js进程提供了与使用集群在多个内核之间分发进程相同的体验 – 如果您的应用程序可以在单个系统内作为多个独立进程运行,那么它也可以分布在多个系统中作为多个独立的进程运行。

好极了,所以这是一件让人担心的事情! 现在,有很多基础设施解决scheme可以在多个系统上抽象运行集群,但是您的应用程序对于您可​​能select的任何一个都没有意义。

但是,在您的应用程序和任何单个进程的范围内,您将关心的是发现外部服务,与基础架构中的进程进行通信并与群集中的进程进行通信。 此外,还有很多解决scheme会削减您的应用程序需要解决的任何特定需求。

到目前为止,Node.js社区倾向于使用高度专业化的解决特定问题的简单方法,然后摆脱困境。 例如:

  • Web套接字客户端和服务器:集群内的低延迟; 也可以在整个networking上运行良好,只要发送一些数据并继续生活就可以了,但是如果需要同步进程,比如发送一些数据,等待和空闲直到最终结果回来
  • Redis :集群很容易build立,实例自己处理发现,足够的primefaces操作提供了一种可靠的方法来在不同的实例之间共享数据,而pub-sub支持提供了低延迟的IPC
  • ZMQ :因为它是智能的,高可用的连接,你可以用几十行代码来devise任何消息传递协议,下一个人维护你的应用程序将能够推理
  • etcd :分布式,一致的键值存储; 低基础架构开销,允许在顶层实现直接的服务发现,这将很好地集成到每个基础架构解决scheme中
  • 领事 :基于农奴 ,像etcd,但强烈的自以为是,提供服务发现的类固醇与许多额外的细微之处; 如果你喜欢自己pipe理,有时间来投资,我会衷心推荐进一步的调查

虽然这当然不包括所有可用的选项,但它应该足以让你朝着正确的方向前进。 只需这些简单的构build模块就可以轻松地推理出来,您应该能够跨越多个系统分布应用程序,在多个数据中心的多台计算机上运行。

实际上这个问题可以有多个答案,因为答案取决于你想如何在节点之间进行通信,你想如何分配任务给节点以及如何pipe理失败。

您可能想研究其他集群pipe理器如何工作,然后尝试在应用程序中devise类似的东西。

几个方法:

1)在前面使用负载平衡器,并在机器中分配负载。 我认为这可能是最简单的方法。

2)使用诸如RabbitMQ / ActiveMQ(或任何其他AMQP)系统的消息传递系统用于节点间通信,并且允许有主节点池将任务分配给特定节点并通过AMQP协议与节点通信。

如果你使用像PM2这样的进程pipe理器,它将负责在不同或相同的机器上启动你的节点应用程序,但是要处理多台机器,你应该看看Puppet,Chef或Ansible来扩展。 如果您在AWS上,可以将EC2设置为自动执行。