Apache APISIX против NGINX
February 2, 2024
Согласно статистике W3Techs по состоянию на июнь 2022 года, NGINX является наиболее широко используемым веб-сервером в мире, занимая значительную долю рынка в 33,6%. Его широкое распространение и достойная производительность завоевали высокий уровень доверия среди пользователей, что делает его частым эталоном для сравнения.
Результаты тестирования производительности
В практическом тестировании мы сравнили производительность APISIX и NGINX в простом сценарии, и получили следующие результаты:
-
APISIX демонстрирует производительность QPS в 58 080 на одном ядре CPU, превосходя производительность NGINX, которая составляет 37 154 на том же оборудовании.
-
Производительность APISIX превышает NGINX на впечатляющие 56%.
Конфигурация теста и результаты нагрузочного тестирования
| APISIX | NGINX | |
|---|---|---|
| QPS на одном ядре | 58080 | 37151 |
| Нагрузочное тестирование | ![]() | ![]() |
| Основные конфигурации | routes: - uri: /hello upstream: nodes: "127.0.0.1:1980": 1 #END | http { access_log off; server { listen 1990; location / { proxy_pass http://127.0.0.1:1980; } } } |
| Оборудование | CPU 1 ядро, 4 ГБ ОЗУ | CPU 1 ядро, 4 ГБ ОЗУ |
| Использование CPU | 100% | 100% |
Тестовая среда:
-
Хост: M1 Macbook Pro
-
Операционная система: Debian

Если вам интересно, стоит попробовать повторить тест самостоятельно, результаты которого относительно легко воспроизвести.
Технические аспекты
Согласно официально опубликованной архитектурной схеме APISIX, разумно ожидать, что производительность APISIX должна быть ниже, чем у NGINX. Однако "необычные случаи часто указывают на скрытые проблемы". Давайте рассмотрим некоторые аномальные сценарии, которые могут возникнуть во время нагрузочного тестирования NGINX.

Перейдем к сути: результаты производительности APISIX соответствуют ожиданиям, и то же самое касается NGINX. Однако важно понимать, что тестовый сценарий для APISIX сосредоточен на производительности QPS при длительных соединениях, в то время как для NGINX это короткие соединения. Поэтому разница в производительности QPS является обоснованной.
Длительные соединения обычно используются в сценариях, требующих непрерывной коммуникации, таких как чат в реальном времени или непрерывная передача данных. Короткие соединения, с другой стороны, подходят для временных коммуникационных нужд, таких как обычный доступ к веб-страницам в режиме запрос-ответ HTTP.

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

Почему NGINX по умолчанию использует короткие соединения?
Родившийся в 2004 году, NGINX является ветераном среди открытых проектов, приближаясь к своему двадцатилетию. Чтобы обеспечить непрерывную итерацию пользователей и стабильный опыт, эволюция функций NGINX склоняется в сторону прямой совместимости. Это делает его одним из немногих веб-прокси-сервисов, которые по умолчанию используют протокол HTTP 1.0. Эта настройка по умолчанию сохраняется уже более десяти лет, и предполагается, что NGINX вряд ли изменит ее в будущем.
В эпоху микросервисов, облачных решений и взрыва информации в области ИИ инженеры ищут программное обеспечение, которое надежно и не вызывает проблем, позволяя им сразу приступить к работе. Они также ценят конфигурации по умолчанию, которые соответствуют лучшим практикам производства. Следовательно, современное открытое программное обеспечение стремится избавиться от исторического багажа и сосредоточиться на эффективном решении проблем, имея как преимущества, так и недостатки.

