Рубрики
Без рубрики

Краткое объяснение о режиме Quarkus

Одной из наиболее интересных особенностей Quarkus является возможность запуска приложений nativamen… Помеченный кварками, java, pt br, бразильскими разработчиками.

Одной из наиболее интересных особенностей Quarkus является возможность запуска приложений, изначально, что позволяет startup очень быстро, и объем памяти совсем маленький . В этой статье будет сделан обзор о том, что такое режим, как он работает, какие есть ограничения и как компилировать код в исходном коде.

Основной режим это просто код Quarkus компиляции, как если бы это был нормальный исполняемый файл (думаю, в код C, скомпилированный или же в веб-браузере). Этот процесс осуществляется с помощью виртуальной машины специальное GraalVM .

В традиционном процессе Java-код компилируется в формате, который называется байт . Во время выполнения, JVM берет этот код и преобразует его в двоичный код, в основном, на компьютере, где JVM работает (этот процесс называется JIT-или Как раз Вовремя (компиляция ).

Для создания образа в машинном коде это делается совсем другой процесс. A GraalVM ума ума текника чамада компиляция с опережением времени (компиляция AOT). Этот процесс не более это скомпилировать код прямо в двоичном формате без пройти через код.

В этом процессе, GraalVM применяется ряд оптимизаций, а также агрессивно. Среди этих оптимизаций, один из самых выделяется анализ кода и вывода классов, которые каким-либо образом, не будут выполнены в конце приложения.

Подводя вывод классы бесполезны, при компиляции кода в машинный код, результатом является исполняемый файл маленький, быстрый запуск и низкое потребление памяти.

Ума explicação mais detalhada подскажите, что такое encontrada нет руководство по GraalVM .

Использовать режим не является панацеей. Есть несколько предпосылок, которые код должен соответствовать он может быть составлен в GraalVM:

  1. Для компиляции изначально в вашу машину, необходимо установить несколько в некоторых зависимости и сделать некоторые настройки ;
  2. Коды, которые используют отражением могут быть проблемы, потому что, скорее всего, классы будут взяты из исполняемого конце;
  3. В JNI, который использует очень отражения не будет работать;
  4. Сериализация Java не будет работать;
  5. Java RMI, который зависит от сериализации также не будет работать;
  6. Юнит-тесты, требуется специальное замечание для тестирования в основном режиме;
  7. Динамические прокси также не сможет.

Помимо всего этого, процесс для компиляции кода на режим занимает много времени.

Полный список ограничений, которые могут привести к конфликту, отсутствует github da GraalVM .

Для компиляции в основном режиме, просто GraalVM, установленной и скомпилировать проект с profile правильно. Это может быть сделано с помощью следующего кода.

./mvnw package -Pnative.

Однако, процесс установки GraalVM может быть немного запутанным, и содержать некоторые ошибки. Поэтому, другой способ компиляции кода в собственный формат с помощью контейнера docker, который уже все правильно настроить и построить изображение с помощью docker build нескольких этапов. К счастью, уже есть образ docker готова для использования. Просто отредактировать файл .dockerignore, чтобы оставить фильтровать все, что не есть каталог target и запустить dockerfile ниже.

## Estágio 1: compilando nativamente
# baixando uma imagem que já tenha a GraalVM instalada e configurada
FROM quay.io/quarkus/centos-quarkus-maven:19.3.1-java11 AS build
# copiando o pom.xml
COPY pom.xml /usr/src/app/ 
# baixando todas as dependências do projeto
RUN mvn -f /usr/src/app/pom.xml -B de.qaware.maven:go-offline-maven-plugin:1.2.5:resolve-dependencies
# copiando o código-fonte e alterando o dono para o usuário quarkus
COPY src /usr/src/app/src
USER root
RUN chown -R quarkus /usr/src/app
USER quarkus
# compilando o código em formato nativo
RUN mvn -f /usr/src/app/pom.xml -Pnative clean package

## Estágio 2: criando a imagem docker utilizando o código recém compilado
# Usando a imagem da redhat
FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
# copiando o executável do container anterior
COPY --from=build /usr/src/app/target/*-runner /work/application

# dando as permissões ao usuário `1001`
RUN chmod 775 /work /work/application \
  && chown -R 1001 /work \
  && chmod -R "g+rwX" /work \
  && chown -R 1001:root /work

# expondo a porta 8080
EXPOSE 8080
USER 1001

# executando a aplicação
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

Для создания изображения с помощью этого dockerfile, просто сохраните вышеуказанный файл в каталоге src/main/docker/ имя Для создания изображения с помощью этого dockerfile, просто сохраните вышеуказанный файл в каталоге src/main/docker/

docker build -f src/main/docker/Dockerfile.multistage -t imagem-nativa-compilada .

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

docker run -i --rm -p 8080:8080 imagem-nativa-compilada

Несмотря на удивительно скорости никогда не использовал режим на производстве. У меня есть некоторые вопросы о том, как debugar, у меня много терпения, чтобы ждать его сделать весь процесс сборки и по-прежнему я не прошел по какой-то сценарий, где это было необходимо это оптимизация ресурсов.

Оригинал: “https://dev.to/lucasscharf/uma-breve-explicacao-sobre-o-modo-nativo-do-quarkus-1kn7”