High performance
Website development
PHP
Node.JS
March 2017 4

Nginx + PHP 7.1.1 FPM vs Node.js 7.7.1 в качестве бэкенда ч.2

Всем привет! Продолжение противостояния 2х языков.

Сегодня у нас будет более честное сравнение, которое отображает большинство реальных задач.
Итак, мы сегодня сравним PHP и Node.js по следующим признакам:

  1. Типичная динамическая страница
  2. REST API


Важно! Ответы на вопросы и предъявы которые могут возникнуть:

Вопрос: А если запустить Node.js в кластере, будет ведь быстрее?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)

Вопрос: А если в Node.js использовать для соединения с mysql пул коннектов, наверное отработает быстрее, из-за распараллеливания запросов?
Ответ: На одно ядерном процессоре будет медленнее. (Проверено неоднократно)

Вопрос: Надо чтобы код у ноды прогрелся, там же JIT как никак, тогда она будет работать быстрее?
Ответ: Само собой все прогрето и результаты взяты самые успешные.

Предъява: Да ты походу все подстроил, полюбому реальные результаты будут другие.
Ответ: Код тестов в открытом доступе на гитхабе, скопируй и убедись сам.

Предъява: ab надо запускать не на сервере на котором работают тестируемые бэкенды, а на другом компе.
Ответ: Разъяснять лень. Но если в 2х словах, то ab практически не отнимает ресурсов во время теста и дает более реальные цифры на которые способен именно твой сервак.

Конфигурация сервера:
Простой VDS — 1 ядро процессора 2ГГц, 1Гб оперативы, 10Гб SSD.
ОС: Debian 8.6.
Так же произведены базовые настройки ядра, чтобы сервер в принципе мог обрабатывать большое кол-во соединений.

Я нагенерировал данных в таблицу (100 записей).

Приступим.

Первый этап (одинарные запросы): из 10 одинарных запросов на каждого испытуемого выбираем среднее значение.

Node.js — Типичная динамическая страница

image

Node.js — REST API

image

PHP — Типичная динамическая страница

image

PHP — REST API

image

Как видим, разница по скорости генерации отличается в разы, и PHP этот раунд выигрывает.

Второй этап (нагрузочное тестирование):

Из 10 прогонов на каждого испытуемого выбираем среднее значение. Тут нас интересует сколько запросов в секунду способен обработать наш сервер. 3000 запросов в 1000 потоков. #ab -n 3000 -c 1000…

Node.js — Типичная динамическая страница

image

Node.js — REST API

image

PHP — Типичная динамическая страница

image

PHP — REST API

image

Динамическая страница — PHP быстрее почти в 2 раза (1.78 если быть точным)
REST API — PHP быстрее почти в 3,5 раза (3.32 если быть точным)

Ссылка на репозиторий с кодом для тестов

По поводу конфигов системы, пхп, Mysql
У меня настроено так, чтобы работало максимально быстро.
Если вы не знаете как должна быть настроена операционная система, php, nginx и mysql. Это не моя проблема.

Буду очень признателен, если вы напиши свои варианты реализации REST API для Node.js, чтобы результаты были более быстрыми чем у меня. И оставляйте код в комментах, я буду проводить замеры и писать результаты. Цель догнать, а лучше перегнать PHP.

UPDATE


По совету пользователя dos поменял в Node.js драйвер MySQL на github.com/mscdex/node-mariasql и результаты изменились кардинально!

Обновленные результаты по Node.js

Этап 1

Node.js — Типичная динамическая страница
image

Node.js — REST API
image

Этап 2

Node.js — Типичная динамическая страница
image

Node.js — REST API
image

Динамическая страница — Node.js быстрее в 1.16 раза(на 16%)
REST API — Node.js быстрее в 1.26 раза(на 26%)
В качестве бэкенда для своего будущего проекта я выберу
64.5% PHP 7 360
35.4% Node.js 198
Voted 558 users. Passed 146 users.
-1
12.3k 43
Comments 92
Top of the day