Docker -compose - Какова цель -scale на одной главной машине? - PullRequest
1 голос
/ 17 июня 2020

У меня есть простая служба python application web со службой nginx, выступающей в качестве обратного прокси для нее.

Я заметил, что docker -compose имеет параметр -scale, который, я думаю, суть в том, чтобы установить перед ним балансировщик нагрузки, верно?

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

Насколько я понимаю, docker -compose не управляет инкрементными обновлениями, когда вы up или что-то в этом роде, он просто будет обновить все реплики.

Предполагается, что приложение python идеально асинхронно и / или уже имеет несколько рабочих процессов внутри своего контейнера.

1 Ответ

1 голос
/ 17 июня 2020

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

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

Даже если ваше приложение Python является «идеально асинхронным», вы все равно будете страдать от загрузки ЦП только на одно ядро ​​из-за GIL (предположим, вы используете cpython), поэтому масштабирование ваших контейнеров по-прежнему дает преимущество.

...