2

我正在为 heroku 上的实时聊天应用程序开发 node.js 后端。当我正在研究 dyno 和扩展 node.js 后端的方法时,我可以看到 dyno 在 http 服务器上的优势,因为每个 dyno 都可以独立于其他 dyno(这在大多数情况下都可以)。

我的问题是:如何扩展和处理实时 socket.io 应用程序的负载平衡?从我正在阅读的内容来看,测功机是“沙盒化”的容器:每个测功机都运行自己的进程,独立于其他测功机..那么处理问题的最佳方法是什么?

我正在考虑一个解决方案,但它一点也不优雅或漂亮:

我可以有多个后台作业,其中包含可以检查该实例上连接的用户的新消息的 crons。但我认为必须有更好的解决方案。

4

1 回答 1

1

这个问题可以概括为如何让多个节点进程共享数据,无论它们是在同一个服务器上还是在不同的服务器上。据我所知,传统观点是让所有进程使用一个通用数据库(Postgres、Mongo、Redis)来读写它们的数据。只需根据您的需要使用正确的数据库。

另一种选择是类似MessengerJS的东西,它允许进程间通信。我不知道这对您的应用程序是否是个好主意,因为这样您的所有测功机最终都会包含聊天数据的副本。然后由您来确保所有内容在测功机之间同步和一致。我更倾向于将数据库作为单一的事实来源。

于 2015-02-17T19:22:43.760 回答