Рейтинг скоростных веб-фреймворков 2020



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

    В процессе поиска решения мне попалась аналитика скорости обработки запросов по большому количеству фреймворков, существующих на сегодняшний день. Я выбрал из них те, у кого больше 5000 звезд на GitHub и которые обрабатывают больше 150 000 запросов в секунду. В формуле подсчета рейтинга второй параметр взят в квадрате, поскольку флуктуации звезд куда амплитудней.

    В итоге формула такая:
    Количество звезд на GitHub * (Количество запросов в секунду) ^ 2

    Жирным выделены лидеры по скорости обработки запросов.

    1. Beego [go] — 359 279
    2. Gin [go] — 252 895
    3. FastHttp [go] — 420 498
    4. Echo [go] — 262 940
    5. ASP.NET Core [csharp] — 263 725
    6. Workerman [php] — 349 897
    7. Mux [go] — 263 585
    8. Koa [js] — 159 032
    9. Perfect [swift] — 218 634
    10. Chi [go] — 274 507
    11. Fastify [js] — 177 372
    12. Falcon [python] — 208 805
    13. Bottle [python] — 168 776
    14. Ktor [kotlin] — 162 842
    15. Сowboy [elixir] — 160 063

    Замеры количества запросов в секунду проводились с помощью wrk. Механизм подсчета основан на ответах в трех сценариях:
    — открытие главной страницы с ответом 200 и пустым содержанием
    — открыите страницы /user с ответом 200 и пустым содержанием
    — открыите страницы /user/__ID__ с ответом 200 и c __ID__ в содержании

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

    Источник данных: GitHub и web-frameworks

    Если у вас есть опыт использования каких-либо из указанных фреймворков, буду рад обсудить с вами в комментариях.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

      +1
      Хорошо бы написать формулу подсчёта рейтинга и сам рейтинг в явном виде. А то несколько раз пришлось перечитать, чтобы понять — почему именно в таком порядке рейтинг идёт и скор не по порядку получается, который справа написан. И если открыть исходную статью, то тоже не сразу что-то понятно становится, только ещё больше путаешься сначала. :)
        0
        Формула такая:
        Количество звезд на GitHub * (Количество запросов в секунду) ^ 2
          +14
          Мне кажется, такая методика достойна медали Эффективного Менежера!
        +1

        Интересно что в рейтинге производительных фреймворков нет настоящего победителя — dpdk который выдерживает миллион запросов в секунду на одном ядре (https://habr.com/ru/post/416651)

          +1
          Вот именно, почему автор проигнорировал самый быстрый веб фреймворк в мире — actix-web?
          www.techempower.com/benchmarks/#section=data-r18
            +1
            по actix, sailsjs и некоторым другим пока нет данных, как появятся — обновлю рейтинг, возможно через полгода-год.
              +3

              Не хочу показаться токсичным, но у меня возникает подозрение, что и рейтинг, и репозиторий не ваш. Обосную: actix из репозитория был удалён, но сам код есть в истории гита; но тогда не могу понять, почему бы просто не восстановить его, и не прогнать нагрузочные тесты? Это намекает на то, что результаты тестирования тоже позаимствованы.

                –1
                Вы удивитесь, GitHub тоже не мне принадлежит, как и программы для тестирования написаны не мной. Рейтинг я собирал для себя, для своих потребностей, после чего решил поделиться и посмотреть, кто что думает.
                  0

                  Actix вернули на следующий день после удаления, теперь он передан в поддержку сообщества.

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

              Dpdk не веб фреймворк. Там даже своего TCP стека нет.

              +10

              Почему у вас список отсортирован не по скорости обработки ответов, но по этом в рейтинге у вас первые места занимают "фреймворки", которые медленнее чем те, которые занимают более низкие места?


              Почему вы собрали вообще все в одну кучу, если учесть что beego это дикий комбайн, gin — это api-конструктор и имеет свой роутер и кучу других приколясов, а fasthttp — это вообще не фреймворк, а просто библиотека для работы с http?

                +1
                Добавил формулу в статью, чтобы было понятнее. Скорость в квадрате умножается на количество звезд на гитхабе, иначе на первом месте был бы github.com/dom96/httpbeast
                  0
                  С кашей согласен, пока все в кучу. В будущем хочется добавить больше фреймворков и распределить уже по более узким нишам. Среди тяжелых mvc например нет высоких результатов и в этом общем рейтинге они пропадают вообще. Хотя вот интересно, что Django показывает в 2-3 раза лучшие результаты, чем все php-фреймворки.
                    –1

                    А какой смысл в сравнении вообще всего подряд?
                    Если вам надо производительное — вы и выберете что-то что больше рпсов показывает.
                    Если что-то попроще — то какой-то фреймворк с определенным набором нужных фич.


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

                      +2
                      Хотя вот интересно, что Django показывает в 2-3 раза лучшие результаты, чем все php-фреймворки.

                      Гм, я вижу как минимум один фуллстек фреймворк на PHP без swoole и event loop обгоняющий Django на 66%.


                      В выборке также отсутствует hyperf с приличным китайским комьюнити.

                        0
                        Вы про какой именно фуллстек фреймворк на PHP?

                        hyperf не дотягивает по скорости
                          +1

                          https://github.com/spiral/framework само собой за счёт «звёздного» фильтра он пока не проходит.

                            –3
                            Да, вы правы, быстрее джанги почти в два раза. К сожалению в прод его я не пущу. Пождем пока наберет 5к звезд и большое коммьнити.
                    +1
                    открытие главной страницы с ответом 200 и пустым содержанием

                    как много в вашем «конструкторе сайтов» таких запросов?
                      0
                      От фреймворка в первую требуется в первую очередь быстрая отработка роутинга и выдача ответа. Остальное большей частью делается обычно на других библиотеках или средствами языка.

                      Сам сначала сомневался в данных замерах, с другой стороны все фреймворки проходят идентичные тесты на одной машине с одинаковыми замерами. Конкретная скорость тут это относительный параметр показывающих качество прохождения одинаковых тестов.
                      0

                      Тот же никель взять: он же по скорости обработки запросов все вышеуказанные победит даже не задумываясь…

                      0
                      Механизм подсчета основан на ответах в трех сценариях
                      Но ведь, интернет — это не пустые страницы. Когда вы открываете страницу вам же не выдают пустую страницу в качестве контента. Почему все бенчмарки строятся вокруг простых страниц «Hello World!»?
                      Сделайте нормальный тест со страницей средней наполненности, с обращениями к базе данных.
                        0
                        Вы правы, это очень важные параметры. Особенно рендер html.

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

                        С БД же отдельная тема, там скорость зависит от самой бд, типа этой бд, от индексов, настроек итд. Общение с БД обычно идет через универсальный драйвер вроде JDBC. Хотя влияние на скорость все равно будет, согласен.

                        Если вас это интересует, то вы можете создать форк, дополнить тесты и запустить их на своей машине.
                          +1
                          тест моментально упрется в скорость бд которая будет узким горлышком. А чтобы отскейлить бд надо вложить много ресурсов, и в код, и в инфраструктуру/ее настройку, и это уже совсем другая задача.
                          +6
                          А что не так с рейтингом www.techempower.com/benchmarks? Все исходники тестов доступны github.com/TechEmpower/FrameworkBenchmarks и их можно склонировать и прогнать на своем железе или в облаке.
                            +2
                            А что не так с рейтингом www.techempower.com/benchmarks?

                            Там на звёзды на гитхабе не смотрят, необъективный рейтинг.

                              0
                              Вполне себе объективный и JSON, и Hello World и работа с БД. Разное количество потоков, latency и 500-ки считает для каждого вида теста. Импортируй результаты в Excel, добавляй звезды с гитхаба, количество разработчиков и любые другие параметры в табличку с нужной формулой и считай любой рейтинг.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое