Блоги

Интересное в интеграции. Часть 1. Syndesis.

Этой статьёй я хотел бы открыть небольшой цикл, посвящённый интеграционным продуктам/фреймворкам, которые показались интересными для небольших исследований и обзоров. Первая часть будет посвящена проекту Syndesis - это upstream проект продукта Red Hat Fuse Online. У Red Hat есть продукт под названием Red Hat Fuse, выросший из классической ESB от компании FuseSource. Естественной эволюцией продукта была адаптация микросервисной архитектуры и переезд на Openshift. Но ядром так и остался Apache Camel. Начиная с версии продукта 7.0 параллельно Red Hat Fuse стал разрабатываться Fuse Online на базе Syndesis.

Давайте посмотрим более подробно что же такое есть Syndesis. Основным и ключевым отличием Syndesis от классического Red Hat Fuse - это целевая аудитория продукта. Он больше подойдёт для аналитиков, в отличие от Fuse. Это low-code интеграционная платформа. Пользователя не нужно глубокого знания в тонкостях построения интеграционных маршрутов, достаточно общего понимания специфики. В продукте вводится дополнительный уровень абстракции, чтобы оградить пользователя от деталей Apache Camel и Enterprise Integration Patterns (EIP). Вы оперируете понятием коннекторов, мапперов данных и операторов с логическими операциями. Как написано в документации к Fuse Online - продукт предназначен для быстрого построения интеграций бизнес-экспертами, финансистами, HR - одним словом теми, кто не сможет залезть в код, а только сконфигурировать что-то. Fuse Online не является заменой простому Fuse, а скорее дополнением. Давайте посмотрим как всё это запускается и работает.

Установку Syndesis можно сделать только на контейнеры, причём это либо Kubernetes, либо Openshift. Но по факту это только Openshift, так как в документах сказано, что установка на Kubernetes возможна только для разработческих целей с кучей ограничений. Я ставил локально на Minishift, руководствуясь следующей документацией: https://syndesis.io/docs/cli/syndesis/#example-for-minishift. Вообще, Fuse Online ориентирован в том числе и на managed clouds и по этой причине пользователю нельзя конфигурировать коннекторы через ConfigMap и Secret - все настройки осуществляются при сборке образа, либо через экспорт-импорт интеграций. Подробнее об архитектуре решения можно почитать тут. После установки у меня получилось следующее:

UI продукта выглядит следующим образом:

На дашборде видна общая информация по существующим интеграциям - отсюда можно создать новую или редактировать/остановить/запустить существующую интеграцию. Интеграция состоит из точки начала, окончания и произвольного набора промежуточных операций. Началом маршрута является сущность под названием Соединение. У продукта есть предустановленный набор коннекторов к различным системам и сторонним продуктам - DB, Telegram, Google Sheet, SFTP, AMQP и т.д. Коннектор с настроенными параметрами сохраняется в виде Соединения, которое можно использовать в маршруте. Промежуточные операции могут быть как алгоритмические - Split, Filter, Aggregate, так и вызовы сторонних систем через Соединения. На рисунке ниже представлено окно редактирования интеграции - при помощи '+' можно добавлять дополнительные шаги.

По завершению разработки маршрута его можно опубликовать прямо из UI. Соберётся соответсвующий образ с Apache Camel на SpringBoot и запустится отдельный pod.  Во вкладке Activity можно посмотреть профилирование по операциям и вывод логов, если это применимо:

 

Также, из доступных фич есть возможность импорта-экспорта маршрутов и их версионирование.

Отдельно хочу отметить использование продвинутого маппинга данных - под капотом находится AtlasMap. О его возможностях собираюсь написать в отдельном блоге.

В целом идея такого интеграционного продукта является весьма достойной, как и предложенная реализация, хотя ограничения возможностей запуска только Openshift может быть критичной. У продукта есть ряд ограничений - нет полной реализации всех EIP, по этой причине его нельзя считать полноценной заменой Red Hat Fuse, но для простых интеграций использовать вполне можно и нужно.

14.12.2020