← Назад к вопросам

Как использовал Quarkus на прошлой работе

1.0 Junior🔥 141 комментариев
#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Использование Quarkus в микросервисной архитектуре

На предыдущей работе мы выбрали Quarkus для миграции микросервисов от Spring Boot. Это было стратегическое решение, ориентированное на облачные вычисления и контейнеризацию.

Контекст проекта

Мы разрабатывали систему платёжных сервисов с несколькими микросервисами, развёрнутыми в Kubernetes. Основная боль была в:

  • Времени холодного старта Spring Boot приложений (15-20 секунд)
  • Потреблении памяти JVM (500+ MB на сервис)
  • Замедленном масштабировании при пиках нагрузки

Quarkus обещал решить эти проблемы через native compilation с GraalVM.

Архитектурные особенности

Native Executable Compilation — ключевая фишка. Quarkus компилирует Java код в native бинарь через GraalVM. Результаты были впечатляющими:

  • Старт: <100ms (вместо 15 сек)
  • Память: 30-50 MB (вместо 500 MB)
  • Это критично для serverless функций в AWS Lambda

Reactive Стек — Quarkus по умолчанию поддерживает Reactive Extensions (RxJava, Project Reactor). Я использовал:

@RestController
@Path("/payments")
public class PaymentResource {
    @Inject
    PaymentService paymentService;
    
    @GET
    @Path("/{id}")
    public Uni<Payment> getPayment(@PathParam("id") Long id) {
        return paymentService.findById(id);
    }
    
    @POST
    public Uni<Response> createPayment(Payment payment) {
        return paymentService.create(payment)
            .map(p -> Response.ok(p).build());
    }
}

Uni — абстракция для Single значения (аналог Mono в Spring Reactor). Это позволяет обрабатывать тысячи одновременных запросов на небольших ресурсах.

Интеграции

Quarkus RESTEasy — аналог Spring MVC, но быстрее и легче. Использовал JAX-RS аннотации:

@Path("/users")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class UserResource { ... }

Quarkus Data (Panache) — ORM с красивым API, похожим на Django ORM:

@Entity
public class User extends PanacheEntity {
    public String name;
    public String email;
}

// В сервисе:
List<User> users = User.listAll();
User user = User.findById(1L);
User.delete("email", "test@example.com");

Panache автоматически генерирует CRUD методы, что снижает boilerplate.

Dependency Injection

Quarkus использует CDI (Contexts and Dependency Injection), стандарт Java EE:

@Service
public class PaymentService {
    @Inject
    PaymentRepository repository;
    
    @Transactional
    public Payment process(Payment p) { ... }
}

Высокая совместимость со Spring аннотациями через адаптеры, но нативно используется CDI.

Configuration & Extensions

application.properties — конфигурация похожа на Spring Boot. Использовал для переключения профилей (dev, test, prod):

# Dev profile
%dev.quarkus.http.port=8080
%dev.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/paydb

# Prod profile
%prod.quarkus.datasource.jdbc.url=jdbc:postgresql://prod-db:5432/paydb

Extensions — механизм расширения. Использовал:

  • quarkus-jdbc-postgresql для БД
  • quarkus-jsonb для JSON сериализации
  • quarkus-liquibase для миграций БД
  • quarkus-kubernetes для автогенерации Kubernetes манифестов

Development Experience

Live Reload — Quarkus Developer Mode обновляет приложение при изменении кода без перезагрузки. Очень удобно:

./mvnw quarkus:dev

Тестирование — Quarkus обеспечивает быстрые тесты благодаря native compilation:

@QuarkusTest
class PaymentResourceTest {
    @Test
    void testGetPayment() {
        given()
            .get("/payments/1")
            .then()
            .statusCode(200);
    }
}

Production Results

После миграции на Quarkus:

  • Масштабирование: Kubernetes pod autoscaling стал намного эффективнее
  • Стоимость: Уменьшилась потребляемая память в 10 раз
  • Отказоустойчивость: Быстрый старт критичен для recovery при сбоях
  • Serverless: Смогли запустить некоторые сервисы как AWS Lambda функции

Вызовы

Не всё было гладко:

  • GraalVM Reflection: Dynamically loaded классы требуют reflection конфигурации
  • Dependency версии: Не все старые зависимости совместимы с native compilation
  • Debugging: Поиск ошибок в native бинарях более сложен
  • Привыкание: Команда привыкала к новому стеку и документации

Итог

Quarkus — отличный выбор для микросервисов в Kubernetes и облачных окружениях. Стоимость разработки выше (требует специалистов), но ROI велик для систем, чувствительных к времени старта и потреблению ресурсов. Для традиционных корпоративных приложений Spring Boot может быть более практичным.