Вчера обсуждая с бывшим коллегой мои впечатления от рельс,

топ 100 блогов levgem20.09.2011 Вчера обсуждая с бывшим коллегой мои впечатления от рельс, я смог сформулировать проблему рельс.

Они перестали отвечать тенденциям времени.

Когда я в 2005-м открыл Agile Web Development On Rails, я понял, что люди, делающие свои фреймворки — упёртые идиоты, потому что абсолютно всё, что можно и хочется сделать во фреймворке для малого и среднего сайта есть в рельсах. В течении последующих нескольких лет мы могли наблюдать, как весь web-мир, включая монстров типа Java и .NET рванулись догонять Rails. Вопрос стоял лишь так: как бы сэмулировать на говнопохапешечке has_many, что бы было не так мучительно отстойно.

Всё, что было не Rails-like отдавало зловонным запахом гнилостных масс неподдерживаемого кода



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

Можно много рассуждать о том, как на питоне вот в том самом фреймворке есть фича _почти_ похожая на рельсы, но факт остается фактом: Рельсы вовремя уничтожили всю конкуренцию кода на Ruby и это прекрасно. Есть только один мейнстрим, Руби без рельс не существует (если вам кто-то говорит обратное — развернитесь и не слушайте его, он вам как наёмный работник неинтересен) и все коммитят в него. И, в принципе, длительное время во главе проекта стоял один человек, что опять же прекрасно: design by commitee — говно и пиздец. Должна быть одна точка принятия решений.


Но я считаю, что пик при нынешней архитектуре и концепции пройден. Рельсы перестали отвечать тенденциям времени.


Тенденции очень простые: то, что раньше делалось с перезагрузкой страницы, теперь делается без неё. Там, где раньше ты приходил на сайт один, теперь ты видишь, что тут же и твои друзья. Там где раньше ты жал релоад что бы увидеть результат, теперь тебе просто обновляют страницу.

Если вкратце, то: сервер стал гораздо активнее пихать данные в клиента. Веб-сокеты, комет, флеш — это всё транспорт и детали, но суть простая: теперь сервер является источником событий для клиента. Раньше такого практически не было.

И рельсы тут превращаются в кошмар. Там, где когда-то раньше можно было поднять vhost в passenger и просто кинуть файлы в папку, нужно городить огород из delayed job (rescue или чего-то ещё), comet server, messaging сервер и т.д. и т.п.

Одной из шокирующих новостей моего знакомства с эрлангом стало то, в нём не нужно этого огорода. Просто напиши код, пропиши зависимости и всё будет работать в одном процессе. Локальность данных по сравнению с рельсами сумашедшая, записи на диск во много раз меньше и удобство возрастает.


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

Хочется сконцентрироваться на одном несчастном проекте на 100 К уников в день, которому приходится покупать второй сервер, потому что рельсы тупо не справляются на одном из-за того, что дрочат базу, жрут CPU и память там, где говнокод на PHP (написанный в 5 раз дольше и в 3 раза дороже) справлялся бы на одном сервере.



И когда программисту такого сайта приходится добавлять милые штуки типа «оповестить онлайн-пользователя о том, что ему пришло личное сообщение» или просто приделать на сайт чат как во вконтакте/фейсбуке, начинается черти-что.

Удобство рельс заканчивается: мало того, что нужно возиться ещё с пачкой дополнительных демонов, их ещё надо выкатывать на продакшн, надо их запускать там, следить за ними, настраивать monit для них и т.д. и т.п.


Т.е. новые вызовы времени проходят мимо развития рельс. Глобальный и мучительный переход на 3-и рельсы обошел стороной вопросы потребления памяти, асинхронности работы и т.д. и т.п.

Хотя казалось бы: появились ведь файберы, решение ведь простое: запускать в одном процессе EventMachine с обработкой существенно большего количества пользователей. Или отказаться от MRI, начать миграцию на JVM что бы пользоваться ядрами.

В любом случае на EventMachine сегодня можно собрать удобный кусок кода, который будет в себе и delayed job сочетать, и Comet-сервер, и веб-обработку, но это всё будет мимо рельс.

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

Оставить комментарий

Архив записей в блогах:
Меня всегда интересовал вопрос - откуда взялась эта фишечка, о том, что дескать, мать должна обеспечить ребенку абсолютную любовь, любовь-несмотря-ни-на-что, каким бы ребенок ни был, а отец, мол, учит жизни, правильному поведению, и его любовь в большей степени обусловлена. В жизни ...
27-28 марта в городе Иваново XXIII МЕЖДУНАРОДНАЯ НАУЧНАЯ КОНФЕРЕНЦИЯ «ГОСУДАРСТВО, ОБЩЕСТВО, ЦЕРКОВЬ В ИСТОРИИ РОССИИ ХХ–XXI ВЕКОВ». В этой конференции я участвовал заочно — не поедешь же посреди кипящего учебного процесса за тридевять земель от Урала... Доклад был по судовым ...
Недавно состоялось открытие уникального пешеходного моста, соединившего две части старинного замка Тинтагель, неразрывно связанного с легендами о короле Артуре. Зависшая над глубоким ущельем 70-метровая конструкция имеет одну особенность, от которой у пешеходов стынет кровь в жилах. Виной ...
Работа с подрастающим поколением всегда была непростым делом. Недаром профессии учителя учат в высших учебных заведениях. Но воспитать и обучить ребенка это одно дело, а привить определенные жизненные навыки это другое. Такие навыки уже почти ...
Поцоны, расскажите-ка. Вот есть такая статья: 12.15 ч.1 Нарушение правил расположения ТС на проезжей части дороги, встречного разъезда, а равно движение по обочинам или пересечение организованной транспортной или пешей колонны либо занятие места в ней И штраф ныне за неё - 1500 руб. ...