Несколько лет назад у меня был своеобразный кризис – хотелось уйти с C++ на что-нибудь другое (сухим остатком этого кризиса остались несколько страничек на narod-е). Одной из причин данного кризиса было то, что я распробовал вкус замечательного языка Ruby. Что вылилось не только в Mxx_ru, но и в некоторое количество очень важных утилит, использующихся внутри компании до сих пор. На Ruby в 2007-2008 я программировал, временами, даже больше, чем на C++. В то время я был больше Ruby-истом, чем C++ником :)
Но у Ruby тогда был один фатальный недостаток. Из всех популярных скриптовых языков (Perl, Python, Tcl, Ruby) он был самым медленным (да и, насколько я могу судить, сейчас он такой же) . Для каких-то задач это не играло существенной роли – что толку оптимизировать код программы, если 99% времени ее работы уходит на ввод-вывод или обращения к БД. Но все равно, осадочек-то оставался.
Поэтому в то время очень большой восторг вызывали любые Ruby-новые продукты, о которых говорили, что они быстро работают. И, если не ошибаюсь, самым знаковым из них стал для меня web-сервер Mongrel. Маленькая шустрая библиотечка на Ruby (вот хоть убей не помню, были ли в ней какие-то части на C или нет). Да еще и, по слухам, очень секьюрная – парсер HTTP там был написан не вручную, а сгенерирован по грамматике с помощью генератора парсеров Ragel, что не позволяло сломать сервер неправильно сформированными запросами.
Если мне не отшибает склероз, где-то в 2008-м мне попадались заметки в блогах о том, как RoR-приложения запускались на Mongrel вместо lighttpd и чуть ли не взлетали :) В общем, для меня Mongrel был таким классным флагом, которым можно было поразмахивать, чтобы доказать, что Ruby не сосет, а его просто не умеют готовить (ну почти как у Erlang-егов знаменитый AXD301). Хотя сам лично я Mongrel-ом не пользовался.
Но время шло, объемы данных в наших задачах росли, требования ко времени реакции и обработки все время ужесточались. И как бы мне не нравился Ruby, становилось понятно, что на Ruby далеко не уедешь. Поэтому потихоньку я из Ruby-иста опять превратился в C++ника. Ничего не поделать – против лома нет приема :)
А вчера по RSS приходит новость о первой версии сервера Mongrel2. Он уже не на Ruby написан, а на C. Ничего не поделаешь – против лома нет приема.
Интересна архитектура web-приложений, которые должны разрабатываться для Mongrel2. Логика выносится во внешние процессы, которые взаимодействуют с процессом web-сервера посредством ZeroMQ. С одной стороны – это хорошо. Более того, мне хочется, чтобы со временем для таких же целей вместо ZeroMQ использовался SObjectizer.
Но, с другой, ведь web-приложение тогда будет завязано только на Mongrel2 (я далек от Web-разработки, но что-то не приходилось слышать, чтобы другие сервера предоставляли ZeroMQ-шный интерфейс для web-приложений). Лично мне кажется, что это не очень правильно. Ведь когда пишешь обычный CGI, то без разницы, будет ли оно работать под apache, lighttpd или IIS-ом. Появляется свобода и некоторая гарантия того, что если под apache случится жопа, то можно будет пересесть на lighttpd или еще что-нибудь. А вот куда с Mongrel2 пересядешь?