В понедельник в Москве будет очередной Бунинлоад, и я буду делать блиц-доклад(обновлено!) на 5 минут про разные способы ответить на HTTP из Перла — от CGI через mod_cgi до свежайшего веб-сервера Plack.
А сегодня пришла ещё одна интересная новость: возобновлена работа над mod_perlite и последний релиз исполняет код MovableType! mod_perlite — это такой маленький и аккуратный модперл без хэндлеров и прочих сложностей, создающий для скриптов CGI-подобную среду и выполняющий их во встроенном в Apache интерпретаторе. Фактически функциональный аналог mod_perl + Apache::Registry или, точнее, Apache::PerlRun, поскольку код не кэшируется и компилируется на каждый запрос.
Ещё один вариант запуска приложения на Перле под Apache — mod_psgi. Он тоже встраивает интерпретатор, но выполняет в нём PSGI-приложения. Поскольку они по определению coderef-ы, то компиляция выполняется один раз. Теоретически это может оказаться ещё быстрее модперла.
Про PSGI было бы крайней интересно послушать в сравнении с другими интерфейсами. Рядовой обыватель не понимает чем этот велосипед лучше остальных.
Posted by: andrejz | 10/11/2009 at 01:19 AM
Надо сделать боевой проект на PSGI, потом можно будет рассказать. Теория понятна и интересна, но нужно попробовать.
Posted by: Алексей Капранов | 10/11/2009 at 02:43 AM
Согласен. Желаю удачи с докладом на HL++Ради фана можно было бы протестить еще http://github.com/tokuhirom/p5-http-server-fast , для порядка цифр.
Posted by: andrejz | 10/11/2009 at 05:14 AM
Стыдно признаться, он у меня не собрался :)
Posted by: Алексей Капранов | 10/11/2009 at 02:03 PM
Да, не красиво вышло. Я и сам не смотрел. Попробовал собрать, собрал, но оно с чем-то не слинковалось корректно. Надо будет пнуть автора. С другой стороны - смысла то и нет.
Posted by: andrejz | 10/12/2009 at 04:18 AM
Hi, thanks for the post! (I briefly read all of them with Google translate -- hope I get it right :))
Benchmark is pretty important, and Yuval, melo and I have been specing the test plan to do the fair benchmarking on PSGI apps and servers (rather than just a plain "Hello World") on IRC #http-engine channel on irc.perl.org. Come on in if you're interested :)
Anyway, PSGI is not just about the speed but also the flexibility and the abstraction: so any web apps can run on any servers and a new server can run any web app frameworks, etc. So it's obvious if the truely raw nginx/mod_perl handler is slightly faster than PSGI and I won't be upset about that.
So far, our fastest option seems mod_psgi and evpsgi, then prefork and mod_perl2. Coro and AnyEvent backends are slightly slower than those damn fast ones (but still are very fast like 1500 QPS on my machine), but has the wonderful non-blocking IO so you can run IO-bound, server-push or long-poll requests in parallel on top of the event loop, which is really nice.
I wonder if we can do the same thing in running PSGI apps inside nginx (with Yappo's patches): if nginx has an IO loop API, we can theoretically build AnyEvent::Impl::Nginx :)
Posted by: miyagawa | 10/18/2009 at 05:59 AM
Hi. Google Translate does not do a good job with Russian as a rule. Basically, the post is about a lightning talk I did during HighLoad++ 2009 which was a conference on huge web sites in Moscow. I chose to do a quick comparative benchmark of several HTTP server implementations available on CPAN and it was not very serious. Everyone in the audience understood that. Nevertheless, Plack was very fast as compared to non-PSGI implementations.
And yes, I very well understand that PSGI is not about speed (well, not only about speed). That is what we like about it.
About nginx: it does have a very simple way to tap into its main loop. It has a sleep() with callback in its Perl API which just yields control to nginx. Whether it is sufficient to create an AnyEvent backend or not, I don't know :) Most probably not.
Posted by: Алексей Капранов | 11/05/2009 at 01:38 PM