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

时间:2015-09-29 04:29:30

标签: node.js server cluster-computing

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

3 个答案:

答案 0 :(得分:2)

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

很好,所以不用担心的事情!现在,有许多基础架构解决方案可以在几个系统上抽象运行集群,但是您的应用程序对于您可​​能选择的任何一个都没有任何意义。

但是,在您的应用程序和任何单个流程的范围内,您将关注的是发现外部服务,与基础架构中的流程进行通信以及与群集内的流程进行通信。同样,有许多解决方案会缩减您的应用程序需要解决的任何特定要求。

到目前为止,Node.js社区一直倾向于采用高度专业化的简单方法来解决特定问题然后离开。例如:

  • Web套接字客户端和服务器:群集中的低延迟;当你可以发送一些数据并继续生活时,它也可以在整个网络中运行良好,但是如果你需要同步进程,例如发送一些数据,等待和空闲,直到最终结果,它会使事情陷入困境回来了
  • Redis:集群易于设置,实例自行处理发现,足够的原子操作提供了在不同实例之间共享数据的可靠方法,pub-sub支持提供低延迟IPC < / LI>
  • ZMQ:因其智能,高度可用的连接而受到称赞,您可以使用几十行代码设计任何消息传递协议,以便维护您的应用程序的下一个人能够进行推理
  • etcd:分布式,一致的键值存储;低基础架构开销,允许在顶层实现直接的服务发现,可以很好地与每个基础架构解决方案集成在一起
  • Consul:基于serf,与etcd一样,但强烈主张,提供类固醇服务发现,并提供许多额外的细节;如果你喜欢自己管理并有时间进行前期投资,我会衷心建议进一步调查

虽然这肯定不能涵盖所有可用选项,但它应足以让您朝着正确的方向前进。只需使用这些简单易用的简单构建块,您就可以跨多个系统分发应用程序,在多个数据中心的多台计算机上运行。

答案 1 :(得分:0)

实际上这个问题可以有多个答案,因为答案取决于您希望如何在节点之间进行通信,如何将任务分配给节点以及如何管理故障。

您可能希望研究其他集群管理器的工作方式,然后尝试在您的应用程序中设计类似的东西。

几种方法:

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

2)使用像RabbitMQ / ActiveMQ(或任何其他AMQP)系统这样的消息传递系统进行节点间通信,并让一个主节点池将任务分配给特定节点并通过AMQP协议与节点通信。

答案 2 :(得分:0)

如果您正在使用像 PM2 这样的流程管理器,它将负责在不同或相同的计算机上启动您的节点应用程序,但要处理多台计算机,您应该查看Puppet,Chef或Ansible扩大规模。如果您在AWS上,可以将EC2设置为自动执行。