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