Как собрать микросервис и не сойти с ума от несовместимых протоколов

29 мар 2026
5,138
1,017
179
1 месяц

Представьте ситуацию: вы пишете проект на Spring Boot, но фронтенд-команда просит gRPC для скорости, мобильное приложение требует REST, а старый легаси-модуль в подвале всё еще общается через Apache Thrift. Обычно это превращается в зоопарк из разных библиотек, конфигов и головной боли при попытке заставить всё это работать вместе.

Я наткнулся на Armeria — проект от инженеров LINE Corporation. Его создал Тхэджин Хан, тот самый человек, который подарил нам Netty. И это чувствуется сразу. Armeria — это не просто очередной фреймворк, а скорее швейцарский нож для асинхронных микросервисов, который умеет "дружить" самые разные технологии в одном приложении.

GitHub stars Twitter Follow Discord GitHub contributors GitHub commit activity Maven Central GitHub release date Revved up by Develocity

Что за зверь такой

Если коротко, Armeria — это реактивный микросервисный фреймворк, построенный на базе Netty. Его главная фишка в том, что он позволяет запускать HTTP/2, gRPC, Thrift и обычные REST-сервисы на одном и том же порту.

Авторы продвигают идею "build at your pace" (строй в своем темпе). Это значит, что вам не нужно переписывать всё приложение, чтобы внедрить gRPC или перейти на реактивные стримы. Armeria мягко встраивается в текущий стек, будь то Spring Boot или Dropwizard.

Реклама

Чем Armeria может облегчить жизнь

Главное преимущество — это всеядность. Вместо того чтобы городить огород из разных серверов, вы используете один ServerBuilder.

Один порт для всего

Вы можете повесить на 8080 порт gRPC-сервис, статику (HTML/JS) и какой-нибудь JSON API. Armeria сама разберется, какой протокол пришел по проводу, и направит запрос куда нужно. Это дико удобно при отладке и настройке инфраструктуры в Kubernetes.

Встроенная документация (DocService)

Это, пожалуй, моя любимая фича. Если вы добавите DocService, Armeria автоматически создаст веб-интерфейс, где можно посмотреть все ваши gRPC или Thrift методы. Там же их можно протестировать прямо из браузера, как в Swagger, но для бинарных протоколов. Для gRPC, где всегда была проблема "как это по-быстрому дернуть без Postman", это спасение.

Реактивность из коробки

Фреймворк полностью асинхронный. Он поддерживает Java 8+, Kotlin и отлично дружит с Reactive Streams. Если вы работаете с высоконагруженными системами, где важна каждая миллисекунда и эффективное использование потоков, Armeria даст фору многим тяжеловесным решениям.

Клиентская часть

Armeria — это не только сервер. У неё мощный клиент, который умеет в автоматические ретраи, балансировку нагрузки на стороне клиента и работу с Service Discovery (например, через ZooKeeper или DNS).

Как это выглядит в коде

Давайте посмотрим, как быстро поднять сервер. Код на Java выглядит лаконично:

Server sb = Server.builder()
    .http(8080)
    .service("/", (ctx, res) -> HttpResponse.of("Hello, Armeria!"))
    // Добавляем gRPC сервис
    .service(GrpcService.builder()
        .addService(new MyHelloService())
        .build())
    // Включаем ту самую чудо-документацию
    .serviceUnder("/docs", new DocService())
    .build();

sb.start().join();

Всего несколько строк, и у нас готов сервер, который понимает и HTTP/1.1, и HTTP/2, и gRPC, да еще и документацию сам рисует.

Технический бэкграунд

Проект живет в LINE — это огромный мессенджер, популярный в Азии. Там крутятся колоссальные нагрузки, так что Armeria проверена в настоящем "бою". В основе лежит Netty, но Armeria скрывает всю его низкоуровневую сложность за приятным API.

Интересно, что разработчики не пытаются запереть вас в своей экосистеме. Если вам нравится Spring Boot, есть готовая интеграция armeria-spring-boot-starter. Она позволяет использовать Armeria в качестве основного веб-сервера вместо Tomcat или Jetty, сохраняя все привычные аннотации @RestController.

Стоит ли пробовать

Проект точно подойдет тем, кто:

  1. Переходит на gRPC, но не хочет отказываться от REST.
  2. Ищет легкую альтернативу Spring WebFlux.
  3. Устал настраивать прокси-серверы для объединения разных типов трафика.

Из минусов: документация на официальном сайте иногда кажется суховатой, а сообщество в России пока не такое большое, как у того же Spring. Но за проектом стоят серьезные ребята, коммиты идут ежедневно, а список контрибьюторов внушает уважение.

Если вы планируете новый микросервис или хотите навести порядок в текущем API, Armeria — отличный кандидат на "попробовать". Она дает ту гибкость, которой часто не хватает большим фреймворкам.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.