2015-03-11 5 views
0

Я запускаю приложение чата, которое позволяет клиентам создавать комнаты с помощью websockets. Я хочу использовать балансировку эластичной нагрузки aws, но я не уверен, как убедиться, что два клиента, которые хотят общаться, попадают на один и тот же сервер. В частности избегая следующий сценарий:Как подключиться к определенному серверу за локтем?

  1. Клиента А создает комнату на сервере А (через балансировку нагрузки) и отправляет ссылку на клиент B.
  2. Client B подключается к линии связи, но получает направляется на сервер B за балансиром нагрузки.

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

+0

Зачем беспокоиться о балансировщике нагрузки в этом случае? Вы пытаетесь сделать что-то, что требует серверов с поддержкой состояния. – tedder42

ответ

1

Я разговаривал с некоторыми парнями из амазонки, и они сначала предложили использовать балансировщик нагрузки при создании чатов и получении IP-адреса сервера, где он был создан, и передать его клиенту B для непосредственного подключения к этому серверу. Это сработало отлично!

0

Невозможно сделать то, что вы хотите, только с помощью ELB. Невозможно убедиться, что 2 клиента попадают на один и тот же сервер.

Я вижу 2 варианта:

  • Создание общего состояния между узлом за УДР. Чат-чат будет виден на всех серверах, и вы должны убедиться, что каждое сообщение, отправленное в чат-комнату, отправляется всем экземплярам, ​​у которых клиент подключен к комнате.

  • Создайте службу управления и поиска в чате. Он будет отвечать за выбор сервера при создании комнаты и перенаправление пользователя, когда он захочет подключиться к комнате. Вы можете упростить его, разместив сервер в месте расположения чата и создав очень простую логическую клиентскую сторону для создания сервера, но это будет ограничивать правильную балансировку.

Для полной системы HA и масштабирования вам, вероятно, понадобятся оба.

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