Медленный ли Symfony?

В данный момент изучаю Symfony 3 на PHP 7, и задаюсь вопросом производительности.

Есть задача написания Rest API, решил попробовать Symfony 3, написал тестовое API и попробовал выполнить тест Apache AB (ab -t 10 -c 10) на несуществующий метод, скорость обработки 2062 запроса за 10 секунд или 206 запросов в секунду.

Делаю тоже самое на Phalcon, скорость 23297 запросов за 10 секунд или 2329.69 запросов в секунду. Если запускать один запрос, то скорость одинаковая, примерно 90 мс.

В чем прикол? Может я что-то делаю неправильно и где-то нужно настроить что-то, чтобы на несуществующий запрос была более высокая скорость или это нормальная скорость? Понятно, что Symfony имеет высокую абстракцию и поэтому производительность меньше, но тут просто нужно вывести 404 ошибку.

Отрыв Phalcon становиться меньше, если взять и добавить операцию поиска в базу и маппинга, через модель встроенную в фреймворк. Phalcon правда всеравно быстрее, 1600 запросов против 900 запросов Symfony за 10 секунд.

Конфигурация: PHP 7, Debian, opcache on, Symfony3, Phalcon 3, Кеш Symfony включен, режим Production.

Подключенные бандлы в Symfony:


new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new Nelmio\CorsBundle\NelmioCorsBundle()


----

Ладно, делаем замеры потребляемых ресурсов при выполнении запроса в базу данных на поиск и маппинг:

Выполняем замер Symfony и существующей конфигурации PHP-FPM при работе Apache AB (ab -t 10 -c 10):


20383 www-data 20 0 380884 26040 18020 R 58,3 0,3 0:10.35 php-fpm7.0
21394 www-data 20 0 380884 26040 18020 R 57,3 0,3 0:03.62 php-fpm7.0
21498 www-data 20 0 380884 25908 17900 R 57,3 0,3 0:02.77 php-fpm7.0
19479 www-data 20 0 380884 25020 18020 D 55,7 0,3 0:15.08 php-fpm7.0
20481 www-data 20 0 380884 26044 18020 R 52,0 0,3 0:09.30 php-fpm7.0


Окей, в среднем FPM жрет 52 процента процессора на каждый процесс, делаем замер Phalcon:

24110 www-data 20 0 379016 17876 12848 S 13,6 0,2 0:03.57 php-fpm7.0
25593 www-data 20 0 378884 17776 12848 R 13,3 0,2 0:02.30 php-fpm7.0
27023 www-data 20 0 378884 17608 12788 S 13,3 0,2 0:01.08 php-fpm7.0
25445 www-data 20 0 378884 17780 12848 S 13,0 0,2 0:02.48 php-fpm7.0
27177 www-data 20 0 378884 17600 12788 R 13,0 0,2 0:00.91 php-fpm7.0


Phalcon не грузит систему, при одинаковых действиях, загрузка на каждый процесс 13 процентов. Я могу предположить, что возможно скорость меньше и нагрузка выше из-за того, что Symfony дергает кеш с диска каждый раз, а Phalcon по умолчанию все пишет в память. Если это так, то как перенести весь кеш в память, чтобы исключить нагрузку на диск?
  • Вопрос задан
  • 5003 просмотра
Решения вопроса 1
@edb
SQL
1. При тестировании несуществующего метода в symfony генерируется исключение, а это всегда дорого и медленно.
2. Когда тестировался существующий метод, то разница показала реальную производительность фреймворка. И разница в чуть менее в 2 раза не такая уж и большая.
3. Symfony используют не для выигрыша в производительности. Гораздо важнее тут скорость разработки и качество кода.
Ответ написан
Пригласить эксперта
Ответы на вопрос 6
27cm
@27cm
TODO: Написать статус
2b931180d841428d919aea22658657d8.png
Картинка кликабельна.
Ответ написан
OnYourLips
@OnYourLips
Ваш тест ни о чём, тестировать надо реальное приложение, причём в прод-окружении.

Да и смысла их тестировать нет: symfony для самых серьёзных проектов, которые можно делать на PHP, а phalcon - скорее просто доказательство концепта, что фреймворк может быть модулем PHP, не вижу ни одного случая, когда он был бы лучшим решением. Потому что если нужна высокая производительность для микросервиса, то есть решения куда производительней, асинхронного типа.
Ответ написан
catanfa
@catanfa
по опыту могу сказать, что на перспективу, в реальных больших проектах, с кучей ивентов, бандлов и т.д., симфони оказывается жутко медленным. На моём проекте сейчас мой Action только начинает выполняться, а прошло уже 500ms времени. Это уже после всех попыток ускорить, закешировать и т.д.
Ответ написан
MaxxArts
@MaxxArts
ksimka
  • Просто так ничего не бывает медленным или быстрым. Скорость измеряется в конкретных условиях.
  • Вопрос «а медленный или быстрый Х» должен ставиться только в том случае, когда производительность — единственный волнующий вас критерий (а так быть не должно).
  • Поиск «самого быстрого решения» — не лучший путь к решению задачи. Сформулируйте задачу, сформулируйте достаточные условия, при которых решение будет считаться приемлемым. Тогда можно будет попытаться подобрать действительно наиболее подходящий инструмент.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы