Назад | Перейти на главную страницу

Как балансировать нагрузку на TCP-соединение на основе пользовательских пакетных данных, отличных от номера порта (перемещено из стека Network Engineer)

Сценарий

У меня есть 2 экземпляра службы, которые прослушивают TCP-соединения за балансировщиком нагрузки.

Когда служба 1 инициирует TCP-соединение с LB, случайным образом выбирается один экземпляр для обслуживания запроса. Затем служба 2 инициирует TCP-соединение с LB. LB must направить это соединение к экземпляру, который обрабатывает соединение службы 1.

Решение

Чтобы добиться этого, решение может быть следующим:

  1. После того, как служба 1 успешно подключилась к экземпляру 1, экземпляр 1 отправляет службе 1 свой идентификатор.
  2. Служба 1 отправляет идентификатор экземпляра 1 службе 2
  3. Сервис 2 initiates TCP connection to LB and send along that ID
  4. LB знает, как маршрутизировать TCP-соединение службы 2 с экземпляром 1 на основе идентификатора.

Но обычный балансировщик нагрузки L4 не имеет механизма route TCP traffic based on some custom message. Он маршрутизирует трафик только на основе номера порта.

Это означает, что я должен сам кодировать балансировщик нагрузки, чего я не хочу.

Вопрос

  1. Есть ли еще standard way к моей проблеме (т.е. с использованием nginx / haproxy ...), чем кодирование балансировщика нагрузки?