Как стать автором
Обновить

Комментарии 18

Кстати в rr есть класс https://github.com/spiral/roadrunner/blob/master/src/HttpClient.php на нем можно делать интеграции не используя PSR-7. Работает он так же как и PSR7Client.


Ускорить с rr еще можно если заюзать очереди, memory queue позволяет запускать часть тяжелых задач в фоне.

Не совсем понял про memory queue. Имеется ввиду внутри приложения отдать ответ как только возможно и после уже еще что-то тяжелое/ненужное досчитать (статистику затрекать)? Мы говорим все еще про кейс с HTTP сервером или про еще один вариант применения rr?

P.S.
Спасибо за крутой инструмент

Да, именно очередь для обработки задач в фоне. В rr можно установить http и queue одновременно, если интересно то вот сборка сразу с 3 пакетами: https://github.com/spiral/framework/releases/tag/v2.0.14


Идея пакета https://github.com/spiral/jobs в том что можно гонять задачи в фоне без какого либо брокера, чисто на каналах. А позже, поправить конфиг и вынести координацию в rabbitmq, sqs или куда-то еще.

У magento есть из коробки абстракция над message queue на уровне фреймворка. И 2 ее имплементации на выбор — rabbitmq и очередь на основе mysql+cron

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

С numWorkers > 1 не работает?

Да, работает. У меня даже получилось словить пару дедлоков БД на 16 воркерах и другом конфиге artillery.io с конкурентными юзерами. Но для измерений я использовал вариант с одним воркером

Для кого-то свершилась мечта.
Срезали 150ms инициализации системы.
Так держать.

Это отлично, может есть какие-то публичные данные по производительности?

спасибо что поделились результатами замеров :)

Коллега, снимаю шляпу. Это сродни попытке поставить Франкенштейна на беговую дорожку. То, что он побежал — уже чудо, а то, что при этом от него не отвалились части тела, говорит о вашем высоком профессиональном уровне! Читал, как в детстве "Науку и жизнь".

Уверен, что какие-то части тела отвалились, но в целом да, обнадёживает.

проблема со стейтом, к сожалению остается и с Web API, так как тот же ObjectManager и его состояние будет переиспользоваться между запросами. И если в случае одного потока это незаметно, то когда потоков будет много, и они будут в разных контекстах (сторов), то результаты могут быть неконсистентны.

Мы смотрим в это сторону, в частности на swoole. Но для полноты решения нам еще нужно очищать состояние специфичное для выполнения запроса, а также очищать состояние при возниктновании исключений или ошибок.

Но поддержку PSR-7, мы точно хотим добавить. Если у вас есть время/желание — можете помочь Magento это сделать в виде контрибьюшена.

Хм, но om конфигурируется на уровне area(frontend, cron, etc) только, соответственно для одного скоупа конфиг идентичен и инстансы созданные om могут быть пошарены, если мы говорим про стейтлесс сервисы, которыми оперирует om. Или я что-то упускаю?

у нас в om можем оставаться \Magento\Store\Model\StoreManager::getStore, или текущая категория, или значения из регистра, которые были сохранены в рамках выполнения предыдущего запроса.
В идеальном мире — если сам сервис stateless, то да. Но мы, к сожалению не в идеальном мире и у нас попрежнему есть состояния.
Было бы интересно, в частности запустить Magento web api тесты, на таком сетапе и посмотреть проходят ли они.

Вот, тоесть с om все вроде ок, дело в конкретных сервисах. Но, насколько я понимаю, что проблема как в перечисленных сервисах (и всех остальных) не нова и может возникнуть и без swoole/rr.


Мне просто кажется, что с очисткой om будет значительно меньше выигрыш. Возможно следует выбрать что-то промежуточное, если нет возможности привести к работоспособному виду "плохие" сервисы. Например атрибут для di.xml похожее на "shared=false", но в рамках процесса.


Что касается тестов, то думаю будет не очень результат)

Интересное решение. Я решал проблему обычными способами типа мощного сервера, nginx, opcache, production mode, composer -o —no-dev, built-in cache. Все это позволяет сократить запросы к api до 80-250мс, в зависимости от запроса.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации