我想使用express在nodejs中构建聊天服务器。我已经使用群集模块在多个核心之间扩展服务器但是如何扩展到不同的系统?
答案 0 :(得分:2)
由于Node.js不支持共享内存,因此,如果您的应用程序可以在单个系统中作为多个独立进程运行,则跨多台计算机分发Node.js进程可提供与使用群集在多个核心之间分配进程相同的体验,然后它也可以分布为跨多个系统的多个独立进程运行。
很好,所以不用担心的事情!现在,有许多基础架构解决方案可以在几个系统上抽象运行集群,但是您的应用程序对于您可能选择的任何一个都没有任何意义。
但是,在您的应用程序和任何单个流程的范围内,您将关注的是发现外部服务,与基础架构中的流程进行通信以及与群集内的流程进行通信。同样,有许多解决方案会缩减您的应用程序需要解决的任何特定要求。
到目前为止,Node.js社区一直倾向于采用高度专业化的简单方法来解决特定问题然后离开。例如:
虽然这肯定不能涵盖所有可用选项,但它应足以让您朝着正确的方向前进。只需使用这些简单易用的简单构建块,您就可以跨多个系统分发应用程序,在多个数据中心的多台计算机上运行。
答案 1 :(得分:0)
实际上这个问题可以有多个答案,因为答案取决于您希望如何在节点之间进行通信,如何将任务分配给节点以及如何管理故障。
您可能希望研究其他集群管理器的工作方式,然后尝试在您的应用程序中设计类似的东西。
几种方法:
1)在前部使用负载平衡器并在机器之间分配负载。我认为这可能是最简单的方法。
2)使用像RabbitMQ / ActiveMQ(或任何其他AMQP)系统这样的消息传递系统进行节点间通信,并让一个主节点池将任务分配给特定节点并通过AMQP协议与节点通信。
答案 2 :(得分:0)
如果您正在使用像 PM2 这样的流程管理器,它将负责在不同或相同的计算机上启动您的节点应用程序,但要处理多台计算机,您应该查看Puppet,Chef或Ansible扩大规模。如果您在AWS上,可以将EC2设置为自动执行。