Быстрый И Автоматический Запуск Django На Iis 7.X В Производственной Среде (+ Тесты Производительности)

Django — популярный фреймворк для создания веб-приложений на Python. Его популярность постоянно растет благодаря наличию инструментов быстрой разработки, встроенному административному интерфейсу и высокой скорости работы.

Существует простой и надежный способ развертывания и запуска приложений Django на веб-сервере IIS с помощью Установщик веб-платформы и репозиторий пакетов Helicon Zoo. Helicon Zoo — хранилище популярных веб-фреймворков и приложений для Microsoft IIS. Для развертывания приложений он использует технологии Microsoft Web Platform Installer (WebPI).

С их помощью обрабатываются различные зависимости и происходит процесс установки необходимых компонентов, таких как Python, Django, различных драйверов и модулей баз данных.

Ну и сам модуль Helicon Zoo, который склеивает всё это дело с MS IIS 7.



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

В веб-разработке существует две достаточно независимые среды — разработка и производство.

Helicon Zoo можно использовать как в производстве, так и на машине разработки, или и то, и другое одновременно.

В любом случае последовательность действий примерно такая: Сначала вам необходимо скачать и установить установщик веб-платформы с сайта Microsoft - ( http://www.microsoft.com/web/downloads/platform.aspx ).

WebPI уже содержит большое количество фреймворков и приложений для IIS, таких как PHP, ASP.NET, Wordpress, Drupal, phpBB. Для подключения Helicon Zoo необходимо добавить новый фид в WebPI:

  • Запустите WebPI и нажмите «Option».



    Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

  • В поле «Отобразить дополнительные сценарии» вставьте http://www.helicontech.com/zoo/feed и нажмите Добавить канал

    Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

Теперь, если в интерфейсе WebPI выбрать Приложения, Инструменты, то в конце списка можно увидеть новые приложения: Blank Django Project, Blank Rails Project, Blank Perl Project, Blank Mojolicious Project:

Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

Пустой проект Django — это простой «Привет, мир!» приложение, которое используется для установки всех зависимостей, необходимых для запуска приложения Django и, по сути, пустого проекта Django. Для установки нажмите «Добавить» и «Установить», появится форма со списком зависимостей:

Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

Чтобы принять лицензии и начать загрузку и установку, нажмите «Я принимаю».

После установки и скачивания всех зависимостей установленный проект можно запустить, нажав «Запустить приложение в браузере»:

Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

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

Теперь, если это машина для разработки, вы можете начать разработку с этого пустого приложения «Hello Worls».

После того, как вы что-то сделаете с этим приложением, вы можете загрузить его на рабочий сервер со всеми файлами, каталогами, обязательно файлом web.config, и, если ранее на сервере был установлен Blank Django Project (не важно, какой каталог , вам нужны только зависимости), там приложение должно работать.

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

Это особенность Django (и Rails); для других платформ перезагрузка может не потребоваться.

При перезапуске миграция данных будет выполнена автоматически — Manage.py syncdb .

Это позволяет использовать решение на общих хостингах, где у пользователя нет доступа к консоли.



Под капотом

Ядром Helicon Zoo является нативный модуль IIS, который по сути играет роль моста между веб-сервером IIS и фреймворками на базе Ruby, Python, Perl и т.д. Модуль работает по протоколу FastCGI, который уже зарекомендовал себя как надежный и быстрый метод взаимодействия веб-приложений с веб-сервером.

Взаимодействие между ними происходит асинхронно, с использованием технологии I/O Completion Port. В качестве транспорта используются либо именованные каналы, либо TCP-сокеты.

Поддерживаются IIS 7, IIS 7.5 и IIS Express. Базовая конфигурация модуля Helicon Zoo находится в раздел файла applicationHost.config. В этом разделе описаны все движки FastCGI, которые будут работать с Zoo. Вот пример описания движка для запуска приложений Python wsgi (в частности приложений Django).

Zoofcgi.py — это исполнитель Python, реализующий транспортировку по именованным каналам:

  
  
  
   

<engine name="python.2.7.pipe" fullPath="c:\python27\python.exe" arguments="-O %SystemDrive%\Zoo\Workers\python\zoofcgi.py" transport="pipe" />



Веб.

конфигурация

Настройка веб-приложений, работающих через Zoo, осуществляется через файл web.config. Вот пример такого файла для настройки приложения Django для запуска в 32-битном пуле:

<Эxml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <heliconZoo> <application name="django.project.x86" > <environmentVariables> <add name="PYTHONPATH" value="%APPL_PHYSICAL_PATH%;%PYTHONPATH%" /> <add name="DJANGO_SETTINGS_MODULE" value="settings" /> <add name="DEPLOY_FILE" value="deploy.py" /> <add name="DEPLOY_LOG" value="log\deploy.log" /> </environmentVariables> </application> </heliconZoo> <handlers> <add name="django.project.x86" scriptProcessor="python.2.7.pipe" path="*" verb="*" modules="HeliconZoo_x86" preCondition="bitness32" resourceType="Unspecified" requireAccess="Script" /> </handlers> </system.webServer> </configuration>

Вот важные моменты:
  • scriptProcess="python.2.7.pipe" — ссылка на движок FastCGI, определенный в applicationHost.config;
  • переменная среды PYTHONPATH — путь, по которому Python ищет свои модули; в нашем случае мы добавляем путь к нашему приложению django в PYTHONPATH;
  • переменная среды DJANGO_SETTINGS_MODULE — путь Python к файлу конфигурации settings.py приложения Django, например, «mysite.settings»
  • переменная среды DEPLOY_FILE — путь к файлу внутри приложения, который будет запущен перед выполнением первого запроса к приложению после перезапуска приложения IIS. В этом файле нужно запустить, например, команды для синхронизации базы данных: 'manage.py syncdb –noinput';
  • переменная среды DEPLOY_LOG — путь внутри приложения к файлу, в который будут записываться выходные данные команды DEPLOY_FILE в целях отладки.

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



Статический контент
Фреймворк Django не подходит для быстрой и безопасной обработки статических файлов (изображений, скриптов, файлов стилей).

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

Для этого вам нужно поместить все статические файлы в каталог и отключить в нем обработчик запросов в приложении django:

<Эxml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <handlers> <remove name="django.project.x86" /> </handlers> </system.webServer> </configuration>



Пример проекта Django на IIS 7
Предположим, наш проект django состоит из трех приложений:
  • site - сам сайт с шаблонами, статикой, urls.py и settings.py
  • блог
  • магазин
Статические файлы, расположенные в site/media, будут доступны через виртуальный каталог /media/ (т. е.

MEDIA_URL='/media/').

Установив Blank Django Project в корень сайта и скопировав наш django-проект, мы получим следующую структуру каталогов:

Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

/media/ — виртуальный каталог, указывающий на сайт/носитель; у него отключен модуль Zoo, как описано выше.

В корневом файле web.config PYTHONPATH указывает на корень сайта, а для параметра DJANGO_SETTINGS_MODULE установлено значение site.settings:

.

<heliconZoo> <application name="django.project.x86" > <environmentVariables> <add name="PYTHONPATH" value="%APPL_PHYSICAL_PATH%" /> <add name="DJANGO_SETTINGS_MODULE" value="site.settings" /> </environmentVariables>



Производительность

И, наконец, самое интересное — тестирование производительности.

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

Тестовая машина в качестве сервера - Core 2 Quad 2,4 Ghz, 8 Gb RAM, гигабитная сеть.

Для формирования нагрузки использовался более мощный компьютер с Apache Benchmark. Ubuntu 11.04 Server x64 использовался для тестирования Apache и Nginx. Тесты IIS 7 проводились на Windows Server 2008 R2. Никаких виртуальных машин — честное железо.

В качестве транспорта на Nginx использовался самый продвинутый uwsgi, а также wsgi и fast_cgi для сравнения.

Они также сравнили IIS 7 с PyISAPI. Мы написали два небольших скрипта в качестве тестовых страниц.

Первый отображает текущее время с высоким разрешением — это сделано для того, чтобы страницы не извлекались из кеша.

Второй делает то же самое, но сначала сохраняет результат в базе данных.

Все это через шаблон для использования реальной инфраструктуры Django, база данных — MySQL. Настройки везде дефолтные, потому что.

Цель - протестировать наиболее типичные конфигурации.

Итак, результаты (в запросах в секунду):

Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

Здесь все более-менее понятно и стабильно.

Uwsgi впереди, видимо, за счёт более тесной интеграции с кодом Django — его придётся курить.

PyISAPIe сильно отстаёт, оно и понятно.



Быстрый и автоматический запуск Django на IIS 7.x в производственной среде (+ тесты производительности)

А вот с БД результат не такой стабильный.

Почему Nginx+fcgi+MySQL показал такие странные 175 запросов в секунду — непонятно.

Результат MySQL на Windows также удручает, хотя на шаред-хостинге проблема может быть не столь критичной.

Дело в том, что производительность падает в основном из-за какой-то внутренней блокировки в MySQL, при этом сам сервер практически не нагружается, пока генерирует эти 104 запроса.

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

Поэтому мы решили добавить в тесты MS SQL Express. Его результат тоже очевиден — все зависит от самого Python и драйверов баз данных для него, но в целом выглядит вполне прилично.

PyISAPIe с MS SQL Express не работал.

Отдельно хотелось бы отметить способность IIS 7 поддерживать большое количество соединений.

Так IIS 7 + Helicon Zoo легко выдержал тысячи одновременных подключений (нам просто нечего было больше генерировать), а Ubuntu с настройками по умолчанию быстро сдавалась по мере роста количества подключений.

А еще Apache оказался весьма требовательным к памяти.

Так вот, с увеличением количества подключений, Apache за 20 секунд теста съел около 3 ГБ памяти — дальше не проверяли.



выводы

Представленное решение показывает стабильную работу и достойную производительность.

Он полностью готов к использованию как в качестве среды разработки, так и в производстве.

Особенно важна возможность использовать Helicon Zoo различными хостинг-провайдерами Windows для предоставления услуг Django своим клиентам.

Хочется надеяться, что с ростом количества серверов Django на Windows его разработчики начнут уделять больше внимания отладке и оптимизации своего кода под платформу Windows. А армия существующих разработчиков Windows может стать хорошим подспорьем для текущих проектов с открытым исходным кодом.

Теги: #python #django #IIS #установщик веб-платформы #helicon Zoo

Вместе с данным постом часто просматривают:

Автор Статьи


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

Dima Manisha

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