Оптимизированный drupal

Аватар пользователя andypost@drupal.org andypost@drupal.org 8 мая 2009 в 3:04

Drupal PressFlow
Отслеживая разработку поддержки анонимных сессий в 7й ветке, наткнулся на интересный проект, тут как-то обсуждалось создание оптимизированной сборки - а она оказывается уже есть PressFlow

  1. Поддержка репликации базы данных. Для этого используется специальный уровень абстракции БД. Который, кстати говоря, обещают внедрить в D7
  2. Поддержка реверс-прокси кеширования Squid и Varnish. Обслуживаются скрипты и картинки для всех, и страницы полностью для анонимов.
  3. Заточка под MySQL. Они отказались от других типов баз данных и заточили все под MySQL.
  4. Заточка под PHP5. Заявляется, что в Друпале используются некоторые функции написанные под PHP4, аналоги которых есть в PHP5, которые работают быстрее. В пример приводится функция drupal_to_js() в Друпале и json_encode() в PHP5

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

0 Thanks

Комментарии

Аватар пользователя yоla yоla 8 мая 2009 в 10:52

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

Аватар пользователя batbug batbug 8 мая 2009 в 11:29
"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:

Выслал запрос на доступ к коду, ждемс!

А нам покажете?

Аватар пользователя yоla yоla 8 мая 2009 в 12:24

Как получить Pressflow

Пока Pressflow бесплатен и опенсорсен. Сейчас Four Kitchens раздает релизы только по запросу. Свяжитесь с нами для получения бесплатного релиза Pressflow и узнайте больше о том, как Four Kitchens и Pressflow могут помочь вашим проектам стать более производительными.
http://fourkitchens.com/contact

Аватар пользователя seaji seaji 8 мая 2009 в 12:51

Автору топика: Вы хоть бы немножко раскрыли тему. В результате чего достигается оптимизация?
Вот о чем написано здесь: http://fourkitchens.com/pressflow-makes-drupal-scale

1. Поддержка репликации базы данных. Для этого используется специальный уровень абстракции БД. Который, кстати говоря, обещают внедрить в D7

2. Поддержка реверс-прокси кеширования Squid и Varnish. Обслуживаются скрипты и картинки для всех, и страницы полностью для анонимов.

3. Заточка под MySQL. Они отказались от других типов баз данных и заточили все под MySQL.

4. Заточка под PHP5. Заявляется, что в Друпале используются некоторые функции написанные под PHP4, аналоги которых есть в PHP5, которые работают быстрее. В пример приводится функция drupal_to_js() в Друпале и json_encode() в PHP5

Примерно так.

Идея интересная.
Я некоторое время разбирался с производительностью. И вы знаете что?
Я понял, что в ядре D6 практически нет того, что можно оптимизировать. В D5 еще что то можно было поковырять, а вот в D6 нечего.
Запросы к базе просто летают, код модулей подключается не весь, а только необходимыми частями.
Единственно, меня расстраивает, что запросы к базе выполняются на порядок быстрей чем выполнение PHP. В D6 узкое место это PHP. Может быть с отказом от поддержки PHP4 скорость действительно возрастет.

Аватар пользователя shp shp 9 мая 2009 в 17:03
seaji wrote:

Я некоторое время разбирался с производительностью. И вы знаете что?
Я понял, что в ядре D6 практически нет того, что можно оптимизировать ... Запросы к базе просто летают, код модулей подключается не весь, а только необходимыми частями.

Вообще-то по крайней мере файлы xxx.module в 6-м Друпале подключаются ВСЕ (т.е. для всех включенных модулей). А вот в 7-м Друпале внедрили так называемый Code registry, что позволяет переместить код модуля в другие файлы, которые будет подключаться только при необходимости (http://drupal.org/node/224333#registry).

В 7-ке появилась ф-ия <?phpnode_load_multiple()?>, теперь несколько нод могут загружаться одним запросом к БД.

Также в issues велись разговоры по поводу внедрения кэширования нод (на уровне подгрузки данных в <?phpnode_load_multiple()?>), но они сейчас как-то заглохли, как я понял, из-за переделки Field API. У меня лично есть задумки по поводу поддержки кэширования нод полностью (т.е. готовой разметки, чтобы темизацию каждой ноды не запускать), и такого же кэширования блоков (сейчас кэширование блоков есть, но только на уровне данных).

Кроме того, насколько я знаю, не решена проблема с <?phpdrupal_lookup_path()?>, которая есть и в шестерке.

Так что есть еще что оптимизировать :)

Аватар пользователя alexandr.poddubsky alexandr.poddubsky 8 мая 2009 в 14:46

плохо что только под мускул, у 5 мускула неисправлена как я помню бага с большими размерами баз данных, база просто обнуляется.
у постгри такого нет, а отказ от базы на файлах вообще бред. гугля вон плагин распространяет к бродилкам на sqlite для кэширования, распределения нагрузки и синхронизации контента- а друпа отказывается. причем плагин очень перспективный.

Аватар пользователя Valeratal Valeratal 8 мая 2009 в 15:06

бага с большими размерами баз данных
можно уточнить, насколько большая база обнуляется?

Аватар пользователя andypost@drupal.org andypost@drupal.org 9 мая 2009 в 0:53

Спасибо, seaji за локализацию :) Не было возможности оформить пост, сейчас немного причесал...

Лично меня больше всего радует, что выкинута поддержка php4 и замена некоторых функций библиотечными. К сожалению особенностью разработки drupal является заморозка кода, многие изменения, которые входят в 7ку игнорируются в 6ке (например) - ибо можно многое сломать в contrib

Проект заитересовал именно тем, что кто-то взялся поддерживать форк, причем достаточно сложный!

Аватар пользователя Ильич Рамирес Санчес Ильич Рамирес Санчес 9 мая 2009 в 20:54
"<a href="mailto:andypost@drupal.org">andypost@drupal.org</a>" wrote:

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

блин. больше трех лет прошло. сколько можно 4ку за собой тянуть.
сам писал для 4ког пыха до последнего но как только 5х стал тянуть работу полностью перешел на него.
более того - завязал с поддержкой клиентов с кривыми скриптами на пхп4. пусть платят за портирование или выживают сами.

а друпа и в 6ой версии тянет за собой этот хвост блин.

Аватар пользователя andypost@drupal.org andypost@drupal.org 9 мая 2009 в 23:46
Ilya1st wrote:

а друпа и в 6ой версии тянет за собой этот хвост блин.

Ну дык она релизилась, когда 4ка еще поддерживалась, нельзя было так просто скинуть всех пользователей "задвинутых хостингов"

Аватар пользователя bratello bratello 11 мая 2009 в 15:16

А конкретно какие части библиотеки в 5-й версии улучшены, есть какие то флаги deprecated? Просто чтобы знать на будущее. Неужели нельзя было переписать оптимальнее стандартную библиотеку, для того чтобы не дублировать?

Аватар пользователя SylarSAI SylarSAI 14 мая 2009 в 11:44

Пришло письмо:
Pressflow has been updated to releases 6.12.38 and 5.18.39. These
releases include the latest round of Drupal security updates, and we recommend you *test* them immediately.

Download Pressflow 5:
http://cts.vresp.com/c/?FourKitchens/5154b3103f/361e2a706c/7da3095409
Download Pressflow 6:
http://cts.vresp.com/c/?FourKitchens/5154b3103f/361e2a706c/74d2b03c0f

Аватар пользователя gor gor 17 мая 2009 в 19:52

Маленький пост, как превратить ваш drupal в pressflow.
Для продвинутых пользователей, которые умеют использовать ssh.

Качаем патч http://devstaff.ru/pressflow.patch
И накладываем.
cd YOUR_DRUPAL_SITE_ROOT
cat ../PATH_TO_PATCH |patch -p1

Аватар пользователя HIgor1968 HIgor1968 22 мая 2009 в 9:07

Установил на сайт.
Обнаружил ошибку:(
При просмотре содержимого в админ-меню, отбираю по типу материала. Потом пытаюсь скинуть отбор и получаю - Illegal offset type in session.inc on line 147
в session строки

145: function drupal_set_session($name, $value) {
146:   drupal_session_start();
147:   $_SESSION[$name] = $value;
148: }
Аватар пользователя Anodonta Anodonta 25 мая 2009 в 16:56
"Ilya1st" wrote:

блин. больше трех лет прошло. сколько можно 4ку за собой тянуть.

Меня попросили сайт за пиво на хостинге с ПХП 4.
Сначала он пожил на е-107, теперь перевёл его на Друпал 6.
Но возможности воздействовать на переход на ПХП 5 сейчас у меня нет.
Так что я, на сегодняшний день, наоборот, радуюсь что поддержка ПХП 4 есть.
И более того, если не удастся перейти на ПХП 5, буду трепетно надеяться, что и 7 версия друпала будет поддерживать php 4 :).

Аватар пользователя Сашка Сашка 12 сентября 2009 в 21:40

Ку! Плохо что Postgres убрали/позабыли:) Точнее, судя по коду, оставили без изменений. Там есть что оптимизировать. Особенно транзакции (транзакции и особенно их инфраструктура: снапшоты и реверты — в мускле смешны до ужаса/слёз/поноса...) и триггеры, триггеры СУДБ это вообще не раскрытая тема для современных CMS и не будет раскрыта пока мускл шагает по планете, а ребята из постгреса не сделаю нормальный инсталлятор (...да-да под ВИНДУ!!! Пробовать, учиться, тестировать, а там и до *nix не далеко, как это сделал Сысоев с nginx...), более простую систему прав/ролей/разрешений. Надеюсь Oracle позаботится о том, чтобы Sun позаботился о MySQL. Мля:) Пока в печь — а так ооооочень интересно:) Обязательно пощупаю Varnish...

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 сентября 2009 в 0:14
<a href="mailto:a.a.egoroff@drupal.org">a.a.egoroff@drupal.org</a> wrote:

Ку! Плохо что Postgres убрали/позабыли:) Точнее, судя по коду, оставили без изменений. Там есть что оптимизировать.

Никто его не убирал, нашлось всего несколько энтузиастов из сообщества, силами которых postgresql сохранился в 7ке. А по оптимизации - все предложения приветствуются, и многопатчей в очереди ожидают что их кто-нить да проверит. Лучше сделать патч, чем пенять на нерадивых разработчиков/самих себя.

Аватар пользователя Stimpy Stimpy 14 сентября 2009 в 21:56

Интересный проект. Кто-нибудь тестировал производительность?

UPDATE:
Значит сделал клон тяжелого сайта на этом Pressflow (оригинал: d6.13).
Модулей: ~80-90, часть из них не настроена, так что примерно на 10-20 запросов к базе меньше на Pressflow нежели чем на D6.
Кэш + кэш блоков.

В общем и целом производительность ненамного лучше.

Имхо, я бы на "рабочий" сайт не стал ставить.

Аватар пользователя andypost@drupal.org andypost@drupal.org 15 сентября 2009 в 1:31

У pressflow есть ряд особенностей, используя которые можно хорошо масштабировать drupal. Естественно, что простая установка ничего примечательного не даст.
А вот наприемер если использовать возможность отключения анонимных сессий - то прирост уже становится заметен.
Поддержка реверсивных прокси - весьма полезная вещь для тех, кто озадачен масштабируемостью... да и еще несколько подобных фишечек, которые требуют "вдумчивого" использования

Аватар пользователя clubwave.ru clubwave.ru 30 ноября 2009 в 19:39

Пробую PressFlow на своём вечно перегруженном проекте, пока вроде всё ок, на вид сайт работает быстрей, но уже заметил один косяк:

Сейчас на сайте пользователей - 87 и гостей - 2

хотя гостей меньше 200 в такое время не бывает.. это и есть последствие отключения анонимных сессий?

Аватар пользователя clubwave.ru clubwave.ru 30 ноября 2009 в 20:45

а они могут пригодиться в случае, если гости нигде ничего не пишут?

заметил, что переводы здесь кешируются, даже под первым юзером ,чтобы увидеть изменения перевода, нужно очистить кэш

Аватар пользователя clubwave.ru clubwave.ru 30 ноября 2009 в 21:14

насчёт летает погорячился.. в данный момент подвисон
last pid: 42465; load averages: 14.65, 8.39, 7.22 up 2+12:36:11 21:11:48
468 processes: 2 running, 465 sleeping, 1 zombie
CPU states: 24.3% user, 0.0% nice, 8.0% system, 0.6% interrupt, 67.1% idle
Mem: 5401M Active, 1595M Inact, 566M Wired, 172M Cache, 214M Buf, 134M Free
Swap: 8192M Total, 24K Used, 8192M Free
PID USERNAME THR PRI NICE SIZE RES STATE C TIME WCPU COMMAND
54066 mysql 110 44 0 1289M 856M ucond 3 275:11 116.16% mysqld

Аватар пользователя Valeratal Valeratal 30 ноября 2009 в 21:46

clubwave.ru а как перевели с обычного на оптимизированный?

конечно, сессии я могу отключить модулем

Аватар пользователя clubwave.ru clubwave.ru 1 декабря 2009 в 0:29

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

Аватар пользователя clubwave.ru clubwave.ru 2 декабря 2009 в 4:43

транслеты это переводы ))

опытным путём удалось установить, что кэш на базе работает быстрей кэша файлового через модуль cacherouter

Valeratal, 3-й день идёт, косяков вроде нет.. попробуй тоже поставить

Аватар пользователя clubwave.ru clubwave.ru 7 декабря 2009 в 22:42

с этим PressFlow странная штука произошла.. Google Analytics, подключённый через одноимённый модуль, показывал нормально посещаемость через раз, я уж думал сервер падает, но по лайвинтернету всё стабильно.. решил залить обратно друпал и вот моё удивление ,на друпале сейчас 110 зарегенных онлайн, тогда как на PressFlow максимум 90 видел..

Аватар пользователя Valeratal Valeratal 8 декабря 2009 в 9:35

хм, интересно
еще более интересно насколько в действительности повышается производительность от PressFlow

p.s. у меня например, узкое место сейчас проц (я даже не знаю сколько у меня реально МГЦ)

Аватар пользователя bratello bratello 4 мая 2010 в 15:12

Возможно кому то будет интересно, исследования в области Java based PHP JIT. Речь идет о перформенс импрувмент до 49%, я правда не понял это с АРС или без, потому что этот JIT сам по себе надстройка над АРС.

http://www.trl.ibm.com/people/mich/pub/201002_vee2010p9-cr.pdf

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

Аватар пользователя gorr gorr 5 мая 2010 в 12:08

Вот еще проект от фейсбук, недавно выпущенный в опенсорс Hip hop for PHP. Суть проекта заключается в том, что машинно код, написанный на PHP, переписывается на C. Пишут, что более 90% кода на PHP, используемого в facebook сейчас обработано таким образом, что дало примерно 50% производительности. Проекту всего около года, продолжает развиваться.

Аватар пользователя bratello bratello 5 мая 2010 в 20:12

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