Как выполняется балансировка нагрузки в режиме Docker-Swarm

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

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

Однако мне нужна помощь в понимании следующего:

Скажем, у меня есть контейнер, который предоставляет сервис как REST API или скажет его веб-приложение. И если у меня есть несколько контейнеров (реплик), развернутых в рое, и у меня есть другие контейнеры (некоторые приложения), которые общаются с этой службой HTTP/REST.

Затем, когда я пишу те приложения, которые используют IP: PORT. Это какой-либо из рабочих node IP, выполняющих эти службы? Будет ли это делать так, чтобы распределять нагрузку надлежащим образом даже среди других рабочих/менеджеров, работающих с одной и той же услугой?

Или мне нужно позвонить менеджеру, который, в свою очередь, позаботится о маршрутизации (даже если менеджер node не имеет контейнера, на котором запущена эта конкретная служба)?

Спасибо.

Ответ 1

когда я пишу те приложения, которые используют IP: PORT? Это любой рабочего node IP, выполняющего эти службы?

Вы можете использовать любой node, который участвует в рое, даже если на этой странице node нет реплики данной службы. Таким образом, вы будете использовать комбинацию Node:HostPort. Входная сетка маршрутизации направит запрос в активный контейнер.

Одно изображение стоит десять тысяч слов

введите описание изображения здесь

Будет ли это делать так, чтобы распределение нагрузки было равномерно среди других рабочих/менеджеров, выполняющих ту же службу?

По умолчанию входной контроллер выполнит циклический роутинг.

Теперь клиенты должны использовать dns round robin для доступа к службе на узлах роевых докеров. Будет возникать проблема с классическим DNS-кешем. Чтобы избежать этого, мы можем использовать внешний балансировщик нагрузки, например HAproxy.

введите описание изображения здесь