Назад к блогу

Скорость рынка. Авторизация в комплекте.

Скорость рынка. Авторизация в комплекте.

api-gateway · сравнение с рынком

По скорости api-gateway не уступает Traefik, Nginx, Envoy и Kong — и при этом единственный из пяти понимает JWT, роли и права доступа прямо из коробки: без единого плагина и без отдельного auth-сервиса.

Сравнение с: Traefik v3.1 · Nginx 1.27 · Envoy v1.31 · Kong 3.7 Методология: одинаковый бэкенд, 2 vCPU / 768MB на гейтвей, wrk

10% разрыв с самым быстрым из пяти (Nginx)0 плагинов нужно для JWT, RBAC и прав доступа22–99% теряют конкуренты, добавляя такую же авторизацию

Производительность

На уровне лидеров рынка

Пять гейтвеев, один и тот же бэкенд, одинаковый бюджет на CPU и память. Каждый — на дефолтных настройках из коробки: без плагинов, без ускорителей. api-gateway держится в одной лиге с Traefik, Envoy и Kong, а от самого быстрого — Nginx — отстаёт всего на 10%.

Пропускная способность по гейтвеямзапросов / секунду
api-gatewayостальные четыресветлее = 50 соединений · насыщенно = 300
010k20k30kapi-gateway · 50 соединений · 23 690 запр/сapi-gateway · 300 соединений · 25 063 запр/сapi-gateway25 063/сTraefik · 50 соединений · 23 845 запр/сTraefik · 300 соединений · 25 002 запр/сTraefik25 002/сNginx · 50 соединений · 26 412 запр/сNginx · 300 соединений · 26 748 запр/сNginx26 748/сEnvoy · 50 соединений · 24 737 запр/сEnvoy · 300 соединений · 25 340 запр/сEnvoy25 340/сKong · 50 соединений · 24 624 запр/сKong · 300 соединений · 25 076 запр/сKong25 076/с
Одинаковый бэкенд, равный бюджет CPU/памяти; дефолтные настройки, без плагинов и ускорителей.

Ресурсы

Разумный расход памяти

Пиковая резидентная память в тесте на 300 соединений; потолок для всех одинаковый — 768MB. api-gateway занимает меньше памяти, чем Traefik и Kong, при том что оба уступают ему в возможностях аутентификации.

Пиковая память под нагрузкойMB · лимит 768MB
Nginx · пик 12.4 MBNginx12.4 MBEnvoy · пик 33.2 MBEnvoy33.2 MBapi-gateway · пик 90.5 MBapi-gateway90.5 MBTraefik · пик 163.4 MBTraefik163.4 MBKong · пик 301.9 MBKong301.9 MB
api-gateway легче Traefik и Kong — при том, что оба уступают ему в возможностях аутентификации.

Возможности

Всё нужное — из коробки

Traefik, Nginx, Envoy и Kong — гейтвеи общего назначения: авторизацию в них приходится добавлять плагинами или внешними сервисами. api-gateway изначально задумывался как гейтвей с авторизацией внутри: JWT, роли, права доступа и аудит — без единого плагина.

Возможностьapi-gatewayTraefikNginxEnvoyKong
JWT-аутентификация✓ Встроено• ForwardAuth/плагин— нужен njs/Lua• фильтр jwt_authn✓ плагин jwt
RBAC из claims токена✓ Встроено• фильтр RBAC/OPA• плагины ACL/OPA
Кэш permission-сервиса✓ Встроено, TTL-кэш
Аудит / webhook-события✓ NATS + HTTP, встроено• access-log/tap• через плагины
Rate limiting по роутам• limit_req✓ плагин
Circuit breaker✓ простой✓ продвинутый• плагин
Авто-TLS (ACME)✓ Встроено✓ Встроено
Service discovery✓ Docker/Podman по labels✓ ключевая фича• ingress-контроллер✓ xDS/Consul/K8s• ingress-контроллер
SPA / раздача статики✓ Встроено• через file provider✓ основная сила
Экосистема плагинов• небольшая• на этапе компиляции• WASM/Lua✓ большая

✓ — есть из коробки · • — частично / через плагин или внешний сервис · — — нет

Service discovery

Находит сервисы сам — как Traefik, но по своим labels

Раньше api-gateway знал о бэкендах только из статического конфига. Теперь он подключается к Docker/Podman через socket, находит контейнеры по labels и сам строит из них таргеты и роуты. Сервис описывает себя сам:

labels:
  gateway.enable: "true"
  gateway.name: "blog"
  gateway.port: "8085"
  gateway.router.api.path_prefix: "/api/blog"
  gateway.router.api.auth.required: "false"

Обнаруженное дополняет статический конфиг — при конфликте приоритет у статики, поэтому миграция сервисов постепенная. На один сервис можно описать несколько роутов (gateway.router.<id>.*) с ролями и rate-limit, а изменения подхватываются по событиям контейнеров, без перезапуска гейтвея.

Service discovery по labelsDocker / Podman
контейнеры с labelsbloggateway.enable=truepath_prefix=/api/blogaccountgateway.enable=truepath_prefix=/api/accountcartgateway.enable=truepath_prefix=/api/cartDocker/Podman APIsocket · read-onlyapi-gatewayнаходит сервисы и строит роуты/api/blog → blog:8085/api/account → account:8081/api/cart → cart:8082
Сервис сам описывает себя labels; обнаруженное дополняет статический конфиг — при конфликте приоритет у статики.

Почему это важно

Встроенное против пристроенного

У подхода «просто добавь плагин» есть своя цена. Мы измерили её двумя способами: у единственного конкурента с нативным аналогом (плагин jwt у Kong) и на схеме, к которой в реальности пришлось бы прибегнуть всем остальным, — отдельный сервис, который проверяет авторизацию на каждый запрос.

Проверка JWT: встроенная vs плагинзапросов / секунду
05k10k15k20k25kapi-gateway · без auth · 25 063 запр/сapi-gateway · JWT обязателен · 23 413 запр/сapi-gatewayнативноKong · без auth · 25 076 запр/сKong · плагин jwt · 17 965 запр/сKongплагин jwt
Валидный HS256-токен на каждый запрос. Валец: наши −0%, Kong −28%.
Авторизация как сетевой хопзапросов / секунду · −99%
05k10k15k20k25kTraefik · без auth · 25 002 запр/сTraefikбез authTraefik · ForwardAuth · 171 запр/сTraefik+ForwardAuth
Auth-сервис отвечает только «да» — это цена лишнего синхронного сетевого запроса (паттерн Envoy ext_authz, Nginx auth_request).

Тест на 300 соединений, на каждый запрос — валидный HS256-токен. Наш валидатор работает на том же проходе, на котором гейтвей и так разбирает заголовки для роутинга, а у Kong плагин jwt — это отдельная Lua-фаза на каждый запрос. Auth-сервис в этом тесте не делает ничего, кроме ответа «да», — мы замерили именно цену лишнего синхронного запроса по сети. Это структурный налог, который платит любой гейтвей без встроенной авторизации.

Итог

Зачем выбирать api-gateway

api-gateway работает на той же скорости, что и признанные лидеры рынка, — и делает это без единого плагина для авторизации, ролей и прав доступа. Это не выбор между скоростью и функциональностью: можно получить и то и другое.

  • Со скоростью всё в порядке. На одинаковом железе api-gateway отстаёт от Nginx максимум на 10%, а от Traefik — в пределах погрешности измерений. При этом ни Nginx, ни Traefik не знают, что такое JWT-роль или кэш прав доступа.
  • Функциональность уже в комплекте. JWT, RBAC, кэш прав и аудиторские вебхуки едут в коробке. Конкурентам то же самое обходится в 22–99% пропускной способности — в зависимости от того, какими обходными путями им приходится это делать.
  • Сервисы находят себя сами. Service discovery по labels (Docker/Podman) избавляет от правок конфига при добавлении сервиса — как у Traefik, только авторизация и права доступа остаются внутри гейтвея.
  • Один компонент вместо трёх. Не нужен отдельный auth-сервис, не нужен маркетплейс плагинов, не нужно отдельно поддерживать связку гейтвея с permission-сервисом — всё это уже внутри.

Локальный бенчмарк · wrk, Docker, ядра закреплены через cpuset · цифры из одиночных прогонов, подряд на одном и том же железе · полная методология

Похожее