Статьи

Микросервисы: Quarkus vs. Spring Boot

Кто победит? Весенний ботинок или Quarkus.

В эпоху контейнеров (« эпоха докеров ») Java все еще живет, борется за это или нет. Java всегда была (не) известна своей производительностью, в основном из-за уровней абстракции между кодом и реальной машиной, стоимости многоплатформенности (однажды напиши, запусти где-нибудь — помнишь это?), С JVM в -в промежутке (JVM: программный компьютер, который имитирует действия реальной машины).


Вам также может понравиться:
Все о Spring Boot [Учебники и статьи]

В настоящее время, с микросервисной архитектурой, возможно, это больше не имеет никакого смысла и не дает никаких преимуществ, создавая что-то мультиплатформенное (интерпретируемое) для чего-то, что всегда будет работать в одном месте и на одной платформе ( Docker Container — среда Linux ). Переносимость теперь менее актуальна (возможно, более чем когда-либо), эти дополнительные уровни абстракции не важны.

Сказав это, давайте выполним простое и грубое сравнение между двумя альтернативами для генерации микросервисов в Java : очень известным Spring Boot и не очень хорошо известным (пока) Quarkus .

Соперники

Кто такой Кваркус ?

гоночный автомобиль Quarkus

Набор технологий с открытым исходным кодом, адаптированный к GraalVM и HotSpot для написания Java-приложений . Он предлагает (обещает) сверхбыстрое время запуска и меньший объем памяти. Это делает его идеальным для контейнеров и серверных рабочих нагрузок. Он использует Eclipse Microprofile ( JAX-RS, CDI, JSON-P ), подмножество Java EE для построения микросервисов.

GraalVM является универсальной и полиглотной виртуальной машиной ( JavaScript, Python, Ruby, R, Java, Scala, Kotlin). GraalVM (в частности, Substrate VM ) делает возможным предварительную компиляцию (AOT), преобразуя байт-код в машинный код, в результате чего получается двоичный файл, который может выполняться естественным образом .

Имейте в виду, что не каждая функция доступна в собственном исполнении, компиляция AOT имеет свои ограничения. Обратите внимание на это предложение (цитируя команду GraalVM):


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

Так, например, Reflection и Java Native Interface (JNI) не будут работать, по крайней мере, из коробки (требует дополнительной работы). Вы можете найти список ограничений здесь, в документе Native Image Java Limitations .

Кто такой весенний ботинок ?

В самом деле? Ну, просто сказать что-то (не стесняйтесь пропустить это), одним предложением: Spring Boot, построенный на основе Spring Framework, является средой с открытым исходным кодом, которая предлагает гораздо более простой способ создания, настройки и запуска веб-приложений Java. , Делая это хорошим кандидатом на микросервисы.

Подготовка к битве — Создание образов Docker

Quarkus Image

Давайте создадим приложение Quarkus, чтобы обернуть его позже в образ Docker. По сути, мы будем делать то же самое, что и руководство по началу работы с Quarkus .

Создание проекта с использованием архетипа Quarkus Maven:


Dockerfile