Высокопроизводительная платформа Java в эпоху облачных технологий — Quarkus (1)

Java

—— Quarkus & GraalVM представили, создали и запустили первый проект


Серия сообщений в блоге Quarkus


Введение в Кваркус

Quarkus — это полнофункциональная нативная платформа Java для Kubernetes, разработанная для виртуальной машины Java (JVM) и встроенной компиляции для оптимизации Java специально для контейнеров и превращения ее в эффективную платформу для бессерверных, облачных сред и сред Kubernetes.

Quarkus работает с популярными стандартами, платформами и библиотеками Java, такими как Eclipse MicroProfile, Apache Kafka, RESTEasy (JAX-RS), Hibernate ORM (JPA), Spring, Infinispan, Camel и другими.

Решение Quarkus для внедрения зависимостей основано на CDI (внедрение контекста и зависимостей) и включает в себя структуру расширения для расширения функциональности и настройки, начальной загрузки и интеграции в ваше приложение. Добавить красширятьЭто так же просто, как добавить зависимости; в качестве альтернативы вы можете использовать инструмент Quarkus.

Еще одна примечательная особенность заключается в том, что он предоставляет GraalVM, виртуальную машину общего назначения, используемую для запуска приложений, написанных на нескольких языках, включая Java и JavaScript, с правильной информацией для естественной компиляции приложений.

Рэд Хэт составил следующий список, чтобы проиллюстрировать преимущества использования Quarkus:Контрольный список

Quarkus против традиционных фреймворков Java

img
Quarkus против традиционного стека технологий

Официальное изображение, показывающее подробное сравнение некоторых данных времени выполнения, разработанных с использованием фреймворка Quarkus и с использованием традиционного фреймворка.Видно, что потребление памяти и скорость отклика интерфейса проекта Quarkus, работающего в JVM, значительно лучше, чем у традиционного фреймворка. , Стек технологий Java. После компиляции Quarkus в локальный исполняемый файл (локальное зеркало) его преимущества можно сказать очень очевидны.

Введение в GraalVM

GraalVM — это высокопроизводительная виртуальная машина, которая может значительно повысить производительность программ и эффективность работы, что делает ее идеальной для микросервисов. Он был разработан для поддержки приложений, написанных на разных языках (Java, JavaScript, языках на основе LLVM, таких как C и C++) и других динамических языках. Он устраняет барьеры между различными языками программирования и обеспечивает совместимость многоязычных общих сред выполнения. Он может работать автономно или в контексте OpenJDK, Node.js или базы данных Oracle.

GraalVM system diagram

Для Java-приложений GraalVM может дать много ценных преимуществ: быстрее запускать их, обеспечивать расширяемость с помощью языков сценариев (JavaScript, R, Python...) или создавать заблаговременно скомпилированные нативные образы (native-image).

Более подробную информацию о GraalVM можно найти здесь:эта статья.

Установка GraalVM

В этой статье мы используемSDKMANдля установки GraalVM. SDKMAN — это инструмент для управления параллельными версиями нескольких комплектов для разработки программного обеспечения в большинстве систем на базе Unix. Он предоставляет удобный интерфейс командной строки (CLI) и API для установки, переключения, удаления и перечисления кандидатов. Ранее известный как Groovy enVironment Manager (GVM), он был вдохновлен очень полезными инструментами RVM и rbenv, которые широко используются в сообществе Ruby.

Установить SDKMAN

Выполните следующую команду для установки:

$ curl -s "https://get.sdkman.io" | bash
$ source "$HOME/.sdkman/bin/sdkman-init.sh"	

Убедитесь, что ADKMAN установлен, выполнив следующую команду:

$ sdk version

Установить GraalVM

Выполните следующую команду:

$ sdk list java

Вы можете видеть, что SDKMAN перечисляет все поддерживаемые дистрибутивы Java.

image-20200717142755813

Находим дистрибутив GraalVM

image-20200717142840033

На момент написания этой статьи последняя версия GraalVM — 20.1.0.r11-grl, поэтому мы установим эту версию. Выполните следующую команду, чтобы установить GraalVM:

$ sdk install java 20.1.0.r11-grl

На данный момент GraalVM установлен! Мы можем запустить следующую команду, чтобы определить, установлена ​​ли GraalVM:

$ java -version

image-20200717143216643

Создать проект

У нас есть несколько способов создания проектов Quarkus

Создайте проект Quarkus с помощью Intellij IDEA

Нажмите в строке меню File>New>Project..., чтобы создать новый проект.

image-20200717150609041

Нажмите «Далее» и введите соответствующую информацию, «Далее»> «Далее...», создание завершено.

Создайте проект Quarkus с помощью командной строки Maven.

Выполните следующую команду, чтобы создать проект Quarkus:

mvn io.quarkus:quarkus-maven-plugin:1.6.0.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
cd getting-started

На этом создание проекта завершено!

Стартовый проект

Используем IDEA для открытия проекта

image-20200717152929281

В Quarkus нет класса запуска, как в Spring Boot, Helidon и других фреймворках, нам нужно запустить проект, выполнив команду Maven.

Выполните следующую команду в консоли IDEA, чтобы запустить проект:

./mvnw compile quarkus:dev

Успешно стартовал!

image-20200717153314096

Конечно, каждый раз запускать командную строку будет неудобно, мы можем настроить проект на быстрый запуск через следующую конфигурацию:

image-20200717153444892

Щелкните значок «+» в верхнем левом углу, чтобы добавить конфигурацию Maven, например, в левый столбец, введите «compile quarkus:dev» в командной строке в правом столбце и нажмите «ОК».

image-20200717153542033

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

image-20200717153914940

запустить тест

Откройте тестовый класс в проекте и увидите следующий код:

@QuarkusTest  //1
public class ExampleResourceTest {
    @Test
    public void testHelloEndpoint() {
        given()
            .when().get("/hello")
            .then()
            .statusCode(200) //2
            .body(is("hello"));
    }
}
  1. Аннотируя бегун с помощью @QuarkusTest, вы можете указать JUnit запустить приложение перед тестированием.
  2. Проверьте код состояния и содержимое ответа HTTP.

По умолчанию тесты будут запускаться на порту 8081, чтобы избежать конфликтов с запущенными приложениями. Quarkus автоматически настраивает RestAssured для использования этого порта. Если вы хотите протестировать другие пути, вы можете использовать аннотацию @TestHTTPResource, чтобы внедрить тестируемый URL-адрес непосредственно в поле тестового класса. Тип этого поля может быть String, URL или URI. Нам нужно указать значение тестового пути для этой аннотации. Например, если бы я хотел протестировать сервлет, сопоставленный с /myservlet, я бы просто добавил в тест следующее:

@QuarkusTest  
public class ExampleResourceTest {
    @TestHTTPResource("/myservlet")
    URL testUrl;

    @Test
    public void testHelloEndpoint() {
        given()
            .when().get(testUrl)
            .then()
            .statusCode(200) 
            .body(is("hello"));
    }
}

Тестовым портом можно управлять, настроив свойство quarkus.http.test-port в файле конфигурации проекта. Quarkus также создал системное свойство с именем test.url, значение которого будет установлено на базовый URL-адрес теста (BasePath).

Суммировать

Мы вступили в эру облачных сервисов и микросервисов, распрощались с громадностью и сложностью крупномасштабных монолитных приложений и пожинаем огромные преимущества, которые приносят микросервисы. Но начали возникать некоторые проблемы. С увеличением количества микрослужб избыточные и бесполезные зависимости, которые когда-то возникали в одном приложении, изначально медленный процесс запуска проектов Java и проблемы оптимизации JIT распространяются на каждую микрослужбу. Более того, традиционная спецификация Java EE не имеет решения модели микросервиса, и проблему нужно решать срочно. К счастью, с появлением некоторых новых сред разработки Java, таких как Quarkus, Helidon и т. д., эта ситуация улучшилась (и экосистема Spring также начала поддерживать GraalVM), и они сделали Java более локализованным, независимо от проекта. Значительные улучшения были сделаны с точки зрения объема, потребления ресурсов и операционной эффективности.


🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟

Добро пожаловать в блог автора:blog.dongxishaonian.tech