Плавный Перезапуск Процессов Fastcgi — Django_Graceful

Из всех способов развертывания проектов Django мой любимый — FastCGI. Он поддерживается большинством веб-серверов, позволяет четко разграничивать права доступа и имеет множество других преимуществ.

Однако реализация django не лишена недостатков.

Чтобы запустить сервер FastCGI, вам необходимо запустить «.

/manage.py runfcgi» с немалым количеством параметров, которые, даже если вы их помните, вам точно не захочется каждый раз прописывать их вручную.

А если это происходит в контексте обновления кода проекта на рабочем сервере, то команд становится еще больше.

Приходится писать различные обертки для запуска и перезапуска, которые засоряют проект. Кстати, перезагрузка, которую мы выполняем для обновления кода, связана с другой проблемой.

Django не обеспечивает плавный перезапуск сервера FastCGI. Вы можете только убить старый процесс и затем запустить новый.

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

.

Приходится придумывать разные хитрости и усложнять скрипты-обертки.

Из одного из этих скриптов выросло достаточно универсальное приложение django_graceful, решающее все эти проблемы.

Идея проста: настройки FastCGI хранятся в файле settings.py, а для управления процессами FastCGI используются простые команды из Manage.py. Эти команды поддерживают несколько параллельно работающих экземпляров сервера FastCGI и позволяют переключать веб-сервер между ними с помощью символической ссылки на файл unix-сокета, то есть без перезапуска веб-сервера.

Именно это обстоятельство позволяет нам проделать такой трюк: когда нам нужно обновить код, мы одной командой перезапускаем процесс FastCGI, к которому веб-сервер в данный момент не обращается, а затем, когда он снова будет готов обслуживать запросы, переключаем символическая ссылка на него.

Клиенты, подключавшиеся до переключения, продолжают обслуживаться первым сервером FastCGI, а новые — вторым.

Для этого действия вам даже не нужны права администратора сервера.

Тесты показали, что перебоев в обслуживании не будет даже при очень плотном потоке запросов.

Кстати, приложение впервые использовалось на проекте о зарубежной недвижимости.

Транио.

Ру и до сих пор там прекрасно работает.



Как его установить?

  1. Само приложение можно загрузить и установить с помощью команды easy_install django_graceful.
  2. Затем имя приложения «django_graceful» необходимо добавить в список INSTALLED_APPS вашего проекта.

  3. В файл settings.py нужно добавить еще одну опцию — GRACEFUL_STATEDIR. Он должен содержать абсолютный путь к папке, в которой будут храниться файлы .

    pid и .

    socket процессов FastCGI.

  4. Вы также можете добавить словарь GRACEFUL_OPTIONS в settings.py, указав в нем дополнительные параметры для команды «.

    /manage.py runfcgi».

  5. В папке GRACEFUL_STATEDIR будет создана символическая ссылка «fastcgi.socket», путь к которой необходимо указать в конфигурации веб-сервера.

    Например, «FastCGI_pass unix:/home/web/project/var/run/fastcgi.socket» в nginx.



Как использовать

Перечислим типичные задачи, которые упрощает django_graceful.

Первоначальный запуск и поддержка сервера FastCGI в работающем состоянии:
.

/manage.py keepalive — это команда, которая проверяет, запущен ли хотя бы один процесс FastCGI и указывает ли на него ссылка.

Если ни один процесс не запущен, запускается первый.

Если ссылка указывает на неработающий процесс, команда переключает ее на сокет работающего процесса.

В противном случае это ничего не делает. Мне нравится добавлять эту команду в crontab, чтобы она запускалась раз в минуту.

Он поднимет FastCGI после неожиданного сбоя или незапланированной перезагрузки сервера.



Плавный перезапуск FastCGI после обновления кода:
.

/manage.py update — это команда, которая выполняет описанный выше трюк, перезапуская неактивный процесс FastCGI и устанавливая ссылку на него.



Полный список команд

  • start – запускает выбранные процессы;
  • стоп – останавливает выбранные процессы;
  • переключатель — переключает символическую ссылку на указанный процесс;
  • Keepalive — проверяет, есть ли хотя бы один запущенный и активный процесс;
  • перезапуск – перезапускает указанные процессы;
  • статус – показывает статусы процессов;
  • update – перезапускает неактивный процесс и устанавливает на него ссылку;
Вот и все! Это приложение живет по адресу github.com/andreiko/django_graceful Удобное развертывание и высокое время безотказной работы :) Теги: #django #fastcgi #Nginx #deployment #django
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.