Битва фреймворков: сравнение высокопроизводительных HTTP-библиотек

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Мир веб-разработки предлагает бесконечное количество вариантов HTTP-фреймворков для разных языков программирования. Но как разработчикам понять, какие из них обеспечивают действительно высокую производительность? Под катом команда блога CodeReliant* проводит прямое сравнение некоторых из лучших претендентов на быстродействие. Рассматривает популярные варианты на Javascript/Bun, Java, C#, Go и Rust, проводит бенчмаркинг, оценивает их пропускную способность и время отклика при тестировании.

Выбранные для сравнительного анализа фреймворки имеют репутацию высокопроизводительных, — но посмотрим, как это понятие реализуется в разных стеках.

*Обращаем ваше внимание, что позиция автора может не всегда совпадать с мнением МойОфис.


Вот пять участников тестирования:

  • Java 21 + vertex 4.4.6

  • JS/Bun 1.0.6 + elysiajs 0.7

  • C# 12 + dotnet/ASP.NET 8.0 RC2

  • Go 1.21.3 + fiber 2.49.2

  • Rust 1.73.0 + actix-web 4

С помощью стресс-тестирования мы получим достоверные данные об их возможностях. Наше сравнение "лоб в лоб" фокусируется на скорости и масштабируемости с нулевой конфигурацией, чтобы вы могли выбрать правильный фреймворк для своего следующего веб-проекта с высоким трафиком. Если вы хотите ускорить работу API, создать системы с низкой задержкой или выжать максимум из ваших серверов, это сравнение поможет вам выбрать высокопроизводительный HTTP-фреймворк, подходящий для вашего технологического стека.

Окружение и тестовая система

Для тестирования мы запустим минимальную версию HTTP-сервера, возвращающую ответ hello world при запросе /.

Запустим сервер на машине Hetzner:

  • ОС: Ubuntu 22.04.3 LTS

  • Ядро: 5.15.0-86-generic

  • Архитектура: ARM aarch64

  • Ресурсы: 4 vCPU & 8 GB RAM

Генератор клиентской нагрузки будет находиться на отдельной машине с аналогичными характеристиками, но большими ресурсами — 8 vCPU и 16 GB RAM.

Java и Vertex

Сгенерируем стартовый проект vertex, используя сайт. Также мы будем использовать java 21-oracle, которую только что установили с помощью sdkman.

package io.codereliant.performance;

import io.vertx.core.AbstractVerticle;
import io.vertx.core.Promise;

public class MainVerticle extends AbstractVerticle {

  @Override
  public void start(Promise<Void> startPromise) throws Exception {
    vertx.createHttpServer().requestHandler(req -> {
      req.response()
        .putHeader("content-type", "text/plain")
        .end("Hello World!");
    }).listen(80, http -> {
      if (http.succeeded()) {
        startPromise.complete();
        System.out.println("HTTP server started on port 80");
      } else {
        startPromise.fail(http.cause());
      }
    });
  }
}

Просто изменив порт на 80 вместо 8888 и изменив возвращаемую строку на Hello World вместо текста по умолчанию, мы соберем наш сервер с помощью mvn package и запустим его с помощью java -jar target/performance-1.0.0-SNAPSHOT-fat.jar.

java -jar target/performance-1.0.0-SNAPSHOT-fat.jar
HTTP server started on port 80
Oct 15, 2023 10:56:15 PM io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
INFO: Succeeded in deploying verticle

Bun и Elysia

Elysia упрощает создание проекта: сперва вызываем bun create elysia perf-app, а затем — bun run index.ts.

Для справки мы используем Bun 1.0.6 и Elysia 0.7.0.

import { Elysia } from "elysia";

const app = new Elysia().get("/", () => "Hello World").listen(80);

console.log(
  `						
Источник: https://habr.com/ru/companies/ncloudtech/articles/802007/


Интересные статьи

Интересные статьи

Все тестировалось на очень тупеньких запросах о написании python кода, написании рассказа на русском, cоздания playbook для Ansible c дефолтовыми threads = 4 и number of tokens to predict = 200
Сравнение трех самых популярных Managed Kubernetes платформ. Kubernetes уже стал синонимом оркестрации контейнеров, поэтому каждый облачный провайдер активно разрабатывает под него сво...
Доброго времени суток, друзья! Предлагаю Вашему вниманию результаты небольшого исследования — визуального сравнения 13 CSS-фреймворков. Цель исследования — определить, како...
Нейронные сеточки захватывают мир. Они считают посетителей, контролируют качество, ведут статистику и оценивают безопасность. Куча стартапов, использование в промышленности. Замечательные фрейм...
В последнее время производители FPGA и сторонние компании активно развивают методы разработки для FPGA, отличающиеся от привычных подходов использованием высокоуровневых средств разработки. Я...