О новой версии uwsgiconf с поддержкой активации режима обслуживания через административную панель Django.
Хорошая новость для любителей uWSGI и Django. Вчера занёс в uwsgiconf возможность уводить приложение в режим обслуживания через административный интерфейс Джанго.

Для активации возможности в uwsgicfg.py добавляем:

    # Активируем поддержку режима обслуживания.
# uWSGI будет следить за файлом /tmp/maintain. Если он появится,
# то uWSGI перезагрузится и перейдёт в режим обслуживания.
# Если потом файл удалить, то, перезагрузившись, uWSGI выйдет из режима обслуживания.
section.configure_maintenance_mode(trigger='/tmp/maintain', response='app')

После этого в админке, в разделе «uwsgiconf — Обслуживание» можно нажать кнопку и uWSGI перезагрузится, а вместо вашего wsgi-приложения пользователям станет отвечать приложение-заглушка, говорящее, что сервис временно недоступен.

На заметку
Кстати, приложение-заглушку можно указать какое-нибудь своё, а можно использовать идущее в комплекте с uwsgiconf (как в примере выше).

Что нам даёт описываемый режим?

При помощи него, мы
  • не даём пользователям взаимодействовать с приложением, снимаем нагрузку с сервера;
  • деактивируем фоновые задания (таймеры, планировщик, сигналы), а значит и они в бд не будут лезть.

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

Ограничения:
  • Выйти из режима обслуживания через тот же веб-интерфейс по понятной причине нельзя. Для выхода потребуется каким-либо образом удалить файл режима (в примере это /tmp/maintain) из файловой системы.
  • Если у вас несколько бэкендов (например, за балансировщиком в нескольких датацентрах), то через админку Джанго придётся уводить в режим обслуживания каждый отдельно.

Приятного обслуживания.

Категории

Окружение
Проект

На заметку
У нас есть новостная группа в Telegram. Там же можно обсудить интересующие вопросы. Ссылка в самом низу страницы.