Эффективное использование нескольких контейнеров докеров на одном хосте

У меня есть физический сервер, на котором запущены Nginx, MySQL и который обслуживает мой веб-сайт PHP. Сервер имеет многоядерный процессор с 16 ГБ оперативной памяти. Этот сервер может обрабатывать определенный объем веб-трафика.

Теперь вместо этого одного сервера, если я запущу несколько контейнеров докеров с отдельными экземплярами Nginx (сервер приложений) и MySQL (сервер БД) и сбалансирую нагрузку между контейнерами приложения и базы данных, сможет ли он обрабатывать такое же количество трафик, так как его обрабатывал один сервер, или он был бы меньше (с точки зрения производительности)?

Как изменится производительность, если вместо физического сервера я буду использовать виртуальный сервер, такой как EC2 или Digital Ocean Leaflet, с той же конфигурацией оборудования?


person Gowtham Sadasivam    schedule 14.10.2014    source источник


Ответы (2)


Поскольку все процессы выполняются на собственном хосте (вы можете запустить ps aux на хосте вне контейнера и увидеть их). Накладных расходов должно быть очень мало. Записи сетевых мостов и IP-таблиц для пересылки пакетов на виртуальный хост добавят некоторую нагрузку на ЦП, но я не могу себе представить, что это слишком обременительно.

person Usman Ismail    schedule 14.10.2014
comment
Я так понял, что накладных расходов будет меньше. Но мой вопрос касается переоценки производительности/обработки трафика сервера. Сможет ли контейнерный сервер обработать тот же объем трафика, что и отдельный сервер? На одном сервере будет работать один экземпляр Nginx и MySQL, и он будет обслуживать мой PHP-сайт. Контейнерный сервер будет иметь несколько запущенных экземпляров контейнеров Nginx и MySQL и балансировать нагрузку между ними. Оба сервера будут иметь одинаковую аппаратную конфигурацию. Какой сервер может эффективно обслуживать трафик? - person Gowtham Sadasivam; 14.10.2014
comment
Да, производительность будет такой же. Будет использоваться незначительное количество дополнительного ЦП, иначе нет ничего другого, кроме запуска этих процессов без контейнеров. - person Usman Ismail; 14.10.2014
comment
Мне интересно, если производительность контейнерного сервера и неконтейнерного сервера одинакова, какова цель использования Docker/контейнеров в производстве? Зачем нам нужны такие продукты, как CoreOS? - person Gowtham Sadasivam; 15.10.2014
comment
На их веб-сайте CoreOS разработан для обеспечения безопасности, согласованности и надежности. Обратите внимание, что прирост производительности не упоминается. Цель Docker — предоставить изолированные среды для повторяемых приложений. Таким образом, если одна служба будет скомпрометирована, остальные на хосте будут в безопасности. Кроме того, управление зависимостями становится проще, т. е. вы можете быть уверены, что не сломаете одну службу, потому что обновили зависимость для другой. - person Usman Ismail; 15.10.2014
comment
Это имеет смысл. Спасибо вам за помощь :) - person Gowtham Sadasivam; 16.10.2014

Если вопрос заключается в нескольких nginx + 1 mysql по сравнению с несколькими контейнерами с каждым nginx + mysql, вероятно, с точки зрения производительности было бы лучше не использовать контейнеры, главным образом потому, что mysql и сколько памяти может иметь, если это один экземпляр по сравнению с несколькими отдельными экземплярами. В любом случае вы можете иметь nginx в отдельных контейнерах, но использовать один центральный mysql для всех сайтов, в контейнере или нет.

person gmuslera    schedule 15.10.2014
comment
Я думаю, что в этом суть вопроса: какова цена гибкости (наличие независимого и полного набора контейнеров для каждого приложения на одном хосте, который можно легко перемещать) с точки зрения производительности (запуск нескольких экземпляров одного и того же серверного программного обеспечения, например MySQL, Nginx). Любой опыт будет оценен. - person Bachi; 26.03.2015