В этой статье я познакомлю вас с основами mod_perl, добьюсь того, что вы сами захотите попробовать поработать с ним и приведу в качестве примеров несколько известных сайтов, созданных с помощью mod_perl под Apache.
Что такое mod_perl?
mod_perl является сердцем проекта интеграции Apache/Perl, объединяющей в себе все возможности языка программирования Perl и web-сервера Apache.
С самого начала Apache был создан таким образом, чтобы вы могли расширять его возможности добавляя "модули". Модули могут делать все необходимое, как, например, переписывать запросы с HTTP, ограничить доступ к определенным страницам и выполнять поиск в базе данных. Обычно модули написаны на C, с которым иногда трудно работать. mod_perl - это модуль, который дает вам возможность делать все эти вещи и, более того, использование Perl делает процесс разработки более быстрым, чем на C. Apache является наиболее распространенным в интернете web-сервером, а mod_perl - одним из самых широко применямых модулей для расширения его возможностей.
Почему mod_perl получил такую широкую известность?
Если вам нравится Perl и ваш любимый web-сервер - Apache, то вы полюбите mod_perl с первого взгляда. А как только вы поробуете его в действии - вы больше не будете оглядываться по сторонам, потому что поймете: в mod_perl есть все, что вам нужно. И даже если вы вдруг обнаружите, что в нем чего-то не хватает - только скажите. Прежде, чем вы успеете сосчитать до трех, кто-нибудь уже успеет создать это для вас. И, конечно, вам захочется отдать что-нибудь взамен. В итоге вы добавите что-то свое - это сэкономит массу времени другим членам сообщества mod_perl, и они смогут создать еще больше вещей для нужд других пользователей.
Такая получается картина: mod_perl увеличивает возможности пользователям, которые в свою очередь увеличивают возможности mod_perl, который в свою очередь увеличивает возможности пользователей, которые в свою очередь... Это так же элементарно, как ядерная реакция, которую вы проходили в школе (или еще будете проходить).
Используя mod_perl можно писать модули Apache целиком и полностью на Perl. Это дает вам возможность легко делать такие вещи, которые являются сложными или попросту невозможными для обычных программ на CGI, как например обработка запросов, написание аутентификации и обработчиков логов.
Основными преимуществами mod_perl являются возможности и скорость. Вы имеете полный доступ ко всей деятельности, происходящей внутри web-сервера и вы можете вмешаться на любой стадии обработки HTTP запроса. Это дает возможность самостоятельно вносить поправки на различных стадиях обработки: например, ссылку на преобразование имени файла, авторизацию, генерировать ответы и логи.
Происходит большая экономия времени при запуске и компиляции. Интерпретатор для Perl встроенный в сервер значительно сокращает расход времени, не тратя его на запуск внешнего интерпретатора при каждом запросе HTTP, для которого необходимо использование кода Perl. По крайней мере такую важность представляет кэширование кода: модули и скрипты загружаются и компилируются только один раз - в момент первого запуска сервера. И остаток всей жизни сервера управление скриптами происходит из кэша, так что серверу остается только запустить прекомпилированный код. В большинстве случаев это так же быстро осуществимо, как запуск компилированных программ на C.
Это небольшой выигрыш во времени при запуске. В частности, под mod_perl нет необходимости запускать индивидуальный процесс для каждого запроса, как это зачастую делается в других расширениях для web-серверов. Наиболее распространенный механизм расширений такого рода - Common Gateway Interface (CGI) - полностью заменен кодом Perl, который занимается обработкой процесса запроса в фазе генерирования ответа. Для этих целей существуют два взаимосвязанных с mod_perl целевых модуля: Apache::Registry, который может незаметно запускать существующие немодифицированные скрипты Perl CGI и Apache::PerlRun, который выполняет похожую задачу, но дает вам возможность запускать скрипты в какой-то степени "более грязные".
mod_perl дает вам возможность настраивать сервер Apache и программы обработки на Perl (используя для этого директиву PerlSetVar и секции <Perl>. При этом администрирование сервера со множеством виртуальных хостов становится предельно простым. Эй, вы даже можете задать ваши собственные директивы конфигурации.
Насколько быстрым и стабильным является mod_perl?
Многие спрашивают: "Сколько преимуществ дает использование mod_perl?" Ну, все зависит от того, как вы используете mod_perl и, возможно, от того, кого вы спрашиваете. Разработчики заявляют об увеличении скорости от 200 до 2000 процентов. Лучший способ определить так ли это - попробовать и увидеть своими глазами. (для получения информации по этому вопросу смотрите http://perl.apache.org/tidbits.html и http://perl.apache.org/stories/).
Каждую секунду каждого дня тысячи web-сайтов по всему миру используют mod_perl для управления сотнями тысяч web-страниц. Apache и mod_perl по оценкам являются одними из лучших когда-либо вообще написанных программ. Конечно, они продолжают развиваться и дорабатываться, но вам не приходится работать с "полуфабрикатом" - для ваших сайтов вы можете использовать стабильный продукт и предоставить другим возможность тестировать новые версии.
Хочу показать вам лишь несколько сайтов из числа наиболее популярных и часто посещаемых, управляемых посредством mod_perl. Лучше раз увидеть, чем сто раз услышать. Посетите эти сайты и почувствуйте разницу. Вы убедитесь, что mod_perl - это рулез!
ValueClick -- http://www.valueclick.com/ обрабатывает ежедневно более 70 миллионов запросов с 20 машин. Все ответы динамические, включают любые виды вычислений, записи, логи, подсчеты - назовите сами. Все программы-приложения выполнены на Perl.
Singles Heaven -- http://singlesheaven.com/ - это сайт-Match Maker, насчитывающий более 35000 членов и это число постоянно растет. Сайт управляется с помощью mod_perl, DBI, Apache::DBI (который обеспечивает постоянное соединение с БД) и MySQL. Скорость просто чудовищная, общаться с mod_perl - одно удовольствие. Каждая страница генерируется примерно 10-ю SQL-запросами, для чего производится большое количество динамических проверок на каждой странице (как, например, проверка новых e-mail сообщений, пользователей, за которыми наблюдают различные программы-watchdog'и и многое другое). Для вас эти запросы будут вообще не ощутимы, скорость такая же высокая, как скрипт "Hello World'".
Internet Movie Database (Ltd) -- http://www.moviedatabase.com/ - обрабатывает ежедневно около 2 миллионов просмотренных страниц. Все поиски в базах данных обрабатываются внутри Apache посредством mod_perl. Каждый запрос также проходит через ряд программ-обработчиков mod_perl и выводимые данные далее переформатируются посредством mod_perl SSI, дабы вставить в них рекламные баннеры и предоставлять различные виды сайта в зависимости от используемого хоста.
CMPnet -- http://www.cmpnet.com/, сеть по информационным технологиям, ежедневно обрабатывает более 600к просматриваемых страниц.
CitySearch.com -- http://www.citysearch.com/ предоставляет в online-режиме путеводители более чем по 100 городам по всему миру. citysearch.com помогает людям в процессе поиска и планирования, что они хотят сделать и позволяет им предпринимать конкретные действия, предоставляя услуги по оформлению сделок на месте, таких как покупка билетов на какие-либо мероприятия и заказ мест в отелях и ресторанах в online-режиме. Трафик превышает 100 миллионов просмотренных страниц в месяц.
Как много сайтов работают с mod_perl для web-сервера Apache?
По данным Netcraft (http://netcraft.com/), в августе 2001 года 18 миллионов хостов использовали для работы free-версию web-сервера Apache, что составило около 60 процентов от числа всех исследованных хостов.
Так что же mod_perl? http://perl.apache.org/netcraft/ заявляет, что сайты, работающие на mod_perl насчитывают 2,823,060 имен хостов и 283,180 уникальных IP-адресов. В действительности показатели занижены, поскольку проверка работающих web-серверов проводилась только на самых известных портах (80, 81, 8080 и на нескольких других). Если сервер использует редкий порт, то он не был учтен, даже если владелец сервера собственноручно добавил его в базу данных Netcraft. Здесь представлен график роста использования mod_perl:
Вы, должно быть, взволнованы выходом версии Apache 2.0, нового поколения самого лучшего из web-серверов. Главными особенностями web-серверов нового поколения являются многопоточные процессы, которые повысят возможности сервера к расширению, и, конечно, долгожданный уровень фильтрации.
Вы, должно быть, не менее озабочены по поводу недавнего выхода версии Perl 5.6, чьей главной особенностью является (почти) стабильная поддержка потоков, поразившая вас в предыдущей версии Perl, но где она являлась слишком нестабильной.
Вы спросите, как это все повлияет на mod_perl? mod_perl 2.0 в настоящий момент еще разрабатывается и вберет в себя все преимущества новых версий Apache и Perl. Самым важным усовершенствованием будет уменьшение размера процессов - конструкция дерева операций Perl будет практически полностью распределена между потоками одного процесса.
Вы верите в совпадения? И Perl 5.6 и Apache 2.0 - оба вышли на одной и той же неделе в марте 2000 года. Мне это кажется весьма подозрительным. Если вы обладаете точной информацией, обличающей тайный сговор, пожалуйста, дайте мне знать.
Разумеется, вокруг нас происходит достаточно неожиданностей. Пройдет немало времени, прежде чем все наши приложения смогут использовать преимущества многопоточности. Главная причина в том, что большинство модулей Perl доступных на CPAN не предназначены для надежной работы потоков. Но не нужно падать духом. Вы можете отключить использование потоков в не предназначенном для надежной работы нескольких потоков Perl-коде, или в таком, который использует модули, не предназначенные для многопоточной работы.
Хочу mod_perl прямо сейчас, где его взять?
Домашняя страница mod_perl находится здесь http://perl.apache.org/. С этого сайта вы сможете скачать самый свежий софт по mod_perl и самую разную документацию, найдете коммерческие продукты и выложенные в свободный доступ предоставленные третьей стороной модули, прочтете рассказы об упехах и достижениях и узнаете много нового о mod_perl.
Достаточно важно оформить подписку на рассылку mod_perl. Если вы хотите быть в курсе событий, происходящих с mod_perl, вы хотите знать, что нового разрабатывается, если вы хотите поучаствовать и поспособствовать или просто хотите получить помощь, тогда не пренебрегайте этой рассылкой. Для того чтобы подписаться на рассылку, отправьте пустое письмо по е-mail на modperl-subscribe@apache.org.
Есть ли где-нибудь какие-либо книги или документация по mod_perl?
Вы найдете полный список документации по mod_perl на домашней странице mod_perl: http://perl.apache.org/.
Мне нравится mod_perl и я хочу знать, кто создал этот прекрасный продукт!
Ну, во всем виновен Дуг МакИчен (Doug MacEachern) :). Он - тот самый парень, который подарил обществу mod_perl. Он является Линусом для проекта mod_perl.
Но, как вам известно, в большом сообществе всегда найдутся люди, готовые помочь, и существует целая группа разработчиков со всего мира, создающих патчи для mod_perl, разрабатывают для него целые модули на Perl, проверяют сервер на наличие ошибок и защищают его. Боюсь, что список участвующих в деле разработчиков получится слишком длинным, чтобы привести его здесь. Но добро пожаловать в лист рассылки - и вы сможете увидеть всех этих людей в действии. Обещаю, вы не пожалеете, особенно если хотите узнать побольше и не только о mod_perl. Смотрите сами.
Поучаствовать
Если вы используете mod_perl или собираетесь использовать, тогда неплохо бы подписаться на рассылку для пользователей mod_perl. Чтобы это сделать, вам нужно будет послать по e-mail пустое письмо на modperl-subscribe@apache.org.
Если вы хотите оказать помощь в разработке mod_perl 2.0 - добро пожаловать, присоединяйтесь к нам. Очень многие вещи еще нужно сделать и немало протестировать. Так что работы много, будь вы опытный разработчик или даже новичок. И чем больше помощи мы получим, тем скорее приведем mod_perl 2.0 в товарный вид. Вы можете подписаться на рассылку разработчика, отправив пустое письмо на dev-subscribe@perl.apache.org.
Если вы уже знакомы с mod_perl, то вы должно быть знаете о большом и толстом руководстве по mod_perl, предоставленное мной при содействии многих людей (http://perl.apache.org/guide/). Так или иначе, в mod_perl 2.0 кое что изменилось, так что работа над новой документацией уже началась. Добро пожаловать за обновлениями на сайт http://perl.apache.org/ и подпишитесь на рассылку документации чтобы всегда быть в курсе отправив e-mail на docs-dev-subscribe@perl.apache.org.