Создаем созвездие микросервисов с Micronaut и Axiom Native Image Kit
Ноябрь 24, 2021
Микросервисы стремительно захватывают IT-инфраструктуру. Огромные монолиты уходят в прошлое, уступая место приложениям, разбитым на маленькие эффективные сервисы. Их удобство сложно переоценить: приложение может разрастаться, меняться, при этом у разработчиков нет необходимости переписывать его целиком, а только вносить изменения в некоторые микросервисы или добавлять новые. Новые технологии, например, фреймворки, позволили компаниям создавать целые созвездия микросервисов. Самый популярный из них ー Spring Boot, значительно упрощающий создание Spring-приложений. Тем не менее на рынке присутствуют и другие продукты, которые, возможно, лучше отвечают вашим требованиям. В этой статье мы рассмотрим один из них: Micronaut.
Если вы пока в процессе освоения микросервисной архитектуры, свяжитесь с нами. Наши инженеры ответят на любые вопросы или помогут с миграцией с Oracle JDK на Axiom JDK .
Особенности Micronaut
Micronaut ー это фреймворк на JVM, разработанный компанией Object Computing, Inc. Другой известный продукт компании ー мощный фреймворк Grails на Groovy. Micronaut является наследником Grails. Он поддерживает три популярных языка: Java, Kotlin и Groovy (в перспективе Scala) и предназначен для удобной разработки микросервисов.
Он включает в себя инструменты и функции, необходимые для создания облачно-нативного микросервисного приложения:
- внедрение зависимостей на этапе компиляции и инверсия управления;
- поддержка реактивного программирования;
- обнаружение сервисов;
- AOT-компиляция;
- HTTP-маршрутизация;
- HTTP Client с распределением нагрузки со стороны клиента;
- бесшовное развертывание API.
Целью разработчиков Micronaut было нивелирование типичных недостатков других фреймворков посредством быстрого времени запуска, меньшего потребления памяти, минимального использования прокси-серверов и рефлексии, а также быстрого и простого модульного тестирования. Кроме того, Micronaut поддерживает создание функций AWS Lambda, что очень полезно при написании serverless-приложений.
Если вы уже работали с фреймворком Spring, вы без проблем освоите Micronaut.
Чтобы лучше познакомиться с работой этого фреймворка, давайте создадим микросервис в качестве примера.
Создание микросервиса
Для начала установите Micronaut. Вы можете скачать бинарную сборку с официального сайта разработчика Micronaut (на английском языке) или воспользоваться любым удобным менеджером пакетов: Homebrew, Chocolatey или SDKMAN!. Если вы используете SDKMAN!, выполните следующую команду в терминале:
sdk install micronaut
После этого будут установлены все бинарные файлы, необходимые для создания, тестирования и развертывания приложений на Micronaut, вместе с Micronaut CLI.
Далее создайте приложение (Java будет использована по умолчанию, если вы не поставите флаг --lang
):
mn create-app --features=graalvm example.micronaut.micronautguide --build=maven
Примечание: если вы используете Intellij IDEA, включите обработку аннотаций!
Давайте напишем базовое приложение со списком больниц. Уже готовый пример этого приложения можно скачать с официального сайта Micronaut. Однако мы рекомендуем самостоятельно создать приложение, выполнив все требуемые шаги.
-
Создайте класс Hospital и добавьте аннотацию @Introspected:
-
Создайте класс Service и добавьте аннотацию @Singleton. Напишите метод, который будет возвращать случайную больницу:
-
Затем создайте класс Controller, возвращающий объект класса Hospital. Micronaut автоматически конвертирует его в формат JSON в ответе:
Итак, приложение готово. Вы можете сразу запустить его, но мы предлагаем рассмотреть, как сделать это с помощью Axiom Native Image Kit, превратив программу в нативный образ.
Интеграция с Axiom NIK
Теперь, когда у нас есть готовое приложение, создадим нативный образ Micronaut, использовав Axiom Native Image Kit (NIK). Axiom NIK ー это технология на базе GraalVM, которая обеспечивает плавную реализацию многоязычных проектов на различных языках программирования. NIK ー идеальный инструмент, позволяющий свести к минимуму потребление ресурсов, достичь рекордного времени запуска (до 1/10 секунды) и сэкономить память. Инструмент основан на LTS-версии Axiom JDK с доступом к исправлениям ошибок, обновлениям безопасности и другим улучшениям в течение 8 лет.
Закажите и установите подходящую версию Axiom NIK (комплект уже содержит Axiom VM, инструмент для создания нативного образа и языковые плагины). Как вариант, вы можете установить версию NIK Core, содержащую 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
:$JAVA_HOME/bin/gu install native-image
В результате нативный исполняемый файл для вашего приложения будет содержать код приложения, необходимые библиотеки, Java API, а также сокращенную версию виртуальной машины.
-
После установки NIK создайте нативный образ, выполнив следующую команду:
./mvnw package -Dpackaging=native-image
Вы можете создать образ Docker, выполнив
./mvnw package -Dpackaging=docker-native
-
После этого запустите приложение с помощью нативного исполняемого файла или Docker.
Как видите, приложение запускается за 1,3 секунды ー впечатляющий результат!
Заключение
Micronaut ー это фреймворк, который упрощает разработку микросервисов. Он также поддерживает Kotlin и Groovy, поэтому вы можете создать несколько микросервисов на разных языках и объединить их с помощью системы обнаружения сервисов Consul. Таким образом, ваше созвездие может разрастись до целой галактики!
Мы увидели, что создавать нативные образы с Axiom Native Image Kit удобно, а в результате ваше приложение будет запускаться невероятно быстро. Если вы хотите узнать больше о функциях Axiom NIK или преимуществах маленьких контейнеров для вашего бизнеса, свяжитесь с нашими инженерами. Благодаря нашим совместным усилиям производительность ваших приложений взлетит до небес!