2015-02-17 5 views
2

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

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

Я думал о решении, но это не элегантно или довольно вообще:

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

ответ

1

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

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

Смежные вопросы