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

Почему вы должны использовать кварки в своем следующем микросервисе

Мотивация, если вам посчастливилось работать в компании, где вы можете предлагать идеи своим коллегам… С тегами quarks, java, developerjoy, микросервисы.

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

Что я использую

  • Java 11
  • Apache Maven 3.6.3
  • ИДЕЯ IntelliJ
  • sdkman
  • macOS Каталина

Официальное определение звучит так: “Собственный Java-стек Kubernetes, предназначенный для OpenJDK HotspOT и GraalVM, созданный на основе лучших библиотек и стандартов Java”. – quarkus.io . Звучит сложно, не так ли? Давайте немного разберем это.

  • Сверхзвуковой – основная идея здесь скорость – быстрая загрузка, быстрый ответ на 1-й запрос, экономия времени, когда дело доходит до изменения и запуска кода в качестве разработчика.
  • Субатомный – относится к размеру с точки зрения использования памяти и уменьшенного двоичного размера.
  • Kubernetes Native – относится к тому факту, что он был разработан для контейнеров, что означает небольшие двоичные файлы с быстрым запуском. Он также поставляется с образами Docker и расширениями Kubernetes для упрощения упаковки и развертывания.
  • Java – Quarks – это полиглот, поддерживающий несколько языков JVM, таких как Groovy и Scala.
  • Библиотеки и стандарты – модель программирования не нова, она основана на существующих стандартах. Quarks предназначен для работы с популярными фреймворками и библиотеками, такими как Eclipse MicroProfile и Spring, а также Resteasy (JAX-RS), Hibernate ORM (JPA), Apache Kafka, Spring, Elasticsearch, Camel, Infinispan и многими другими.
  • HotspOT и GraalVM – он предлагает поддержку наиболее часто используемых JVM, а также первоклассную поддержку Graal VM, что важно, поскольку он может скомпилировать приложение до собственного двоичного файла, что позволяет ему запускаться быстрее и работать в меньшей куче, чем стандартная JVM.

Несмотря на то, что Quarks все еще молод (родился в 2018 году), он принадлежит компании с богатой историей с открытым исходным кодом, средами выполнения Java, распределенными средами, микросервисами, облачной средой и т.д. – Red Hat. Это делает его еще более удобным, если вы уже пользуетесь некоторыми из их сервисов и планируете включить свое следующее приложение Quarkus.

Я думаю, что самое ясное и простое определение его назначения, с которым я столкнулся, принадлежит Антонио Гонсалвесу, и оно заключается в том, что оно “переносит Java в облако”. Чтобы лучше понять это утверждение, нам нужно только оглянуться назад на эволюцию отрасли, начиная с того факта, что Java перешла от апплетов к серверным монолитным приложениям . Машины, на которых они запускались, работали 24/7, а использование памяти было огромным. К счастью, JIT-компилятор был там для оптимизации выполнения, а GC эффективно управлял памятью. Перенесемся к сегодняшнему менталитету и вы увидите, что направление, в котором мы движемся, состоит из более мелких и легких компонентов, которые мы хотим быстро запускать/останавливать и перемещать по своему усмотрению. Это микросервисы и крошечные функции , которые мы можем развертывать, организовывать и масштабировать в соответствии с нашими потребностями. Будущее сейчас, мы больше не расширяем масштаб за счет добавления процессора и памяти, а скорее за счет добавления большего количества экземпляров с меньшими двоичными файлами и низким потреблением. Сегодня в современных условиях, будь то в облаке или локально, приложения выполняются на контейнерной платформе. Кроме того, вы можете запускать несколько JVM, но все они имеют относительно длительное время запуска и потребляют ресурсы. В облаке появляется множество других технологий или родных языков, которые имеют низкое потребление памяти. Например, плотность приложений Node JS для одних и тех же ресурсов намного выше, чем у Java. Чтобы соответствовать этому спросу, цель Quarks состоит в том, чтобы увеличить плотность приложений, сохраняя при этом старую добрую платформу Java, которую мы любим, за счет оптимизации для быстрого запуска, небольших двоичных файлов и низкого использования памяти.

Приятной особенностью Quarks является его интеграция с IntelliJ IDEA. Если вы используете другую ИДЕЮ, не беспокойтесь, загрузка приложения Quarkus очень проста, если вы посетите quarkus.io . Нажмите на кнопку “Начать кодирование”, и вам будет предоставлено все, что вам нужно. Третий способ создать основу вашего проекта – запустить:

ввод-вывод mvn.quarkus:quarkus-maven-plugin:1.13.3.Финал:создать \ .пример.демонстрация \ – демонстрация \ \

Я буду использовать свой IDE:

Вы можете выбрать желаемый инструмент сборки, а также множество расширений, не выходя из собственной среды разработки. Довольно круто, да? Давайте пока просто возьмем спокойный ДЖАКС-РС. Вы получите все необходимые инструкции в README.md файл. Теперь, когда ваш проект создан, все готово. Запустите ./mvn compile quarkus:dev в вашем терминале. В зависимости от вашей настройки у вас, вероятно, будут загружены некоторые зависимости, и вы увидите в своем терминале сообщение о том, что Quarkus запустился с dev profile . Что вас интересует, так это это сообщение: Итак, давайте попробуем немного живого кодирования. Вы знаете, как выглядит исходный класс, мы немного изменим его, переименовав конечную точку с “привет” на “приветствие”, добавив регистратор и изменив возвращаемое сообщение функции. Это будет выглядеть примерно так:

import org.jboss.logging.Logger;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/greeting")
public class ExampleResource {

    @Inject
    Logger logger;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
       logger.info("You've called the renamed endpoint");
        return "Hello Quarkus";
    }
}

Не забывайте о своих тестах в примере класса ResourceTest. Он должен быть отрегулирован следующим образом:

@QuarkusTest
public class ExampleResourceTest {

    @Test
    public void testHelloEndpoint() {
        given()
                .when().get("/greeting")
                .then()
                .statusCode(200)
                .body(is("Hello Quarkus"));
    }
}

На новой вкладке терминала запустите curl http://localhost:8080/greeting и вы сможете увидеть результат: 0,585с, неплохо. Раньше вы шли выпить еще кофе, садились на 9gag и прокручивали еще 15 минут после вашего времени сборки и развертывания. Давайте упакуем приложение с помощью mvn package а затем запустите его с помощью java -jar target/quarkus-app/quarkus-run.jar . Это запустит ваше приложение с активированным prod profile примерно за 0,718 секунды, даже быстрее, чем изначально с dev profile . Недостатком этого является то, что вы больше не можете выполнять горячую замену, поскольку вы не можете изменить приложение, не упаковав его, но это подчеркивает именно то, что мы обсуждали ранее, – возможность максимально быстрого масштабирования. Последняя и, вероятно, самая интересная часть, касающаяся времени запуска, – это создание двоичного файла с помощью GraalVM. Я настоятельно рекомендую использовать sdkman ( https://sdkman.io/ – менеджер SDK, который упрощает установку и переключение между версиями Java.), и это должно быть так же просто, как sdk install java x.y.z-grl , после проверки доступных дистрибутивов, а затем sdk default java x.y.z-grl . Как только у вас появится виртуальная машина Graal, запустите mvn package -- Родной . Это может занять немного больше времени, чем вы ожидаете, так как сейчас во время сборки происходит больше работы, но эту тему я хотел бы затронуть в другом посте. Сгенерированный двоичный файл будет находиться в целевой папке , заканчивающийся на ‘-runner’. Давайте попробуем это, выполнив его как любую команду: ./target/demo1-1.0-SNAPSHOT-runner . Время начала составляет 0,015 секунды, это фактический момент, к которому мы готовились. Вот как быстро и легко масштабироваться при высоком трафике в определенные моменты дня.

Я начну с минусов, чтобы убрать их с дороги, и закончу этот пост на радостной ноте.

  • Новый и не очень известный – у некоторых могут быть резервы для того, чтобы попробовать его сразу, поскольку Quarks еще не совсем имеет репутацию.
  • Для этого потребуется надлежащая миграция из Jakarta EE – так что вам придется выделить для этого надлежащие ресурсы.
  • Еще не все библиотеки компилируются с GraalVM – но для Hotspot JVM это нормально; если и когда придет время, переключение должно быть в одном шаге.

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

  • Радость разработчика – с горячей перезагрузкой, нужно ли нам вообще спорить в пользу этого?
  • Производительность и экономия средств – Низкое потребление памяти Quarkus и быстрое время запуска приводят к более эффективному использованию ресурсов и улучшению пользовательского опыта.
  • Надежность – Quarks построен на основе проверенной и надежной корпоративной экосистемы Java с активным сообществом пользователей, в котором участвуют более 180 разработчиков.
  • Реактивный/управляемый событиями – идеально подходит для реактивных приложений. Он использует неблокирующий цикл реактивных событий как для императивного, так и для реактивного кода, что означает, что разработчики могут выбрать правильный вариант для своего варианта использования.
  • Интеграция с OpenShift – Quarks предварительно интегрирована с OpenShift, которая обеспечивает процветающую среду для масштабируемости и скорости, и некоторые компании уже внедрили платформу.
  • Экосистема расширений – она предоставляет множество расширений, которые настраивают, загружают и интегрируют фреймворк или технологию в ваше собственное приложение, чтобы разработчики могли просто сосредоточиться на своем коде.

Я знаю, что приложения “hello world” не совсем отражают реальность, но суть этого поста состоит в том, чтобы подчеркнуть потенциал фреймворка Quarkus. Конечно, каждый может решить, исходя из своего варианта использования, является ли это правильным путем для него или нет, и, возможно, решающим моментом будет, если или когда они решат перейти от Jakarta EE. Как мы уже видели, начать работу с кварками действительно легко, есть множество веских причин попробовать это в вашем следующем приложении, и если вы когда-нибудь застрянете, доступная документация на удивление всеобъемлюща. Какое время быть живым! Поскольку эта структура набирает все большую популярность, в будущем я хотел бы затронуть больше тем, связанных с кварками, поскольку это едва касается поверхности, и я считаю, что это интересная тема, которую стоит обсудить.

Ресурсы:

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

  • Основы кварков Антонио Гонсалвеса – о множественном взгляде
  • Мысли о Кваркусе Себастьяна Дашнера о dzone.com
  • redhat.com – Страницы, посвященные Кваркусу
  • quarks.io – гиды

Оригинал: “https://dev.to/tinyg210/why-you-should-use-quarkus-in-your-next-microservice-226m”