Привет, Хабр! Представляю вашему вниманию перевод статьи Дмитрия Корнилова 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 еще в разработки и будут общедоступны через некоторое время

Комментарии (0)