Балансировка нагрузки роя Docker с использованием HTTP 503 - PullRequest
0 голосов
/ 03 октября 2019

Для проекта я хотел бы создать рой докеров с узлами / репликами с использованием графических процессоров.

Поскольку по умолчанию для балансировки нагрузки используется round robin (и согласно эта ссылка балансировка нагрузки выполняется на уровне TCP 4),

Я хотел бы знать, возможно ли информировать балансировщик об ответе HTTP 503 (служба недоступна)? что означает: если узел / реплика имеет слишком мало памяти GPU для этого запроса и, следовательно, отвечает HTTP 503, балансировщик должен передать запрос следующему узлу / реплике в цикле, пока он не будет принят (с любым ответом <500)</p>

Можно ли это сделать, и если нет, то есть ли способ создать подобное поведение?

1 Ответ

1 голос
/ 10 октября 2019

Вы можете попытаться определить свои службы как global, чтобы получить только одну работающую службу на узел.

Затем мы можем использовать traefik (или аналогичный балансировщик нагрузки) для настройки логики балансировки нагрузки:

  • настроить проверку работоспособности для вашего сервиса, чтобы отслеживать 503 ошибки
  • также вы можете рассмотреть возможность использования весов для более правильной балансировки нагрузки вашегоjobs

Существуют более «сложные» решения, такие как HAproxy , kong proxy или консул .

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

Другой вариант - реализовать логику прокси на языке, который вам удобен, для обработки 503 ошибок в запросах проксина другие узлы.

Я думаю, что логика очереди звучит более подходящей для случая, который вы описали (хотя и едва).

...