Приложение зависит от нескольких факторов:
- Ядро
- ядра ресурсов (файловых кэшей, сетевые буферы и т.д.)
- кода прикладной программы (в том числе загруженных библиотек)
- Статические данные прикладной программы
- Данные эксплуатационного применения (просмотры WordPress, записи пользователей и т. Д.)
Все контейнеры докеров имеют одно и то же ядро, поэтому все экземпляры используются повторно. Драйвер хранилища AUFS позволяет обмениваться загруженным кодом приложения, чтобы он также загружался один раз для всех контейнеров.
Данные об использовании, как статические, так и действующие, никогда не распространяются между контейнерами. Таким образом, вы увеличиваете этот размер на 500.
Ресурсы ядра и данные эксплуатационных приложений никогда не распространяются ни на один из сценариев. Если пользователь запрашивает страницу из blogA и blogB, эта страница будет создана и отправлена пользователю независимо от того, что.
В вашем случае, скорее всего, один процесс nginx с 500 виртуальными хостами будет иметь меньший объем памяти. Насколько сложно рассказать, зависит от того, насколько заняты блоги, сколько сетевой буферизации нужно сделать, есть ли у вас база данных и сервер memcache. Единственный верный способ рассказать - это настроить и наблюдать.
Однако с контейнерами у вас может быть несколько ящиков, поэтому, когда ситуация становится плотной, вы можете просто перемещать один контейнер в отдельную коробку, не затрагивая остальных ваших пользователей, также вы можете делать больше экземпляров определенного блога, если он получает очень заняты и распространены экземпляры в нескольких ящиках. Посмотрите на такие вещи, как Docker-Swarm.
Еще одно преимущество контейнеров в том, что вы можете иметь очень простую конфигурацию для отдельного nginx вместо монстра с 500 виртуальными хостами.
Да, спасибо за ваш ответ. Идея перемещать контейнеры интересна, и мне было интересно, как трудно это работать, чтобы периодически загружать уровень? Возможно, что выравнивание нагрузки фактически выполняется балансировщиком нагрузки? –