Алексей Мичурин
Модули сервера Apache mod_python и mod_perl позволяют встроить
интерпретаторы языков Python и Perl непосредственно в сервер и значительно
увеличить производительность веб-приложений. Perl – старый и хорошо
зарекомендовавший себя игрок на этом рынке. Но в последние годы Python занял
уверенные позиции в области веб-разработок и привлекает всё большее внимание.
Что это такое и о чём статья
Прежде всего я хотел бы оговориться. Во-первых, статья не является
руководством по mod_perl или mod_python. Пожалуйста, не рассматривайте её с
этой точки зрения. Статья является обзором возможностей этих средств, причём
обзором с высоты птичьего полёта. Я буду всячески избегать углубления в детали
(хотя полностью избежать деталей, конечно, не удастся). И во-вторых, я ни в
коем случае не хочу разжигать религиозные войны поклонников тех или иных
языков. Полагаю, что культурные люди используют во время еды и ложку, и вилку в
зависимости от поданного блюда, а не спорят, какой из этих приборов лучше
подходит для ковыряния в ухе.
Эта статья будет особо информативна для
читателей, которые пользовались хотя бы одним из обсуждаемых средств или по
крайней мере представляют, что такое mod_perl или mod_python, но я всё же скажу
пару вводных слов об этих технологиях.
Веб-программирование служит одной цели:
формированию HTML- или XML-документов и обмену ими по протоколу HTTP. Чаще
всего речь идёт о формировании HTML-страниц, но не следует забывать о RSS, SOAP
и других способах обмена данными по HTTP.
Чтобы сформировать динамический контент, сервер
запускает некую программу, результат работы которой отдаётся посетителю веб-ресурса.
Эта программа может быть полноценной,
самостоятельной программой, которая запускается по требованию сервера и «умеет»
принимать данные от него и отдавать ему результат работы. Протокол этого обмена
называется Common Gateway Interface, а такую программу называют
cgi-приложением.
Такой подход очень прост в реализации, но крайне
неэффективен (по сравнению с другими), так как при каждом запросе выполняется
множество действий: загрузка программы в память, её интерпретация и так далее.
Полной противоположностью этого подхода (есть и
промежуточные) является встраивание языка программирования непосредственно в
сервер в виде модуля сервера. Тогда программа загружается и интерпретируется
один раз при запуске сервера. На этом же этапе можно произвести подключение к
базе данных (чтобы не выполнять подключения/отключения при каждом запросе),
открыть необходимые файлы и выполнить другие предварительные действия. Таким
образом, теперь запрос обрабатывается внутри сервера, что позволяет получить
выигрыш в производительности в десятки и сотни раз.
Модули mod_python и mod_perl, как вы уже,
наверное, догадались, и являются модулями сервера Apache для встраивания в
сервер интерпретаторов Python и Perl соответственно.