Вопрос: Каковы хорошие стратегии для достижения нулевого (или максимально близкого к нулю) времени простоя при использовании Django?
В большинстве ответов, которые я читал, говорится «использовать юг» или «использовать ткань», но это очень расплывчатый ответ ИМХО. На самом деле я использую оба, и все еще задаюсь вопросом, как добиться нулевого времени простоя, насколько это возможно.
Некоторые подробности:
У меня есть приложение Django приличного размера, которое я размещаю на EC2. Я использую South для переноса схемы и данных, а также fabric с boto для автоматизации повторяющихся задач развертывания/резервного копирования, которые запускаются набором Jenkins (сервер непрерывной интеграции). База данных, которую я использую, представляет собой стандартный экземпляр PostgreSQL 9.0.
У меня есть...
Промежуточный сервер, который постоянно редактируется нашей командой со всем новым контентом и загружается последним и лучшим кодом и...
действующий сервер, на котором постоянно меняются учетные записи и пользовательские данные — все это записано в PostgreSQL.
Текущая стратегия развертывания:
При развертывании нового кода и контента создаются два моментальных снимка EC2 обоих серверов (действующий и промежуточный). Прямая трансляция переключается на страницу "Обновление нового контента"...
Начинается простой.
Сервер живого клонирования переносится на ту же версию схемы, что и промежуточный сервер (с использованием юга). Создается дамп только тех таблиц и последовательностей, которые я хочу сохранить в реальном времени (в частности, учетных записей пользователей вместе с их данными). Как только это будет сделано, дамп загружается на сервер промежуточного клонирования. Таблицы, которые были сохранены в реальном времени, усекаются, и данные вставляются. По мере роста данных на моем рабочем сервере это время, очевидно, продолжает увеличиваться.
После завершения загрузки эластичные ips живого сервера заменяются на промежуточный клон (и, таким образом, он становится новым живым сервером). Живой экземпляр и экземпляр живого клона завершаются.
Время простоя заканчивается.
Да, это работает, но по мере роста данных мое «виртуальное» нулевое время простоя становится все дальше и дальше. Конечно, мне пришло в голову каким-то образом использовать репликацию и начать изучать репликацию PostgreSQL и «в конечном счете согласованные» подходы. Я знаю, что есть некоторая магия, которую я мог бы сделать с балансировщиками нагрузки, но проблема с учетными записями, созданными в то же время, делает это сложным.
Что бы вы посоветовали мне посмотреть?
Обновление:
У меня есть типичное приложение Django с одним узлом. Я надеялся найти решение, которое будет более подробно решать специфические проблемы django. Например, идея использования поддержки Django для нескольких баз данных с пользовательскими маршрутизаторами наряду с репликацией. пришло мне в голову. Есть вопросы, связанные с тем, что, я надеюсь, коснется ответа.