Балансировщик нагрузки Aws для событий, отправленных сервером, или веб-сокетов

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

Какие варианты у меня есть для горизонтального масштабирования долгоживущих соединений?


person ajaxon    schedule 29.01.2019    source источник


Ответы (2)


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

HAProxy (High Availability Proxy) позволяет это:

backend bk_myapp
 cookie MyAPP insert indirect nocache
 balance leastconn
 server srv1 10.0.0.1:80 check cookie srv1
 server srv2 10.0.0.2:80 check cookie srv2

Если вам нужна функциональность ELB и вы хотите настроить ее вручную, взгляните на этот руководство.

Вы также можете убедиться, что классическая «липкая сессия» AWS ELB конфигурация или более новая Опция ALB "закрепленная сессия" не соответствует вашим потребностям. ELB обычно отправляет соединение на вышестоящий сервер с наименьшей «нагрузкой», и в сочетании с липкими сессиями может быть достаточно.

person adamrights    schedule 23.02.2019
comment
Да я посмотрю на это. Прилепленные сеансы работают нормально, и я использую Redis для обмена состоянием между узлами. Статья о конфигурации посвящена классическому балансировщику нагрузки, который я собирался удалить из aws. - person ajaxon; 24.02.2019
comment
Это работает с классическим балансировщиком нагрузки, однако теперь события закрытия от клиента не доходят до серверной части. - person ajaxon; 02.03.2019

Поскольку вы используете AWS, я бы рекомендовал Elastic Beanstalk для развертывания вашего приложения Node.js. Официальная документация содержит хорошие примеры, такие как этот. Обратите внимание, что Beanstalk автоматически создаст Elastic Load Balancer. для вас, что вы ищете.

По умолчанию Elastic Beanstalk создает Application Load Balancer для вашей среды, когда вы включаете балансировку нагрузки с помощью консоли Elastic Beanstalk или интерфейса командной строки EB. Он настраивает балансировщик нагрузки на прослушивание HTTP-трафика на порту 80 и перенаправление этого трафика экземплярам на том же порту.

[...]

Примечание. Для создания Application Load Balancer ваша среда должна находиться в облаке VPC с подсетями как минимум в двух зонах доступности. Все новые учетные записи AWS включают VPC по умолчанию, соответствующие этому требованию. Если ваша среда находится в облаке VPC с подсетями только в одной зоне доступности, по умолчанию используется классический балансировщик нагрузки. Если у вас нет подсетей, вы не можете включить балансировку нагрузки.

Обратите внимание, что конфигурация правильного пути проверки работоспособности является ключом к правильной балансировке запросов, как вы упомянули в своем вопросе.

В среде с балансировкой нагрузки Elastic Load Balancing отправляет запрос каждому экземпляру в среде каждые 10 секунд, чтобы подтвердить работоспособность экземпляров. По умолчанию балансировщик нагрузки настроен на открытие TCP-соединения через порт 80. Если экземпляр подтверждает соединение, он считается работоспособным.

Вы можете переопределить этот параметр, указав существующий ресурс в своем приложении. Если указать путь, например /health, URL-адрес проверки работоспособности будет иметь значение HTTP:80/health. URL-адрес проверки работоспособности должен быть установлен на путь, который всегда обслуживается вашим приложением. Если для него задана статическая страница, которая обслуживается или кэшируется веб-сервером перед вашим приложением, проверки работоспособности не выявят проблем с сервером приложений или веб-контейнером.

РЕДАКТИРОВАТЬ: Если вы ищете липкие сеансы, как я описал в комментариях, выполните шаги, указанные в это руководство:

Чтобы включить закрепленные сеансы с помощью консоли

  1. Откройте консоль Amazon EC2 по адресу https://console.aws.amazon.com/ec2/.

  2. На панели навигации в разделе БАЛАНСИРОВКА НАГРУЗКИ выберите Целевые группы.

  3. Выберите целевую группу.

  4. На вкладке Описание выберите Изменить атрибуты.

  5. На странице Изменить атрибуты выполните следующие действия.

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

б. Для продолжительности закрепления укажите значение от 1 секунды до 7 дней.

в. Выберите Сохранить.

person Fabio Manzano    schedule 22.02.2019