kefirfromperm ([info]kefirfromperm) wrote in [info]ru_grails,
  • Music: Atoll Nerat - Ведьма

Наш 1й коммерческий проект на Grails

http://www.g2b.perm.ru/


Срок разработки - менее 4х недель. Причем основная проблема была в дизайне и верстке.

Кратко архитектура:
Сервер: виртуальный с 256Мбайт ОЗУ
ОС: Fedora Core 8
СУБД: PostgreSQL 8.3
Веб-сервер: Apache
Сервлет контейнер: Tomcat 6.0.14 (JRE: 1.6.0_u7)

Полностью все реализовано на Grails 1.0.3, Groovy 1.5.6. Отправка почтовых сообщений осуществляется при помощи Quartz 1.6.0 каждую минуту, если есть что отправлять, использованы соответствующие плагины для Grails. Кроме того была применена библиотека для обработки BB-кодов KefirBB. В качестве кэша 2го уровня Hibernate использован EhCache, который, как выяснилось, достаточно просто настраивается.

Доступ к статическим ресурсам (картинкам и CSS), а так же к загружаемым пользователем файлам осуществляется посредством Apache, без Tomcat'а, что опять же способствует повышению производительности. Мы приняли решение хранить загружаемые пользователем файлы на диске, т.е. не в БД, что позволяет получать к ним быстрый доступ без особенных затрат, правда усложняет бакап данных, но не сильно. Загружать файлы может только администратор, так что не ищите такую возможность. :)

  • Post a new comment

    Error

    Your IP address will be recorded 

  • 48 comments

[info]dmarsentev

October 4 2008, 08:19:20 UTC 3 years ago

С успешным запуском Вас

А что это такое у меня в адресной строке появилось при заходе?
;jsessionid=B19612FB71358597865A4676561F050C
Зачем sessionid передаётся GET-методом?

[info]kefirfromperm

October 4 2008, 10:37:51 UTC 3 years ago

Re: С успешным запуском Вас

Хм... Че-та недонастроили... :)

[info]sirwiz

October 6 2008, 09:03:06 UTC 3 years ago

Re: С успешным запуском Вас

Поправили.

[info]dmarsentev

3 years ago

[info]sirwiz

3 years ago

[info]dmarsentev

3 years ago

[info]dmarsentev

3 years ago

[info]the_very

3 years ago

[info]sirwiz

3 years ago

[info]ulysses4ever

October 4 2008, 12:04:55 UTC 3 years ago

Для статического контента Nginx лучше бегает, кажется.

[info]kefirfromperm

October 4 2008, 18:00:28 UTC 3 years ago

Ну пока у нас проблем нет со статическим контеном. Еще ведь надо разбираться как nginx с томкатом интегрировать.

[info]sirwiz

3 years ago

[info]sirwiz

3 years ago

[info]ulysses4ever

October 4 2008, 18:10:45 UTC 3 years ago

Да, впечатления приятные. А что, всякому веб-два-ноль с Ajax места не нашлось? А сколько человек делали-то?

Файлы на диске хранить это не Ъ. С БД намного удобней имхо. С ФС еще всякую уникальность имен нужно соблюдать... Можно ли загружать файлы с кириллическими именами? Ну, пока может только админ это не так критично, но БД все равно лучше.

[info]kefirfromperm

October 4 2008, 18:48:27 UTC 3 years ago

Аякс есть, но в админском интерфейсе (неожиданно да?). В самом деле у обычного человека здесь функций только просмотр и задавать вопросы. Хотя была мысль отправку вопроса с аяксом сделать, как-то руки не дошли.

В общей сложности занимались 3 человека:
Я - вся разработка, включая даже верстку.
Дизайнер - рисование рисунков.
Мой начальник - оформление бумажек, определение требований, участие в проектировании, поиск хостинга и администрирвоание виртуального сервера.

С хостингом, кстати, у нас была неопределенность долгое время. Даже была мысль использовать в качестве СУБД HSQLDB. Кстати ее можно использовать, разработку и тестирование в основном вели на HSQLDB. Вообще я остался очень доволен HSQLDB, она вполне пригодна для промышленной разработки. Ну а тестировать однозначно лучше с использованием HSQLDB, т.к. в памяти она просто летает и тесты отрабатывают мгновенно.

Изначально файлы сохранялись в БД, но во-первых нам было сложно предсказать реакцию HSQLDB на хранение больших файлов, а во-вторых доступ к файлам на диске очевидно идет быстрее, чем через кучу промежуточных уровней. В итоге мы приняли решение хранить их в ФС, конечно можно было бы продумать кэширование на диск и совместить скорость и сохранность, но это лишние заморочки. Хотя отсутствие этих заморочек привело к заморочкам с бакапом.

Конфликты имен разрешаются очень просто: в БД сохраняется дескриптор файла, а к имени сохраняемого фала добавляется префикс из идентификатора и подчеркивания, например: "image.jpg" превращается в "123_image.jpg", конечно здесь могут возникнуть проблемы с слишком длинным именем, да и с кириллическими именами, как Вы верно заметили, но загружает их администратор, которого мы можем тупо предупредить об этом.

[info]ulysses4ever

October 4 2008, 18:56:41 UTC 3 years ago

> Аякс есть, но в админском интерфейсе (неожиданно да?)
Да нет, нормально, в принципе.

Я как-то игрался с HSQLDB, но насчет продакшна: люди говорят, что не тянет она серьезных нагрузок. А вы вообще нагрузочно тестировали? JMeter там, всякая другая романтика?

[info]sirwiz

3 years ago

[info]sirwiz

October 5 2008, 09:15:10 UTC 3 years ago

Не должно там быть проблем с кириликой.

Ещё один минус хранения файлов в субд - дополнительная нагрузка на память. И с бэкапом файлов из DB всё не так просто.

[info]dmarsentev

October 6 2008, 13:37:38 UTC 3 years ago

А какая БД?

А какая БД всё-же?

[info]dmarsentev

3 years ago

[info]lackoftime

October 5 2008, 10:20:05 UTC 3 years ago

Какое преимущетсво в вашем случае(для вас и для клиента) дало использование Grails перед Ruby/PHP?

[info]kefirfromperm

October 5 2008, 10:48:34 UTC 3 years ago

Скорее здесь личные предпочтения. Мы ничего не задействовали экстраординарного, чего нельзя было бы сделать на пыхе или RoR. Но мы уже достаточно долгое время ведем разработку почти исключительно только на Java. Соответственно знакомы на практике с различными технологиями такими как Hibernate, Spring, Quartz, JavaMail и т.п.. Т.е. изучение аналогов для RoR или пыха потребовало бы дополнительного времени, а времени то у нас и не было. Кроме того я уже достаточно долго изучаю Grails, хотелось его проверить в "боевых" условиях.

А вообще это был отчасти эксперимент. Понятно, что теория, и модельные задачи это хорошо, но вот как все будет на практике никто не знает заранее. Мы попробовали, у нас получилось. Думаю теперь мы будем использовать Grails активнее.

Что меня привлекает в Grails? Как и в Spring - возможность задействовать уже готовые Java-библиотеки для всех случаев жизни. Конечно, пример использования KefirBB не очень нагляден, тем более что для пыха, например, есть xBB и еще много других парсеров. Тем не менее мне удалось интегрировать библиотеку которая, хоть и разрабатывается мной, не предназначалась для интеграции с Grails изначально.

Проблемы возникали с хостингом, найти вменяемый Java-хостинг не просто, пришлось арендовать виртуальный сервер. Здесь у пыха огромное преимущество, пока.

[info]sirwiz

October 5 2008, 19:44:03 UTC 3 years ago

Для клиента — скорость и качество. Вообще, недостижимые для PHP. Это объясняется не столько платформой или языком, сколько использованием трёхзвенки, MVC, ORM и других страшных слов. Естественно, платформа и язык должны быть заточены под эти технологии. PHP — не заточен. Технологии важны не сами по себе, важно то, что они, при умелом применении, обеспечивают на порядки более низкую «баганосность» кода, по сравнению с вермешельным PHP. А он всегда превращается в вермешель при попытках гибкой (agile) разработки, при рефакторинге. Как результат: нет нужды выделять 3/4 времени разработки на тестирование или тратить месяц на «допиливание» после сдачи. Преимущества гибкой разработки важны как для нас, так и для заказчика (сроки!).

А ведь там под внешней оболочкой ещё и CMS скрывается…

Ruby? А зачем вы Ruby рядом с PHP поставили? :-) Ruby это хорошо. Java оказала на него некоторое влияние (как на OOA/D/P вообще), а сам Ruby оказал влияние на Groovy, на котором работает Grails. Но Java — отраслевой стандарт, а Ruby — пока нет. Начиная разработку на Grails мы учитывали возможность в случае непредвиденных проблем продолжить разработку на уровне Java. Конечно, JRuby тоже даёт такую возможность, но мы с ним в данный момент не работаем.

В чём преимущество для нас? Половину ответа выше, вторая половина в другой плоскости: имеющий крылья ползать не станет. Тот, кто умеет работать на Grails/Java, не станет писать сколь-нибудь серьёзный проект на PHP :-)

[info]fstrange

3 years ago

"Service Temporarily Unavailable"
Отличная работа!

[info]kefirfromperm

October 6 2008, 08:02:49 UTC 3 years ago

Здесь могут быть такие проблемы:
1. раньше это был другой сайт на другом хостинге, возможно Ваш провайдер еще не перестроился, хотя, пора бы уже.
2. Мы время от времени еще вносим изменения, но перезапуск у нас занимает пару минут максимум.

[info]sirwiz

October 6 2008, 09:01:44 UTC 3 years ago

На 1500 запросов с начала дня один 503-ий ответ. Считай, в лотерею выиграл! :-)

[info]voituk

October 8 2008, 08:39:09 UTC 3 years ago

IMHO более конструктивное обсуждение (не в стиле сам дурак, а ПоХаПе-гаффно) находится тут
http://voituk.kiev.ua/2008/10/06/grails-pervaya-russkaya-lastochka/

[info]the_very

October 8 2008, 12:43:39 UTC 3 years ago

Re: С успешным запуском Вас

немножко некрасивы у вас ссылки пейджинга:
http://g2b.perm.ru/person/show/89?offset=10&max=10&sort=answerDate&order=desc&person.id=89&onlymy=&status=&department.id=§ion.id=&search=

[info]kefirfromperm

October 8 2008, 15:03:33 UTC 3 years ago

Re: С успешным запуском Вас

Да ваче... :)

[info]diezzz

October 10 2008, 21:46:08 UTC 3 years ago

Вопросик по поводу статических ресурсов -- как ты считаешь, если подгружать фильтром/сервлетом, который будет тянуть с файловой системы в поток -- будет медленней? Ну... ответ очевиден, что медленней. Но только ли из-за того, что этот фильтр/сервлет будет на выполняться на той же машине, что и остальная бизнес-логика?

[info]kefirfromperm

October 11 2008, 08:10:19 UTC 3 years ago

У Вадима есть очень интересная статья по этому поводу http://voituk.kiev.ua/2008/09/04/sendfile-on-nginx-apache-tomcat-6/

[info]levgem

December 16 2008, 20:47:46 UTC 3 years ago

nginx конечно же гораздо быстрее отработает статику. Во-первых он умеет zerocopy отдавать файлы (sendfile), во-вторых он умеет мультиплексорно это делать, а это требует гораздо меньше ресурсов на переключение контекста между нитками (которых в нем как раз и нет)

Anonymous

October 27 2009, 17:31:09 UTC 2 years ago

Сайт действительно получилься супер быстрый молодцы 5 баллов.
Пробую свое детище вырастить по той же технологии но с примесью google-app-engine plugin. Подробности на 4customizer.com

Anonymous

June 19 2011, 12:06:34 UTC 11 months ago

Вопрос

А что за хостинг выбрали?

[info]kefirfromperm

June 19 2011, 12:14:42 UTC 11 months ago

Re: Вопрос

А я уж не помню. Сперва был какой-то VPS, потом в связи с другими проектами завели свой сервер.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…