Развертывание deepstream.io за nginx
У нас есть аутентификация kerberos на уровне nginx, и мы хотим подключиться к экземплярам deepstream.io в качестве обратного прокси-сервера. Из моего прочтения документации видно, что размещение веб-сервера перед экземплярами deepstream.io снизит производительность. Кроме того, возникает вопрос о том, кто выполняет балансировку нагрузки - обычно это происходит на уровне nginx, но deepstream.io, похоже, обладает встроенными возможностями, чтобы запрашивать другие экземпляры для обработки нагрузки (посредством обмена сообщениями).
Каков наилучший способ, чтобы экземпляры deepstream.io хорошо играли с веб-сервером? Нетривиально заново реализовать аутентификацию kerberos в Node.
1 ответ
Возможно (и это хорошая идея) развернуть и сбалансировать нагрузку за Nginx, HAProxy и т. Д. Однако следует помнить о нескольких вещах:
engine.io, websockets и липкие сессии.
Deepstream использует engine.io (транспортный уровень за http://socket.io/) для подключения к браузерам.
engine.io использует несколько различных транспортных механизмов, в частности, длинный опрос (при сохранении http-запроса открытым до отправки данных) и WebSockets.
Для длительного опроса очень важно, чтобы все запросы от одного и того же клиента направлялись на один и тот же глубокий сервер, поэтому убедитесь, что в исходной группе nginx включены липкие / постоянные сеансы (просто добавьте директиву ip_hash). Для веб-сокета важно, чтобы заголовки обновлений http передавались.
синхронизировать данные / сообщения между вашими глубокими узлами
Убедитесь, что ваши глубокие узлы связаны друг с другом, как кешем, так и шиной сообщений. У вас есть выбор кешей и систем обмена сообщениями, но самое простое - просто использовать Redis для обоих. Взгляните на раздел "Какая простейшая готовая к работе установка?" внизу https://deepstream.io/tutorials/connectors-and-deployment.html.
Соединения TCP от других клиентов (например, NodeJS) engine.io в основном используется для клиентов браузера, внутренние процессы могут напрямую подключаться через TCP. TCP-соединения с балансировкой нагрузки вполне возможны с NginX, но в вашей конфигурации требуется дополнительная группа потоков.