Workstation Logo
Продукты
AI LabsАгенты OpenAIАгенты ClaudeGrok BotWorkstation CRM (WSL CRM)МаркетингВсе продукты
Решения ИИ
Рабочие станции ИИAI SME PackagesЧастный ИИКластеры GPUПограничный ИИЛаборатория корпоративного ИИИИ по отраслям
Услуги
Platform ModernisationDigital EngineeringData Foundations & AIAutonomous OperationsИИ-консалтингАвтоматизация DevOpsКибербезопасностьРазработка ПОСоздание агентовНастройка MLOps
О нас
ПартнёрыИстории клиентов
Статьи
Документация
WSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7
Блог
Связаться с намиLogin
Workstation

AI-рабочие станции, мультиагентное AI-ПО, GPU-инфраструктура и решения на базе интеллектуальных агентов для современного бизнеса.

Связаться с нами

AI-решения

Рабочие станции ИИAI SME PackagesЧастный ИИКластеры GPUПограничный ИИЛаборатория корпоративного ИИИИ по отраслям

Продукты

Все продуктыWSL CRM и ERPМаркетингАгенты OpenAIWSL ProxyRing PromoterWSL VaultJobshoutSysOps 24/7

Компания

О насПочему WorkstationПартнёрыИстории клиентовЦеныКонтакты

Ресурсы

СтатьиДокументацияБлогПоискКарта сайта
Офис в Великобритании
77-79 Marlowes, Hemel Hempstead HP1 1LFКак добраться: съезд 20 с трассы M25, Внешний ЛондонРег. номер компании: 11641870Пн - Пт: 9:00 - 18:00 GMT
+44 7515 356 146
Офис в Бельгии
Workstation SRL, Rue Vanderkindere 34, 1180 Uccle, BrusselsBE 0751.518.683Пн - Пт: 9:00 - 18:00 CET
+32 492 45 67 46
Офис в Индии
#159 Sector 9, Pocket 1, DDA Flats, 110077 Dwarka, New Delhi
+91 98881 98841

© 2026 Workstation AI. Все права защищены.

КонфиденциальностьФайлы cookieУсловия использованияКарта сайта
Home / Articles / Technology
DevOpsArchitecturePerformanceRustGoBun.jsJavaKotlinLuaPythonnjs

Тесты Polyglot: выбор правильного инструмента для правильной работы

Восемь сред выполнения (njs, Lua, Python, Go, Rust, Bun, Java, Kotlin), семь HTTP-тестов, воспроизводимая среда Docker: матрица решений, доказательства ARB, репозиторий с примерами рабочих процессов и интерактивная информационная панель Polyglot-benchmarks.fictionally.org.

May 16, 2026Technology12 min read

Это подробное подробное описание. Более быструю и удобочитаемую версию см. сопутствующий пост в блоге.

Обложка Polyglot Benchmarks — правильный инструмент, правильная работа

1. Введение: стеки привычек и реальные рабочие нагрузки

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

Эта статья объясняет Тесты полиглотов — панель сравнения в реальном времени и открытая примеры рабочего процесса/тесты запрягать за ним — как структура принятия решений, а не таблица лидеров фанатов. Целью является доказательство, которое вы можете прикрепить к записи решения об архитектуре (ADR): одни и те же конечные точки, один и тот же генератор нагрузки, один и тот же макет контейнера, несколько языков.

Я не буду придумывать цифры пропускной способности в прозе. Когда вы запускаете эту программу, на панели мониторинга отображаются измеренные значения запросов/с и процентили задержки для этого оборудования и настройки Docker. Рассматривайте любой статический рейтинг здесь как качественные шаблоны, соответствующие семействам тестов системы и встроенной копии вердикта информационной панели.

Четырехэтапный подход Polyglot Benchmarks: определить рабочую нагрузку, протестировать, сравнить, принять решение
Краткий обзор схемы принятия решений — определите рабочую нагрузку, запустите программу, сравните ее на интерактивной информационной панели, а затем примите решение на основе ADR, подкрепленного измеренными данными.

2. Что такое тесты Polyglot?

Тесты полиглотов размещен по адресу полиглот-benchmarks.fictionally.org (Вымышленная инфраструктура в экосистеме примеров рабочих процессов). Заголовок лендинга сравнивает:

  • Нгинкс нджс — Модули JavaScript внутри стандартного NGINX
  • OpenResty Lua — Lua на краю OpenResty
  • Python FastAPI — Приложение Uvicorn ASGI
  • Зайти в сеть/http — стандартный библиотечный сервер
  • Rust Actix-web — асинхронный HTTP на Actix
  • булочка — Среда выполнения JavaScript с собственным HTTP-сервером
  • Java (Javalin/Jetty) — облегченный HTTP JVM на Jetty
  • Kotlin (Ktor/Netty) — JVM HTTP с поддержкой сопрограмм на Netty

Живой заголовок – это 8-язык сравнение: njs против Lua против Python против Go против Rust против Bun против Java против Kotlin. Подзаголовок выражает цель: производительность для длительный опрос/чат/очередь/рабочие нагрузки API — пути с интенсивным соединением, JSON и маршрутизацией, а не одна гонка на колесницах «привет, мир». Магазины JVM наконец-то получили ту же яркую поверхность, что и Go/Rust/Bun, вместо отдельного «корпоративного» анекдота.

2.1 Что показывает панель управления

Пока выполняется выполнение, пользовательский интерфейс опрашивает /data/results.json каждые две секунды и рендерит:

  • Запросов/сек (пропускная способность) - совокупно из wrk за язык за тест
  • Средняя задержка и Задержка хвоста P99 — в миллисекундах по модели задержки wrk
  • TTFB (время до первого байта) — из синхронизации JSON скручивания вместе с wrk
  • Сводная таблица — победители каждого теста с маркерами ★ на лучших ячейках
  • Подробные тестовые карты — гистограммы и таблицы показателей (P50, P90, P99.9, ошибки)
  • Распределение процентилей задержки — усреднено по тестам
  • Вердикт — лучший вариант для вашего случая использования - повествование, когда статус complete

Эта структура намеренно удобна для ARB: диаграммы для слайдов, таблицы для электронных таблиц, описание раздела рисков ADR.

3. Набор примеров рабочих процессов

Все воспроизводимое живет под benchmarks/ в примеры рабочих процессов хранилище. Макет верхнего уровня:

benchmarks/
  bench.sh              # orchestrates tests, writes results.json
  wrk_json.lua          # wrk done() → JSON summary (RPS, percentiles)
  docker-compose.yml    # eight app services + dashboard + bench runner
  njs/                  # NGINX + njs module
  lua/                  # OpenResty nginx.conf
  python/               # FastAPI + Dockerfile
  golang/               # net/http main.go
  rust/                 # Actix-web + Cargo
  bun/                  # Bun server.ts
  java/                 # Javalin on Jetty
  kotlin/               # Ktor on Netty
  dashboard/            # static index.html + nginx.conf

3.1 Топология Docker Compose

docker-compose.yml определяет изолированные службы в общей сети:

  • nginx-njs — порт 8081, конфиги отсюда ./njs
  • openresty-lua — порт 8082
  • python-fastapi — порт 8084, построен из ./python
  • go-server — порт 8085
  • rust-actix — порт 8086
  • bun-server — порт 8087
  • java-server — порт 8088, Javalin/Jetty от ./java
  • kotlin-server — порт 8089, Ktor/Netty от ./kotlin
  • dashboard — порт 8083, обслуживает HTML и монтирует results объем в /data
  • bench — Альпийский контейнер, который устанавливает curl, wrk, jq, ждет зависимостей, запускает bench.sh

Бегун по скамейке делит results громкость с помощью панели мониторинга, чтобы результаты отображались в реальном времени без копирования вручную.

3.2 методология Bench.sh

Драйвер оболочки явно кодирует правила справедливости:

  • Продолжительность: 10s на конечную точку на каждый язык
  • Темы: 4
  • Соединения: 100 одновременных
  • Разогревать: 50 выстрелов /hello на каждом сервере перед тестами по времени
  • На сервер: синхронизация JSON (DNS, Connect, TTFB, Total) плюс работа с wrk_json.lua

В сценарии семь тестов разделены вертикальной чертой:

ИДЕНТИФИКАТОР Имя Намерение Конечная точка
1Обычный текстБазовый уровень — минимальный ответ, накладные расходы на структуру/hello
2Сериализация JSONСоздайте и сериализуйте массив JSON из 100 элементов./json
3CPU-привязка (фиб 30)Рекурсивный фибоначчи(30) — чистый CPU/cpu?n=30
4Строковые манипуляцииПостроение, разделение, прописные буквы, повторное соединение 1000 сегментов/string
5Запросить проверкуЗаголовки, метод, аргументы → JSON/request_info?foo=bar&baz=123
6Подзапрос + ПреобразованиеВнутренний подзапрос, анализ JSON, преобразование/subrequest
7Логика маршрутизацииУсловная маршрутизация по параметрам запроса/route?action=greet&name=bench

Каждый язык реализует одну и ту же поверхность маршрута (см. golang/main.go, python/main.py, java/, kotlin/, конфигурации NGINX и т. д.), поэтому различия отражают среду выполнения и структуру, а не несовпадающие спецификации.

4. Почему важно «полиглот» (без фанатизма)

Полиглотная архитектура не означает, что каждый инженер изучает восемь языков. Это означает ограниченные контексты получите среду выполнения, которая подходит:

  • Краевая плоскость — аутентификация, ограничения скорости, маршрутизация: Lua или njs внутри NGINX, с которым вы уже работаете
  • Базовый самолет API — бизнес-логика с SLO: Go или Rust
  • JVM-плоскость — существующие поместья Spring/Jakarta, общие библиотеки, глубина найма: Java (Javalin) или Kotlin (Ktor)
  • Плоскость данных — ETL, блокноты, клей ML: Python
  • JS-плоскость в реальном времени — WebSockets, общие типы с интерфейсом: Bun или Node, где скорость выигрывает.

Унифицированные стеки оптимизируют работу персонала и закупок. Тесты Polyglot оптимизируются подходит под рабочую нагрузку с измеримыми компромиссами на столе.

5. Размеры, которые имеют значение

Необработанные запросы/сек — это показатель, который быстрее всего распространяется в Slack. Это также легче всего неправильно прочитать. Используйте рубрику из нескольких столбцов:

Критерий Доминирует, когда… Сигнал жгута проводов
задержка p50/p99API с пользовательским интерфейсом, чат, длинный опроспроцентили задержки работы; диаграмма приборной панели P99
Пропускная способность (RPS)Шлюзы с высоким разветвлением, пакетные агрегаторыработа ППС; столбец итогового победителя
Память на соединениеТысячи простаивающих веб-сокетовКачественный + профилирование производства (не в полной мере)
ТТФБПропуск CDN, холодные пути, мобильные сетизавиток time_starttransfer в результатах JSON
ЛОК/сложностьСтартапы, регламентированный контроль измененийСравните реализации в разных папках
Время сборки и непрерывной интеграцииЧастые развертывания, множество сервисовПрофили сборки Docker для каждого языка
Операционная нагрузкаНебольшая команда платформыСуществующие навыки работы с NGINX → Lua/njs; еще контейнеры
Стоимость хостингаВсегда включенный или масштабируемый до нуляПолучено из памяти + CPU под нагрузкой (производство)

6. Матрица решений

Диаграмма ниже представляет собой качественную карту, которую мы используем в обзорах — иллюстративные лидеры, а не замену использования обвязки на вашем комплекте.

Матрица решений по рабочей нагрузке и критериям: победитель зависит от строки

Прочтите сначала строку: выберите форму рабочей нагрузки, затем взвесьте столбцы. Если два критерия противоречат друг другу (например, лучший RPS против самого низкого LOC), это противоречие и является достойным обсуждения ADR.

7. Образцы корпусов (пример маркировки)

На следующих картах показано, как тестовые семейства используются для выбора архитектуры. Лидеры на вашей машине появляются на приборной панели после пробежки — не рассматривайте этот раздел как фиксированные баллы.

7.1 API чувствителен к задержке (тесты 1–2, 5–7)

JSON API и обработчики с интенсивной маршрутизацией отражают тесты 2, 5 и 7. Скомпилированные асинхронные среды выполнения (Rust Actix, Go) обычно лидируют по пропускной способности и задержке в этом классе синтетических HTTP-тестов; Бун часто придерживается сложных путей JSON с эргономикой JS. Ява (Javalin) и Kotlin (Ktor) дать JVM-командам возможность объективно сравниться с лидерами на тех же маршрутах — полезно, когда стоит вопрос «оставаться на JVM с более легким стеком» или «переписать на Go/Rust». Python FastAPI меняет количество RPS на скорость разработки — вердикт информационной панели прямо указывает на это.

7.2 Микроработа с использованием CPU (тест 3)

Фибоначчи(30) изолирует CPU без ввода-вывода. Ожидайте, что Rust и Go засияют; интерпретируемые стеки оплачивают накладные расходы; JVM JIT после прогрева может выглядеть сильнее, чем предполагает холодное окно в 10 секунд — увеличьте продолжительность, если это ваш реальный профиль. Если ваш реальный сервис связан с вводом-выводом, не переусердствуйте в этой строке — это стресс-тест для промежуточного программного обеспечения с большим объемом вычислений, а не для типичного CRUD.

7.3 Преобразование границ (тесты 6–7, варианты NGINX)

Тесты подзапроса и маршрутизации — это то, где OpenResty Lua и Нгинкс нджс принадлежность: нулевой дополнительный переход, общая рабочая память, команды эксплуатации уже управляют NGINX. В вердикте журнала рекомендуется использовать Go/Rust для основных серверных частей чата/очередей и Lua/njs на периферии — разумное разделение, которое многие предприятия уже используют неформально.

7.4 Пакетный ETL и конвейер данных

Обвязка HTTP не эмулирует нагрузки Spark или хранилища. Для пакетной обработки команды обычно отдают приоритет экосистеме и оркестрации Python (Airflow, Dagster) или работникам Go для обеспечения пропускной способности. Используйте тесты Polyglot для Поверхности и плоскости управления API эти задания раскрывают, а не сам пакетный механизм.

7.5 Быстрый внутренний инструмент

Внутренние администраторы API с низким количеством запросов в секунду и высокой скоростью изменений: Python или Bun/Node часто выигрывают по скорости и найму сотрудников. Запустите тест 2 (JSON) и тест 5 (проверка), чтобы убедиться в приемлемости накладных расходов; если количество подключений на p99 становится ниже 100, подумайте еще раз, прежде чем переходить на уровни, ориентированные на клиентов.

7.6 Имущество JVM (Java и Kotlin)

Многие предприятия уже используют Java или Kotlin для общих библиотек, инструментов обеспечения соответствия и повышения уровня найма сотрудников. Ремни безопасности java-server (Javalin на Jetty, порт 8088) и kotlin-server (Ktor на Netty, порт 8089) реализуют те же семь конечных точек, что и Go и Rust, поэтому перед перезаписью вы можете количественно оценить, является ли более легкий HTTP-стек JVM «достаточно хорошим» для данного SLO. Отдавайте предпочтение Kotlin, когда важны параллелизм в стиле сопрограмм и команды, ориентированные на Kotlin; предпочитают Java, когда окружающая среда и граф библиотеки уже ориентированы на Java. Используйте строки интерактивной информационной панели — не предполагайте, что номера Spring Boot равны номерам Javalin/Ktor.

8. Схема рабочего процесса

Polyglot тестирует рабочие дорожки для плавания

Воспроизводимый цикл: укажите рабочую нагрузку → запустите программу Compose → опубликуйте результаты на информационной панели Fictionally (или во внутреннем клоне) → запишите ADR с метаданными конфигурации → повторно запустите при изменении среды выполнения или оборудования.

9. Как провести собственное сравнение

  1. Клон: git clone https://github.com/bwalia/workflow-examples.git && cd workflow-examples/benchmarks
  2. Стартовый стек: docker compose up --build — создает все языковые образы, запускает панель управления на порту 8083, автоматически запускает стенд.
  3. Смотреть: открыть http://localhost:8083 (или общедоступный сайт, если активен размещенный запуск).
  4. Продлевать: добавить папку myruntime/, зеркально отразить пути к конечным точкам, зарегистрировать службу в docker-compose.yml, добавьте сервер в SERVERS в bench.sh.
  5. Настроить нагрузку: редактировать DURATION, THREADS, CONNECTIONS на вершине bench.sh — документируйте изменения в вашем ADR.
  6. Добавьте тесты в форме производства: например промежуточное программное обеспечение для аутентификации, запрос ORM, полезная нагрузка 50 КБ — сохраняйте четность между языками.

Для CI запустите Compose в ночном рабочем процессе, заархивируйте results.json как артефакт и не сработает только на заданных вами порогах регрессии (например, p99 +20% еженедельно за неделей в тесте 2).

10. Антипаттерны

  • Выбор победителя только теста 1 — простой текст предпочитает минимальные стопки; он игнорирует JSON, CPU и проблемы с маршрутизацией.
  • Игнорирование командных навыков — Ржавчина в производстве без наставников обходится дорого во времени.
  • Игнорирование стоимости хостинга — Увеличение числа запросов в секунду в 2 раза бесполезно, если объем памяти на модуль удваивает ваш счет.
  • Обязательное использование одного языка для всей организации — уничтожает законное разделение преимуществ и ядра.
  • Замена профилирования производства — синтетический HTTP ≠ ваш ORM, кеш или региональная задержка.
  • Сравнение разного оборудования — ноутбук Docker ≠ голое железо ≠ лимиты K8s; обратите внимание на класс в ADR.

11. Преимущества для инженерного лидерства

  • пакеты АРБ — экспортировать скриншоты панели управления + results.json + Составить хеш.
  • Независимые от поставщика доказательства — отсутствие рекламных материалов от одного поставщика облака или платформы.
  • Ясность внедрения — новые сотрудники видят, *почему* сервис A — это Go, а сервис B — Python.
  • Снижение риска — пилотируйте занявшего второе место в теневом сервисе, прежде чем перезаписывать.
  • Беседы FinOps — связать задержку хвоста с автомасштабированием и запасом памяти.
  • Дорожная карта платформы — оправдать инвестиции в навыки NGINX по сравнению с другим микросервисом K8s.

12. Ограничения

  • Синтетические рабочие нагрузки — семь HTTP-тестов не могут представлять потребителей Kafka, задания GPU или сложные графики ORM.
  • Докер-сеть — добавляет накладные расходы; абсолютные цифры отличаются от голого металла.
  • Одиночный класс машины — размещенные результаты отражают то оборудование, которое используется вымышленно; ваши цифры будут отличаться.
  • Нет слоя персистентности — эффекты базы данных и кэша изначально отсутствуют.
  • Короткая продолжительность пробега — 10 секунд на тест не могут привести к паузам GC или обрывам прогрева; распространяться на кампании по борьбе со стрессом.

Сохраняйте непрерывное профилирование (eBPF, APM, нагрузочные тесты и промежуточное тестирование) как источник достоверной информации для производства. Polyglot Benchmarks сужает язык и структура дебаты с воспроизводимыми исходными данными.

13. Заключение

Смещение стека по умолчанию удобно; это также то, как команды поставляют неподходящую среду выполнения для задания. Тесты полиглотов и примеры рабочих процессов запряженный поворот «какой язык победит?» в «какой язык побеждает» для этой строки рабочей нагрузки?» — с диаграммами, которые может привести ваш АРБ.

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

Опубликовано Workstation (workstation.co.uk). Панель мониторинга производительности размещена по адресу полиглот-benchmarks.fictionally.org в экосистеме вымышленных примеров.


SEO-снимок для этой статьи

  • SEO-заголовок: Тесты Polyglot: правильный инструмент для работы
  • Мета-описание: Сравните njs, Lua, Python, Go, Rust, Bun, Java и Kotlin при одних и тех же рабочих нагрузках HTTP. Воспроизводимая система, живая информационная панель, матрица решений для архитекторов.
  • Основные ключевые слова: полиглотные тесты, сравнение языков, архитектурные решения, примеры рабочих процессов, тест производительности, Rust vs Go, Java vs Kotlin, FastAPI, Javalin, Ktor
  • Twitter/X (до 280 символов): Тесты Polyglot: те же 7 HTTP-тестов для njs, Lua, Python, Go, Rust, Bun, Java, Kotlin — живая информационная панель + набор примеров рабочих процессов. Ни одного победителя; рамки принятия решений. #Rust #GoLang #Java #Kotlin #Bunjs #polyglot
  • Сообщение в LinkedIn: Мы опубликовали подробный обзор Polyglot Benchmarks — как перестать выбирать один стек для всей организации по привычке и начать сопоставлять время выполнения с рабочими нагрузками. Восемь языков (включая Java/Javalin и Kotlin/Ktor), семь сопоставимых тестов, Docker Compose + wrk, текущие результаты на сайте polyglot-benchmarks.fictionally.org, источник на github.com/bwalia/workflow-examples/tree/main/benchmarks. Включает матрицу решений, анти-шаблоны и рекомендации по ADR. От инженеров Workstation. #Rust #GoLang #Java #Kotlin #Bunjs #Lua #Python #njs #FastAPI #Javalin #Ktor #OpenResty #polyglot #benchmarks
Share this article

More in Technology

Jobshout SEO Analyst AI Agent — Analyse Any Website & Fix SEO Issues Automatically

Jobshout SEO Analyst AI Agent — Analyse Any Website & Fix SEO Issues Automatically

Technical brief: SEO Analyst modes, real workstation.co.uk run (score 44), findings with fix prompts, Improve/Publish paths, and Jobshout supervised agents

Read more
WSLVault: Steal the Server. Not the Secrets.

WSLVault: Steal the Server. Not the Secrets.

Technical brief: AES-256-GCM envelope hierarchy, cryptographic tenant isolation, engines, identity/MFA, active/active regions, Kubernetes deploy, and video chapters

Read more
Workstation WSL Proxy — Docker Image Optimisation, Build Cache, Full Deploy Workflow, and Shipping It with AI Assistance

Workstation WSL Proxy — Docker Image Optimisation, Build Cache, Full Deploy Workflow, and Shipping It with AI Assistance

Technical brief: prebuilt OpenResty Dockerfile, Buildx/GHA cache, Ansible extract, delivery pipeline DEPLOY_MODE, and an operator+agent loop for finishing pipeline work

Read more