Всем привет! Сегодня хочу зажечь настоящий холивар — но с практическим уклоном. Речь пойдет о нашем большом рефакторинге, вернее, о почти полном переписывании ядра нашего API-гейтвея.

Немного контекста: У нас классический монолит на Java (Spring Boot), который неплохо служил нам лет 5. Но с ростом нагрузки до 100k+ RPS мы уперлись в лимиты:

  • Потребление памяти под 16-32 GB на инстанс

  • GC паузы по 200-300ms в пике

  • Стоимость облачной инфраструктуры стала сопоставима с зарплатой нескольких миддлов

И мы приняли решение — переписать самые горячие пути на что-то более эффективное. Кандидаты: Go, Rust и современный C++.

Go: модный и быстрый на старт

Плюсы:

  • Простота написания конкурентного кода (горутины — это действительно круто)

  • Быстрая компиляция

  • Отличная стандартная библиотека для сетевых задач

Минусы, с которыми столкнулись:

  • Сборка мусора всё ещё дает просадки, хоть и меньше чем в Java

  • Нет настоящей работы с памятью — в некоторых сценариях это критично

Вердикт: Идеально для быстрого старта, но не дает того контроля, который хочется в ядре системы.

Rust: хайп и реальность

Плюсы:

  • Нулевая стоимость абстракций — это не шутка

  • Гарантии безопасности памяти без GC

  • Невероятно умный компилятор

Минусы на практике:

  • Кривая обучения круче, чем кажется

  • Время компиляции в больших проектах измеряется минутами

  • Некоторые концепции (lifetimes) требуют переосмысления архитектуры

Вердикт: Мощно, но дорого в разработке и поддержке.

C++23: старый добрый друг с новыми трюками

Что удивило:

  • Модули наконец-то работают как надо

  • Coroutines в стандартной библиотеке

  • Концепты делают шаблоны читаемыми

  • Меньший оверхед по памяти чем у Go и Rust

Боль:

  • До сих пор нет нормальной системы пакетов (хотя vcpkg и Conan спасают)

  • Нужны очень опытные разработчики

Наш выбор и почему

После 3 месяцев прототипов и бенчмарков мы остановились на... Zig.

Шутка! Хотя Zig мы тоже смотрели — но для продакшена рано.

Реальный выбор — Rust. И вот почему:

  1. Долгосрочная выгода: Да, первые 2 месяца скорость разработки была ниже. Но потом — стабильный рост без дебаггинга багов с памятью и data races.

  2. Экосистема: Tokio + Hyper показали производительность лучше чем Go net/http и сравнимую с оптимизированным C++.

  3. Компиляция в WASM: Это оказалось killer feature! Мы можем компилировать отдельные модули в WASM и запускать их в разных средах.

Что в сухом остатке через 6 месяцев:

  • Потребление памяти: упало в 4-5 раз

  • Производительность: выросла в 2-3 раза

  • Количество багов: критических — почти ноль

  • Стоимость инфраструктуры: уменьшилась на 60%

Вывод: Не существует идеального языка. Но есть идеальный язык для вашей команды и задачи. Для нас это оказался Rust — несмотря на все сложности, он дал тот уровень контроля и производительности, который нам был нужен.

А что выбираете вы для высоконагруженных сервисов в 2025? Делитесь в комментах!

P.S. Кто заинтересовался — в следующем посте распишу наш стек инструментов для Rust в продакшене: мониторинг, дебаггинг, деплой...

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А что бы выбрали Вы для высоконагруженного бэкенда в 2025?
41.3%Rust — будущее за безопасностью и производительностью!57
24.64%Go — простота и скорость разработки рулят!34
22.46%C++ — стабильность и контроль, куда без него?31
8.7%Java/Kotlin + GraalVM — не надо ничего переписывать, просто оптимизировать!12
2.9%Другое (напишу в комментариях)4
Проголосовали 138 пользователей. Воздержались 19 пользователей.