Имеют ли смысл несколько веб-динамо в приложении socket.io node.js в реальном времени?

Я разрабатываю бэкэнд для node.js для чата в реальном времени на сайте heroku. Поскольку я смотрю на dynos и способы масштабирования бэкэнда node.js, я вижу преимущество, которое dynos может иметь на http-серверах, потому что каждая dyno может быть независимой от других dynos (что подходит для большинства случаев).

Мой вопрос: как вы можете масштабировать и обрабатывать балансировку нагрузки приложений socket.io в реальном времени? Из того, что я читаю, dyno - это контейнеры, которые "помещаются в песочницу": каждый dyno запускает свой собственный процесс, независимый от других dynos... так, каков наилучший способ решения проблемы?

Я думал о решении, но оно не изящно или симпатично:

У меня может быть несколько фоновых заданий, содержащих кроны, которые могут проверять наличие новых сообщений для пользователей, подключенных к этому экземпляру... но я думаю, что должно быть лучшее решение.

1 ответ

Эта проблема может быть обобщена на том, как заставить процессы нескольких узлов совместно использовать данные, независимо от того, находятся ли они на одном или разных серверах. Насколько я видел, общепринятым считается, что все процессы читают и записывают свои данные, используя общую базу данных (Postgres, Mongo, Redis). Просто используйте правильную базу данных для ваших нужд.

Другим вариантом может быть что-то вроде MessengerJS, который обеспечивает межпроцессное взаимодействие. Я не знаю, является ли это хорошей идеей для вашего приложения, потому что тогда все ваши динамо будут содержать копию данных чата. Тогда вам нужно убедиться, что все синхронизировано и согласовано между динамо. Я был бы более склонен иметь БД в качестве единственного источника правды.

Другие вопросы по тегам