Обрабатывать сервер подписчика в автономном режиме с помощью redis pubsub?

В настоящее время я создаю горизонтально масштабируемый сервер socket.io, который выглядит следующим образом:

                 LoadBalancer (nginx)

      Proxy1      Proxy2      Proxy3      Proxy{N}

 BackEnd1   BackEnd2   BackEnd3   BackEnd4   BackEnd{N}

Если прокси-серверы используют липкий сеанс + кластер, каждый с сервером socket.io, работающим на ядре и балансирующим нагрузку с помощью прокси-сервера nginx.

Теперь к моему вопросу, эти серверные узлы используют redis pubsub для связи с прокси, которые обрабатывают всю связь через транспорт (веб-сокеты).

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


person Steve P    schedule 08.12.2015    source источник
comment
Вы нашли для этого приемлемое решение?   -  person khelll    schedule 03.06.2016


Ответы (1)


Pubsub не сохраняет сообщения. Вообще. Чтобы использовать Redis для этого, вам нужно будет вместо этого использовать очередь. Например, вы можете использовать комбинацию операций со списком, когда производитель помещает их в список, а ваш клиентский сервер использует BLPOP или BRPOP в зависимости от того, как вы их добавляете и хотите ли вы сообщения в последовательности FIFO или LIFO.

person The Real Bill    schedule 09.12.2015