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

Как динамически масштабировать рой докеров

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

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

Кто-нибудь может подсказать, как это сделать.

Ты можешь использовать Монитор потока докеров. Стек для достижения автоматического масштабирования с помощью Docker Swarm включает:

Prometheus: обрабатывает метрики и запускает оповещения при достижении определенных пороговых значений. Docker Flow Monitor: он расширяет Prometheus возможностью автоматической настройки.

Alertmanager: получает предупреждения от Prometheus и перенаправляет их в другие службы в зависимости от совпадающих маршрутов.

Дженкинс: выполняет запланированные или запускаемые задания. Мы будем использовать его в качестве движка для масштабирования сервиса.

Прокси-сервер Docker Flow: он расширяет HAProxy возможностью автоматической настройки.

Docker Flow Swarm Listener: слушает события Swarm и отправляет уведомления при создании или обновлении службы. Мы будем использовать его для отправки уведомлений в Docker Flow Monitor и Docker Flow Proxy.

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

Однако в этом случае было бы лучше исправить микросервис, чтобы он мог обрабатывать несколько одновременных сеансов.

AFAIK, Docker Swarm не предлагает автоматического и динамического масштабирования на основе использования ресурсов. Распространенной сегодня темой является использование Kubernetes (K8s) или других платформ оркестровки контейнеров, чтобы сделать это за вас. При этом вы все равно можете написать собственный сценарий или приложение, которое активно отслеживает использование ваших контейнеров и выдает команды вашему рою, но это не стабильное и не эффективное решение.

Это также зависит от того, где вы используете свои контейнеры. Если он находится в облаке (в зависимости от поставщика), все они предлагают управляемые услуги для контейнеров или, что еще лучше, у них также есть решение K8s. У K8s есть некоторая кривая обучения, но именно так сейчас обрабатываются контейнеры. Если вы запускаете их на одном компьютере или на голом железе, существуют фреймворки, использующие K8, такие как minikube.