Quarkus и Axiom Native Image Kit: несокрушимое комбо
Ноябрь 10, 2021
С появлением микросервисов разработка ПО вышла на новый уровень. Производительность приложений определяется компетентностью в области создания микросервисной архитектуры. И правда, нельзя просто так взять и разбить монолит на несколько частей, иначе интернет не был бы наводнен десятками статей и руководств по освоению этой современной технологии. Однако если на данном этапе вам кажется, что проще построить ядерный реактор, чем разделить ваше приложение на маленькие и эффективные сервисы, свяжитесь с нами: инженеры Axiom JDK с радостью ответят на ваши вопросы.
- Почему Quarkus?
- Quarkus + Axiom Native Image Kit: мощный старт!
- Как использовать Quarkus и NIK вместе?
- Заключение
- Полезные ссылки
Превратить приложение Java в сеть высокоэффективных микросервисов можно с помощью фреймворков. Конечно, все знают о самом известном из них, Spring. Однако вне зависимости от того, насколько он удобен, есть и другие инструменты, которые, возможно, больше подойдут для ваших нужд. В этой статье мы поговорим о фреймворке, только набирающем популярность: Quarkus.
Почему Quarkus?
Quarkus ー это стек технологий с открытым исходным кодом с поддержкой MicroProfile, оптимизирующий применение Jakarta EE для микросервисов. Это фреймворк Java, заточенный под работу с Kubernetes и адаптированный для OpenJDK HotSpot и GraalVM. При создании микросервисов Quarkus описается на API библиотеки Eclipse MicroProfile, а также на другие инструменты, такие как Apache Kafka, Camel, внедрение зависимостей, облачно-реляционное отображение Hibernate (аннотации JPA и JTA), RESTEasy (JAX-RS) и т.д. Он также поддерживает плагины Maven и Gradle, ввиду чего вы можете запустить приложение в режиме разработки на локальной или удаленной машине.
Чем Quarkus отличается от конкурентов?
Благодаря поддержке GraalVM разработчики могут использовать статическую (ahead-of-time, AOT) компиляцию для преобразования байт-кода в машинный код. Таким образом, приложения можно преобразовать в нативный исполняемый файл, не прибегая к динамическому сканированию и загрузке всех классов в JVM. Все классы по умолчанию инициализируются во время сборки. В результате приложение запускается гораздо быстрее и потребляет значительно меньше ресурсов. Результаты тестов1 показали, что «по сравнению с Spring, скорость запуска приложений на Quarkus в два раза выше, а само приложение потребляет в два раза меньше динамической памяти».
Кроме того, соответствие стандартам Java EE позволяет разработчикам использовать существующие API и запускать приложения в оптимизированной среде исполнения без необходимости их переписывать. По сути, можно использовать API из Java EE и расширить их в соответствии с собственными потребностями (например, использовать расширения Quarkus для реактивной обработки сообщений, Vert.x или Camel).
Однако у фреймворка Quarkus есть свои ограничения. Например, он в значительной степени опирается на Kubernetes, поэтому если ваша команда не работала с этой технологией, успешная миграция потребует времени. Более того, Quarkus пока поддерживает не все стандарты Java EE, и для него создано меньше библиотек, чем для Spring Boot.
Тем не менее фреймворк постоянно совершенствуется, поэтому в ближайшем будущем эти пробелы могут быть закрыты.
А пока давайте посмотрим, на что способен Quarkus в среде нативной компиляции.
Quarkus + Axiom Native Image Kit: мощный старт!
Как вы уже поняли, Quarkus рассчитан на работу с технологией нативной компиляции, которая идеально подходит для развертывания в облаке и serverless-разработки. Но вы будете приятно удивлены, когда узнаете, что производительность Quarkus можно улучшить. Как? Использовать его со специальным инструментом для ускорения приложений ー Axiom Native Image Kit.
Axiom Native Image Kit (NIK) ー это технология на базе GraalVM, которая преобразует Java-приложение в предварительно (AOT) скомпилированный исполняемый файл, который запускается автономно и почти моментально. NIK поддерживает большое количество платформ, включая легковесную ОС Alpine Linux с библиотекой musl. Благодаря полноценной поддержке Alpine Linux musl Axiom NIK ー идеальный инструмент для сведения к минимуму потребления ресурсов, достижения рекордного времени запуска (до 1/10 секунды) и экономии памяти. Более того, NIK позволяет вам создавать многоязычные проекты на различных языках программирования
Также NIK совместим с большинством версий JDK, поэтому вы можете полностью контролировать свои сборки. А тот факт, что он основан на LTS-версии Axiom JDK означает, что у вас будет доступ к исправлениям ошибок, патчам безопасности и другим улучшениям в течение минимум восьми лет.
Очевидно, что используя обе технологии вместе, фреймворк Quarkus и Axiom NIK, вы не прогадаете. А теперь давайте посмотрим, как запустить их вместе.
Как использовать Quarkus и NIK вместе?
Перед сборкой нативного исполняемого файла для Quarkus подготовим необходимые инструменты и ПО.
Сперва настроим инструментарий сборки для компилятора C.
-
На Linux необходимы GCC и пакеты для линковки glibc и zlib. *
# dnf (rpm-based) sudo dnf install gcc glibc-devel zlib-devel libstdc++-static # Debian-based distributions: sudo apt-get install build-essential libz-dev zlib1g-dev
- На Windows нужно установить Visual Studio 2017 Visual C++ Build Tools.
-
В случае MacOS все зависимости внедряются посредством XCode.
xcode-select --install
Для демонстрации того, как можно интегрировать Axiom NIK в Quarkus, мы возьмем базовое приложение Quarkus Hello World. Чтобы написать простое приложение Quarkus, следуйте инструкциям на сайте разработчика фреймворка (на английском языке).
Итак, у нас готово приложение Hello World. Теперь давайте сконфигурируем Native Image Kit.
Установите Axiom NIK. Комплект уже содержит Axiom VM, инструмент для создания нативного образа и языковые плагины. По завершению скачивания сверьте контрольную сумму в командной строке: она должна совпадать с указанной на странице загрузки.
-
Сконфигурируйте среду исполнения. В случае Linux и macOs, если у вас архив
.tar.gz / zip
, используйте переменную средыJAVA_HOME
чтобы обратиться по пути установленного пакета NIK:export JAVA_HOME=$HOME/Development/bellsoft-axiom-vm-openjdk11-21.2.0/
Если вы используете пакет deb, pkg/dmg, путь установки для macOS будет стандартным. В случае Windows необходимо использовать панель управления для установки переменной среды.
-
Установите инструмент
native-image
с помощьюgu install
. Как вариант, вы можете скачать версию NIK Core, которая содержит Axiom VM и инструмент для создания нативного образа без языковых плагинов. В этом случае используйте командуni install
:$JAVA_HOME/bin/gu install native-image
В результате нативный исполняемый файл для вашего приложения будет содержать код приложения, необходимые библиотеки, Java API, а также сокращенную версию виртуальной машины.
Если вы написали приложение Quarkus согласно инструкциям, файл pom.xml будет включать следующий профиль:
<profiles> <profile> <id>native</id> <properties> <quarkus.package.type>native</quarkus.package.type> </properties> </profile> </profiles>
-
Для создания нативного исполняемого файла, выполните
./mvnw package -Pnative
. Процесс упаковки нативного исполняемого файла может занять несколько минут, так что наберитесь терпения Вот и все, мы создали нативный образ приложения! Получившийся исполняемый файл можно найти в папкеtarget/getting-started-1.0.0-SNAPSHOT-runner
. Чтобы убедиться, что все работает, запустите приложение. Вы увидите следующее:
Приложение открывается по адресу http://localhost:8080
.
Заключение
В этой статье мы обсудили преимущества фреймворка Quarkus при создании облачно-нативных приложений Java. Мы также узнали, как повысить его производительность с помощью Axiom Native Image Kit. Процесс интеграции этих технологий не такой сложный, но в итоге вы получите тройной бонус:
- образ небольшого размера для создания крошечных контейнеров;
- впечатляюще быстрый запуск;
- значительно меньшее потребление памяти.
Познакомьте ваше приложение с этим тандемом: вы не разочаруетесь