В настоящее время я создаю горизонтально масштабируемый сервер socket.io, который выглядит следующим образом:
LoadBalancer (nginx)
Proxy1 Proxy2 Proxy3 Proxy{N}
BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N}
Если прокси-серверы используют липкий сеанс + кластер, каждый с сервером socket.io, работающим на ядре и балансирующим нагрузку с помощью прокси-сервера nginx.
Теперь к моему вопросу, эти серверные узлы используют redis pubsub для связи с прокси, которые обрабатывают всю связь через транспорт (веб-сокеты).
Когда запрос отправляется на внутренний сервер прокси-сервером, он знает пользователя, который его запросил, а также прокси-сервер, на котором находится пользователь. Я опасаюсь, что, когда прокси-сервер отключается по какой-либо причине, любой ожидающий запрос на моих внутренних узлах не сможет достичь пользователя, когда он вернется в онлайн, потому что сообщения были отправлены, когда сервер был в автономном режиме. Что я могу реализовать, чтобы обойти эту проблему и, по сути, поставить сообщения в очередь, когда любой прокси-сервер отключен, а затем доставить, когда он снова будет включен?