我正在为heroku上的实时聊天应用开发node.js后端。当我看到dynos以及扩展node.js后端的方法时,我可以看到dynos可以在http服务器上拥有的优势,因为每个dyno可以独立于其他dynos(在大多数情况下都可以)。 / p>
我的问题是:如何扩展和处理实时socket.io应用程序的负载平衡?从我所读的dynos开始,就是沙箱的容器:每个dyno都运行自己的进程,独立于其他dynos ..那么处理问题的最佳方法是什么?
我在想一个解决方案,但它根本不优雅或漂亮:
我可能有多个后台作业,其中包含可以检查该实例上连接的用户的新消息的crons。但我认为必须有更好的解决方案。
答案 0 :(得分:1)
这个问题可以推广到如何让多个节点进程共享数据,无论它们是在相同还是不同的服务器上。据我所知,传统观点是让所有进程使用公共数据库(Postgres,Mongo,Redis)读取和写入数据。只需根据您的需要使用正确的数据库。
另一个选项是MessengerJS,它允许进程间通信。我不知道这对你的应用程序是否是一个好主意,因为那时所有的dynos最终都会包含聊天数据的副本。然后由你决定确保所有动物都在同步和同步之间保持一致。我更倾向于将数据库作为单一事实来源。