Сколько контейнеров Docker я должен запустить - PullRequest
1 голос
/ 08 октября 2019

В руководствах по Docker часто говорится, что я могу запустить больше контейнеров, чтобы увеличить доступность моего веб-приложения. Тем не менее, это очень широкое утверждение, и оно не объясняет, сколько контейнеров я должен фактически запустить в разных ситуациях. Как узнать, нужно ли мне 1, 5, 10, 100 или 1000 экземпляров контейнера?

Пример - у меня всего один сервер, и я запускаю nginx и php-fpm с докером. Один контейнер для каждого из них. С этой простой настройкой мое веб-приложение работает и кажется отзывчивым. Получу ли я какую-либо выгоду от раскрутки дополнительных реплик php-fpm (на том же сервере)? Скажем, один контейнер для nginx и 10 контейнеров для php-fpm.

Насколько я понимаю, 10 контейнеров php-fpm просто делят количество доступных вычислительных ресурсов между ними. Поэтому у меня может быть один контейнер с большим количеством ресурсов или 10 контейнеров с меньшим количеством ресурсов. Что лучше и почему?

Ответы [ 3 ]

0 голосов
/ 08 октября 2019

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

С другой стороны, запуск 2 реплик намного сложнее, чем запуск 1;запуск 3 или 10 не намного сложнее, чем запуск 2. Поэтому я бы посоветовал:

  • Если запуск только 1 реплики работает в соответствии с потребностями трафика и доступности, просто запустите 1 реплику.
  • Если вы работаете в среде, такой как Kubernetes, которая обеспечивает балансировку нагрузки и обновления без простоев как часть среды, запустите 2 или 3 реплики;не переусердствуйте, но вы получаете некоторую отказоустойчивость, если одна копия выходит из строя, если есть другая, запущенная для переключения при сбое.
  • Запустите наименьшее количество реплик, необходимых для удовлетворения ваших требований времени отклика.
0 голосов
/ 08 октября 2019

Есть плюсы и минусы для обоих случаев.

Если вы используете 1 Pod своего приложения с большим количеством ресурсов, у вас есть 1 точка отказа. Если ваш стручок умрет (и однажды он умрет);например, во время непрерывного обновления у вас будет небольшое время простоя.

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

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

0 голосов
/ 08 октября 2019

Как узнать, нужно ли мне 1, 5, 10, 100 или 1000 экземпляров контейнера?

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

Но нельзя просто ответить на этот вопрос без надлежащего теста нагрузки .

Таким образом, у меня может быть один контейнер с большим количеством ресурсов или 10 контейнеров с меньшим количеством ресурсов. Что лучше и почему?

Многие поставщики облачных услуг рекомендуют один контейнер с меньшим количеством ресурсов, поскольку AWS рекомендует иметь от 300 до 500 МБ памяти, чтобы можно было запускать несколько контейнеров в одном экземпляре.

определяет жесткие и / или мягкие ограничения памяти в МиБ для вашего контейнера. Жесткие и мягкие пределы соответствуют параметрам memory и memoryReservation, соответственно, в определениях задач. ECS рекомендует 300-500 МБ в качестве отправной точки для веб-приложений.

...