пятница, 24 ноября 2017 г.

Разворачиваем собственную среду исполнения WebSphere Liberty (с microprofile-1.2) в облаке IBM Cloud

WebSphere Liberty - это быстрый, динамичный и простой в использовании сервер приложений Java EE, основанный на проекте с открытым исходным кодом Open Liberty. Идеален для разработки, но так же и сертифицирован для промышленного использования как в IT предприятия, так и в облачном окружении.

IBM Bluemix (сейчас именуемая IBM Cloud) - это последнее облачное предложение от IBM. Облако позволяет организациям и разраотчикам быстро и просто создавать и разворачивать свои приложения в облаке. Bluemix - это реализация открытой облачной архитектуры от IBM, основанной на Cloud Foundry - Platform as a Service (PaaS) с открытым исходным кодом. IBM Cloud Foundry предлагает среды исполнения для Java, Node.JS, PHP, Python, Ruby, Swift и Go. Также доступны созданные сообществом билдпаки (build pack).

Хотя IBM Cloud уже предоставляет среду исполнения для WebSphere Liberty, иногда ее возможностей недостаточно и разработчикам требуется своя собственная версия платформы, например легковесная Liberty Kernel или старая версия для проверки обратной совместимости, или WebSphere Liberty, снабженная специфичными для разрабатываемого приложения возможностями (features).

В данной статье я хочу показать как можно развернуть вашу собственную инсталляцию WebSphere Liberty в облаке IBM Cloud, будто обычное Java-приложение. Инсталляция будет снабжена последней версией MicroProfile - открытого форума для сотрудничества над созданием микросервисов, основанных на Enterprise Java, - анонсированной 3-го октября 2017-го года.

Eclipse MicroProfile 1.2 построено на основе версии 1.1, привносит обновления для API конфигурирования приложения, а также добавляет набор новых API: проверку работоспособности (health check), устойчивость к сбоям (fault tolerance), метрики и распространение JWT. Как сказано на официальной странице проекта, цель MicroProfile - позволить сообществу развивать экосистему микросервисов на Enterprise Java в рамках коротких циклов разработки, выпуска и принятия спецификаций, некоторые из которых затем будут включены в Java JSR или другие стандарты. Сервер приложений WebSphere Liberty уже реализует данную спецификацию MicroProfile 1.2, достаточно лишь включить соответствующую возможность - microprofile-1.2 - в файл конфигурации сервера server.xml.


Структура приложения


Демонстрационное приложение разделено на две части:

  1. liberty-microprofile-app - небольшое веб-приложение, которое будет использовать возможности MicroProfile 1.2. Пока приложение лишь содержит сервлет, выводящий информацию о том, на какой JVM он запущен. Данная информация пригодится в дальнейшем, когда мы будем публиковать приложение на различных JVM в составе облачной платформы.

  2. liberty-microprofile-wlp - проект Maven, для которого указан тип сборки liberty-assembly. Данный тип сборки используется для создания архива с сервером приложений WebSphere Liberty. Проект сильно зависит от liberty-maven-plugin и использует данный плагин для выполнения следующих действий:

    • установить среду исполнения WebSphere Liberty
    • создать сервер приложений
    • установить возможность microprofile-1.2 в созданную ранее среду исполнения
    • скопировать приложения, указанные как Maven зависимости, в каталог apps сервера приложений
    • упаковать среду исполнения WebSphere Liberty в архив

    Конфигурация плагина liberty-maven-plugin:



    Параметры configFile и serverName дают плагину знать, с каким именем требуется создать сервер, а также где именно расположена его конфигурация. Параметры looseApplication и installAppPackages говорят плагину установить приложения, перечисленные в секции dependencies, внутрь каталога apps. Важно! Значение атрибута location элементов application/webApplication в файле server.xml, если конечно данные элементы представлены в этом файле, обязательно должно совпадать с названием Maven-артифакта приложения. Иначе будет создан дополнительный файл конфигурации для приложения и заданные в server.xml настройки, включая context-root, будут утеряны.

    Поскольку никакие возможности не указаны внутри элемента features в конфигурации плагина, все отсутствующие в инсталляции возможности, объявленные в файле server.xml, будут установлены.

    IBM Cloud транслирует запросы к приложению на порт 8080, таким образом элемент конфигурации сервера httpEndpoint должен поднимать сервер на хосте 0.0.0.0 и порту 8080. Полная конфигурация сервера представлена ниже.



Сборка приложения


Для сборки приложения достаточно выполнить следующую команду:

# mvn clean package

Разворачивание приложения в облаке IBM Cloud


По умолчанию, IBM Cloud использует билдпак Java Buildpack Version: v3.19 для осуществления развертывания приложения в облаке. Поскольку в каталоге wlp/bin внутри архива с WebSphere Liberty содержатся несколько исполняемых файлов, то билдпак не всегда может правильно определить, что запускать следует файл wlp/bin/server. Ему нужно об этом сказать, указав через параметры или в файле manifest.yml команду для запуска приложения - ./wlp/bin/server run apiServer.

Важно! Команда должна быть именно server run! Если указать команду server start, то облачная инфраструктура будет думать, что приложение упало после того, как данная команда освободит процесс. Есть небольшая особенность: как только для приложения настроена команда запуска, оно перестает видеть JVM, уж не знаю почему. Необходимо указать путь к команде java. Для WebSphere Liberty это можно сделать, правильно выставив путь к JAVA_HOME в одноименной переменной окружения. Если используется Java Buildpack, то нужно использовать следующий путь к инсталляции OpenJDK: /home/vcap/app/.java-buildpack/open_jdk_jre. Если используется Liberty Buildpack, то следует указать путь к инсталляции IBM JVM, который немного отличается: /home/vcap/app/.java/jre.

Если возникла проблема out-of-memory, то нужно выставить переменную окружения JVM_ARGS.

Перечисленные выше параметры собраны в файл manifest.yml, соответственно для разворачивания приложения в облаке достаточно выполнить:

# cf push

После успешного выполнения команды приложение станет доступно по настроенному URL:


Те, кто предпочитает использовать OpenJDK вместо IBM JVM (WebSphere Liberty работает и на JVM от Oracle), могут воспользоваться следующей командой:

# cf push -f ./manifest-oracle.yml

После успешного выполнения команды приложение станет доступно по настроенному URL:


Исходники приложения доступны на GitHub.

Понравилось сообщение - подпишитесь на блог

Комментариев нет:

Отправить комментарий

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!