Подтвердить что ты не робот

Стратегия внедрения масштабируемого чат-сервера

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

Клиенты конечного пользователя являются веб-или телефонным клиентом. Я думаю, что какая-то реализация websocket, такая как Socket.IO, хороша.

На стороне сервера я хочу использовать Node.js. Я хочу, чтобы архитектура была масштабируемой, чтобы количество пользователей не было ограничено (ну, в разумных пределах, шансов на большой успех не ожидается, и если это так, вероятность умных, опытных людей работать над ним разумно вместо того, чтобы в настоящее время меня просто кодировать). Количество пользователей в чате, надеюсь, не ограничено, или, может быть, какое-то фиксированное большое количество. И это означает, что мне нужно масштабировать горизонтально, используя несколько серверов, написанных в Node.

Предположим, что некоторый балансировщик нагрузки (и, надеюсь, в будущем не будет единственной точкой отказа, но я не знаю, как бы я это сделал или, возможно, просто перешел на AWS), отправляет соединения SocketIO от конечных клиентов в чат сервера. Разные подключения пользователей к различным серверам могут находиться в одной комнате, поэтому сообщения должны быть отправлены на другие серверы.

Как я могу реализовать что-то подобное? Надеюсь, не слишком сложно.

Вопросы: (1) Если все серверы должны обрабатывать все сообщения, так как пользователи могут быть зарегистрированы на любом из серверов, делает ли это масштаб? (2) Нужна ли мне какая-то очередь сообщений, чтобы серверы могли говорить между ними? Может ли Pub-sub использовать Rabbitmq для этого? Или, если zeromq, как я буду масштабировать с pub sub? В руководстве Zeromq есть объяснения масштабирования более чем одного сервера с использованием типов REQ/REP. Но не Pub Sub. (3) Или мне нужно начинать с XMPP?

Я надеюсь, что он будет работать как можно проще.

4b9b3361

Ответ 1

Там есть довольно хорошее объяснение на сайте Socket.io. Посмотрите

В нем предлагается использовать Nginx как балансировщик нагрузки HTTP, кластер Node.js(с липкими сеансами) и Redis в качестве бэкэнда сообщений.

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