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

Разработка реактивных приложений с кварками

В контексте облачных приложений тема “реактивный” становится все более и более важной, поскольку можно создавать более эффективные приложения и улучшать пользовательский интерфейс. Если вы хотите узнать больше о реактивных функциях в приложениях Java, читайте дальше и попробуйте код. С тегами java, микросервисы, kubernetes, реактивные.

В контексте облачных приложений тема “реактивный” становится все более и более важной, поскольку можно создавать более эффективные приложения и улучшать пользовательский интерфейс. Если вы хотите узнать больше о реактивной функциональности в приложениях Java, читайте дальше и попробуйте код .

Проблемы при начале работы с реактивными приложениями

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

Существует множество ресурсов, доступных для начала изучения различных реактивных концепций. При изучении новых технологий простые учебные пособия, образцы и руководства помогают понять конкретные функции. Чтобы понять, как использовать функции вместе, это помогает мне взглянуть на более полные приложения с вариантами использования, которые приближаются к тому, что нужно разработчикам при создании корпоративных приложений. Из-за этого я реализовал пример приложения, которое показывает различные аспекты реактивного программирования и реактивных систем и которое может быть легко развернуто на платформах Kubernetes.

Архитектура примера приложения

Вместо того, чтобы изобретать велосипед, я повторно использовал сценарий из проекта cloud-native-starter , в котором показано, как разрабатывать и управлять синхронными микросервисами, использующими императивное программирование.

Образец поставляется с веб-приложением, которое отображает ссылки на статьи с информацией об авторе в простом веб-приложении. Веб-приложение вызывает службу web-api, которая реализует шаблон “серверная часть для внешнего интерфейса” и вызывает службу “Статьи и авторы”. Служба статей хранит данные в базе данных Postgres. Сообщения передаются между микросервисами через Кафку. Эта схема описывает архитектуру высокого уровня:

Технологии и функциональность

Образец сильно использует рычаги Кварки , который является “родным стеком Java Kubernetes […], созданным из лучших библиотек и стандартов Java”. Дополнительно Микропрофиль Eclipse , Затмение Верт.x , Апач Кафка , PostgreSQL – сервер , Затмение OpenJ9 и используются Kubernetes .

В течение следующих дней я постараюсь написать в блоге о следующих функциях:

  • Отправка сообщений в памяти через Микропрофиль
  • Отправка сообщений в памяти через шину событий Vertx
  • Отправка и получение сообщений Кафки через Микропрофиль
  • Отправка сообщений Кафки через API Кафки
  • Конечные точки реактивного ОТДЫХА на этапе завершения
  • Реактивные вызовы REST через веб-клиент Vertx Axle
  • Реактивные вызовы REST через микропрофильный клиент REST
  • Обработка исключений в цепных реактивных вызовах
  • Тайм-ауты через CompletableFuture
  • Отказоустойчивость реактивных микросервисов
  • Реактивные операции CRUD для Postgres

Пример приложения демонстрирует несколько сценариев и преимуществ реактивных приложений.

Сценарий 1: Реагирующий Обмен сообщениями

Одним из преимуществ реактивных моделей является возможность обновлять веб-приложения, отправляя сообщения, а не запрашивая обновления. Это более эффективно и улучшает пользовательский интерфейс.

Статьи могут быть созданы с помощью REST API. Веб-приложение получает уведомление и добавляет новую статью на страницу.

Эта диаграмма объясняет поток:

Сценарий 2 – Реактивные конечные точки покоя для повышения эффективности

Еще одним преимуществом реактивных систем и конечных точек реактивного ОТДЫХА является эффективность. В этом сценарии описывается, как использовать реактивные системы и реактивное программирование для достижения более быстрого времени отклика. Особенно в общедоступных облаках, где затраты зависят от процессора, оперативной памяти и продолжительности вычислений, эта модель экономит деньги.

Проект содержит конечную точку “/статьи” службы web-api в двух разных версиях, в одной используется императивный код, в другой – реактивный код.

Реактивный стек этого образца обеспечивает время отклика, которое занимает менее половины времени по сравнению с императивным стеком: Реактивный: 793 мс – Императивный: 1956 мс.

Прочтите документацию для получения подробной информации.

Эта диаграмма объясняет поток:

Это результат императивной версии после 30000 обращений:

Это результат реактивной версии после 30000 вызовов:

Поддерживаемые среды Kubernetes

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

Заключительные мысли

Большое вам спасибо Харальд Уэбеле и Томасу Зюдбрекеру за их постоянную поддержку. Особенно я хочу поблагодарить Гарольда за написание сценариев развертывания для контейнеров с готовым кодом и Томаса за написание сценариев развертывания для службы IBM Cloud Kubernetes. Кроме того, я хочу поблагодарить Себастьяна Дашнера за предоставление отзывов и отправку запросов на вытягивание.

Попробуйте код самостоятельно!

Прочитайте другие статьи этой серии:

Оригинал: “https://dev.to/nheidloff/development-of-reactive-applications-with-quarkus-34p1”