Взлет Хелидона

от автора

Привет, Хабр! Представляю вашему вниманию перевод статьи Дмитрия Корнилова Helidon Takes Flight. Я не являюсь сотрудником Oracle, но мне показалась интересной статья о новом, набирающем популярность, типе фреймворков. Итак, поехали…

Сегодня хороший день. Сегодня мы представляем новый Java-фреймворк из семейства MicroProfile для реализации микросервисов. Проект Helidon — это новый Java-фреймворк от Oracle.

Helidon, с греческого перевода ласточка, тип птиц, согласно Википедии, с стройным обтекаемым телом и заостренными крыльями, которые обеспечивают большую маневренность и… очень эффективный полет. Идеально подходит для полета в облаках.

Введение


Некоторое время назад началась работа над тем, чем сейчас является проект Helidon. Когда мы вошли на рынок облачных решений, а архитектура микросервисов стала очень популярной для создания облачных сервисов, мы поняли, что экспертизу разработки также необходимо расширять. Возможно создание микросервисов с использованием Java EE, но лучше иметь инфраструктуру, разработанную с нуля для создания микросервисов. Мы хотели создать легковесный набор библиотек, не требующих сервера приложений и облака для Java SE приложений. Эти библиотеки могут использоваться отдельно друг от друга, но при совместном использовании обеспечат разработчику создание каркаса микросервиса: начальную конфигурацию, подсистему безопасности и веб-сервер.

Уже предпринимаются попытки создать стандартные микросервисные системы из MicroProfile. MicroProfile довольно популярен в сообществе Java EE / Jakarta EE и предоставляет опыт разработки, подобный Java EE. Нам нравится идея и мы поддерживаем эту инициативу. Helidon реализует MicroProfile 1.1. Мы продолжим работу над внедрением новых версий MicroProfile и намерены поддерживать соответствующие стандарты Jakarta EE в этой области, поскольку они уже описаны.

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

Классификация

Java-фреймворки для написания микросервисов делятся на несколько категорий, от малых до больших:

  • Microframeworks — простые, забавные, с намеренно ограниченным набором возможностей, например: Spark, Javalin, Micronaut и другие.
  • MicroProfile — Более знакомая Java EE разработчикам, но немного «тяжелее». Некоторые из них разработаны поверх Java EE серверов приложений, например: Thorntail (ранее Wildfly Swarm), OpenLiberty, Payara.
  • Full Stack — полнофункциональные, такие как Spring Boot.

Helidon поставляется в двух вариантах и принадлежит к двум категориям: Microframeworks и MicroProfile.

  • Helidon SE — простой, функциональный, легковесный микрофреймворк, разработанный в современном reactive-стиле. В нем нет «магии». Не требуется специального окружения, в качестве него используется JDK.
  • Helidon MP — реализация Eclipse Microprofile, предоставляющая стиль разработки, знакомая Java EE/Jakarta EE разработчикам.

Архитектура

Архитектура Helidon-а отображена ниже

Компоненты Helidon SE окрашены в зеленый цвет, среди которых — Config, Security и RxServer.
Java EE/Jakarta EE компоненты окрашены в серый цвет, среди которых — JSON-P, JAX-RS/Jersey и CDI. Им требуется MicroProfile реализация. Helidon MP является прослойкой поверх Helidon SE компонент. Дополнительные компоненты сервисов Oracle Cloud окрашены красным цветом и могут быть использованы как Helidon SE, так и Helidon MP компонентами.

Примеры использования

Установка

Простейший способ для начала работы с Helidon — это Maven проект на Java 8(или выше), в котором вы указываете Helidon bom-pom и минимальные зависимости:

<dependencyManagement>    <dependencies>        <dependency>            <groupId>io.helidon</groupId>            <artifactId>helidon-bom</artifactId>            <version>${helidon-version}</version>            <type>pom</type>            <scope>import</scope>        </dependency>    </dependencies> </dependencyManagement> ..... <dependency>    <groupId>io.helidon.webserver</groupId>    <artifactId>helidon-webserver-netty</artifactId> </dependency> 

Helidon SE

Helidon SE является основой для создания легковесных реактивных микросервисов. Пример «Hello world»:

import io.helidon.webserver.Routing; import io.helidon.webserver.WebServer; ..... Routing routing = Routing.builder()        .get("/hello", (req, res) -> res.send("Hello World"))        .build();  WebServer.create(routing)        .start(); 

В данном случае мы запускаем web-сервер на произвольном(свободном) порту и открываем доступ по /hello.

Добавление метрик

Теперь добавим реализацию MicroProfile Metrics интерфейсов для Helidon SE(без поддержки DI, поскольку это не включено в SE). Для этого потребуются следующие зависимости:

<dependency>    <groupId>io.helidon.metrics</groupId>    <artifactId>helidon-metrics-se</artifactId> </dependency> 

Реализация:

// создаем реестр метрик MetricsSupport metricsSupport = MetricsSupport.create();  // получаем реестр MetricRegistry registry = RegistryFactory        .getRegistryFactory()        .get()        .getRegistry(MetricRegistry.Type.APPLICATION);  // создаем счетчик Counter helloCounter = registry.counter("helloCounter");  Routing routing = Routing.builder()        // регистрируем поддержку метрик web-сервером        .register(metricsSupport)        .get("/hello", (req, res) -> {            // инкрементируем счетчик            helloCounter.inc();            res.send("Hello World");        })        .build();  WebServer.create(routing)        .start(); 

Теперь нам доступны следующие endpoint-ы:

  • /metrics — все основные метрики
  • /metrics/application/helloCounter — метрики, созданные «hello world»-приложением

Helidon MP

Helidon MP — это реализация Eclipse Microprofile и среда выполнения для микросервисов.
Для создания «Hello world»-приложения, которое использует метрики измерения количества вызовов, вы должны создать класс JAX-RS-ресурсов для обработки запросов:

@Path("hello") @RequestScoped // разрешаем использование CDI public class HelloWorld {    @GET    @Metered    public String hello() {        return "Hello World";    } } 

а затем запустить сервер с этим ресурсом:

Server.builder()        .addResourceClass(HelloWorld.class)        .build()        .start(); 

Также вам необходимо создать beans.xml в src/main/resources/META-INF каталоге для активизации CDI:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns="http://xmlns.jcp.org/xml/ns/javaee"        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee                                                      http://xmlns.jcp.org/xml/ns/javaee/beans_2_0.xsd"        bean-discovery-mode="annotated"> </beans> 

С данной конфигурацией будет запущен web-сервер на порту по-умолчанию(7001) и открытым доступом по /hello.. При этом будут доступны следующие endpoint-ы:

  • localhost:7001/hello — само приложение «hello world»
  • localhost:7001/metrics — MicroProfile метрики
  • localhost:7001/metrics/application/com.oracle.tlanger.HelloWorld.hello — метрики нашего «hello world» приложения
  • localhost:7001/health — метрики состояния MicroProfile

Планы

У нас много планов, которые годятся на отдельную статью.

Наша краткосрочная цель — это освещение и ознакомление с Helidon-ом в Java-сообществе. Мы планируем рассказать о Helidon на некоторых конференциях. Уже запланировано четыре доклада о Helidon на Oracle Code One 2018. Мы также подали заявку на EclipseCon Europe 2018 и будем участвовать в Jakarta EE/MicroProfile Community Day. Учебные материалы, такие как видео, примеры использования, статьи и т.д. уже в разработке и скоро будут опубликованы.

Что касается технической стороны, то мы работаем на реализацией следующей версии MicroProfile, поддержкой GraalVM.

Мы работаем и над другими крутыми штуками, но пока не можем раскрыть всех карт. Оставайтесь с нами, мы объявим новые фичи, как только они будут готовы.

Источники

Возможно вам это будет интересно:

  • Изначально название было J4C (Java for Cloud)
  • Helidon разрабатывается распределенной командой из Праги и США
  • Helidon уже используется более чем десятью проектами в Oracle
  • Некоторые компоненты Helidon еще в разработки и будут общедоступны через некоторое время


ссылка на оригинал статьи https://habr.com/post/424607/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *