Я ищу систему для создания приложения живых сокетов через sockets.io, и это можно сбалансировать без проблем.
Существует множество решений для балансировки нагрузки между несколькими экземплярами сокетов, например SocketCluster, но проблема, с которой я сталкиваюсь, заключается в том, что когда балансировщик нагрузки решает, что вместо 10 экземпляров мне нужно 8 экземпляров, и закрывает 2 из них, как я могу сохранить соединения сокетов этих экземпляров?
Пытаясь объяснить это лучше, у меня есть стриминговая компания, которая транслирует события почти все выходные, но ничего между ними. Если я использую Amazon EC2, у меня будет только 1 экземпляр за то время, когда подключено почти 0 пользователей, но в выходные Amazon запустит несколько экземпляров, когда событие начнет потоковую передачу, и направит каждое подключение на другой сервер. Проблема, которую я вижу, заключается в том, что когда событие заканчивается и люди начинают выходить, балансировщик нагрузки начинает закрывать экземпляры, а люди, все еще подключенные к этим экземплярам, начинают терять соединение с чатом. Я знаю, что могу преодолеть это, просто повторно подключив людей, но возможно, что они потеряют некоторые сообщения, пока они снова подключатся.
Есть ли система, которая перенаправит соединение на другой сервер и будет знать, что это был тот же пользователь, который был подключен к другому экземпляру, без повторного подключения?
Вы не можете поддерживать соединения с серверным процессом, который закрывается. Сокет - это соединение между двумя конкретными конечными точками. По соображениям безопасности вы не можете просто переназначить одну из конечных точек на новый сервер. Вместо этого вам придется разорвать сокет и позволить ему повторно подключиться (что socket.io сделает за вас автоматически), а затем перебалансировать его в новую конфигурацию при повторном подключении.