В чем преимущество использования Redis PubSub вместо непосредственного взаимодействия внутренних серверов? - PullRequest
0 голосов
/ 09 ноября 2019

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

  1. Пользователь отправляет POST-запрос со своим сообщением на подключенный сервер
  2. Сервер публикует это сообщение в канале наобщий экземпляр Redis
  3. Все серверы, которые подписаны на этот канал, уведомляются об этом сообщении
  4. Каждый уведомленный сервер проверяет хранилище данных Redis, для которого пользователи подключены к этому каналу
  5. Они получают это сообщение, а затем передают его всем подключенным клиентам, которыми они делятся, с результатами из шага 4

Однако, разве это не создает единую точку отказа и чрезмерно облагает налогом единственное Redisсервер? Похоже, что это по сути не масштабируемое решение.

Моя первая мысль, когда я столкнулся с этой проблемой, заключалась в том, чтобы иметь своего рода широковещательное решение. То есть что-то вроде этого:

  1. Пользователь отправляет POST-запрос со своим сообщением на свой подключенный сервер
  2. Этот сервер пересылает это сообщение всем остальным серверам на сервере
  3. Каждый сервер имеет хэш-карту от channel name до user list
  4. Сервер при получении сообщения проверяет, для какого канала он предназначен
  5. Затем сервер ищет, чтоchannel в его hashmap и перенаправляет его всем клиентам в этом списке пользователей

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

Однако я могудействительно ли что-нибудь узнаете о последнем решении в Интернете, кроме того, что я считаю, что оно называется решением для вещания и используется IRC, я полагаю?

Мне любопытно, почему все статьи рекомендуют паб/ Подрешение по сравнению с более широковещательным решением без сохранения состояния. Чего мне не хватает?

...