Вопрос об обновлениях простоя сайтов - PullRequest
2 голосов
/ 30 июня 2011

У меня есть сервер, когда я запускаю приложение Django, но у меня есть небольшая проблема:

, когда с помощью Mercurial я фиксирую и отправляю новые изменения на сервер, есть микро время (например, 1 мкс)где домашняя страница недоступна.

У меня есть apache на сервере.

Как я могу решить эту проблему?

Ответы [ 5 ]

4 голосов
/ 30 июня 2011

Вы могли бы запускать несколько экземпляров приложения django (либо на одной машине с разными портами, либо на разных машинах) и использовать apache для обращения запросов прокси к каждому экземпляру. Он может переключаться на экземпляр B, пока экземпляр A перезагружается. См. mod_proxy .

Если время простоя такое короткое, как вы говорите, вряд ли стоит об этом беспокоиться.

Также обратите внимание, что, вероятно, будут лучшие (и более простые) прокси, чем Apache. Nginx популярен, как и HAProxy .

1 голос
/ 30 июня 2011

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

0 голосов
/ 30 июня 2011

Если вы собираетесь жаловаться на отключение в 1/1000.000 секунды, то я предлагаю следующий подход:

Внешние балансировщики нагрузки, указывающие на несколько внутренних серверов.

Удалите один внутренний сервер из loadbalancer, чтобы трафик на него не шел.

Подождите, пока весь трафик, который обрабатывал сервер, был отправлен.

Завершите работу веб-сервера в этом экземпляре.

Обновите экземпляр django на этом компьютере.

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

Повторите для всех остальных серверов.

Это обеспечит удаление 1/1 000 000-й доли секунды

0 голосов
/ 30 июня 2011

При использовании apachectl graceful вы минимизируете время, когда веб-сайт недоступен при «перезапуске» Apache. Всех детей просят перезапустить и получить новую конфигурацию, когда они ничего не делают.

Сигнал USR1 или изящный заставляет родительский процесс посоветовать детям выйти после их текущего запроса (или немедленно выйти, если они ничего не обслуживают). Родитель перечитывает свои файлы конфигурации и заново открывает файлы журналов. Когда умирает каждый дочерний элемент, родитель заменяет его на дочерний элемент конфигурации нового поколения, который немедленно начинает обслуживать новые запросы.

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

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

0 голосов
/ 30 июня 2011

я думаю, что это нормально, поскольку django может понадобиться перезапустить свой сервер после вашего обновления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...