Huginn: простая интеграционная платформа

в 9:17, , рубрики: api, CarPrice, huginn, ruby on rails, zapier, аукцион, Блог компании CarPrice, карпрайс, Программирование, продукт, разработка

В мире API, сервисных архитектур и облачных решений многое доступно вообще без программирования. Однако, компании все еще тратят драгоценное время разработчиков на рутинные задачи по интеграции. Мы хотим рассказать об одной из платформ, которая позволяет нам подключить новомодный маркетинговый сервис или проверить гипотезу максимально быстро и без участия разработки.
Huginn: простая интеграционная платформа - 1

Всем привет! Меня зовут Юра Буйлов, и я отвечаю за разработку в CarPrice. Компания развивается динамично, поэтому скорость проведения экспериментов для нас играет важную роль. Сегодня хочу рассказать о простом инструменте, который избавляет разработчиков от бесконечного потока простых однотипных задач по интеграции с внешними сервисами.

Мотивация. Почему Huginn

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

  1. поступила жалоба от клиента
  2. зафиксировать факт в журнале
  3. отправить сообщение в Telegram

Huginn: простая интеграционная платформа - 2

Мы уже активно использовали Zapier для подобных задач, но нам важны self-hosting, масштабируемость и отсутствие ограничений по количеству обрабатываемых задач. Так мы стали искать инструмент для простых и быстрых интеграций, который был бы полезен и менеджерам, и разработчикам. Сам подход не нов и напоминает упрощенную реализацию EIPs (Enterprise Integration Patterns). Естественно, мы попробовали несколько решений из мира “кровавого энтерпрайза” (Mulesoft, Jboss Fuse, WSO2, Servicemix, Corezoid). Вели переговоры с вендорами проприетарного ПО. Все не то: долго, дорого, сложно или неудобно.

Так мы пришли к Huginn.

  • OpenSource – более 16k звёзд на github.
  • Написан на RoR – можно дорабатывать и писать свои компоненты.
  • Легко разворачивается и масштабируется.
  • Имеет низкий порог вхождения.

Где использовать Huginn

Для капитальной интеграции мы используем RabbitMQ с адаптерами для каждого сервиса, критичного для работоспособности системы.
Настроен мониторинг размера очередей, доступности сервисов и работоспособности компонент. Однако вносить изменения и поддерживать документацию в актуальном состоянии в такой схеме накладно.
Huginn: простая интеграционная платформа - 3
Huginn же используем для экспериментов и простых быстрых интеграций без высоких требований к надежности:

  • публикация аукционов во внутренний Telegram-канал,
  • триггерные уведомления: жалобы, нарушения, пики и просадки в метриках,
  • пуш данных во внешние системы, такие как exponea, expertsender или piwik.

Что такое Huginn

Изначально Huginn – это платформа, которая задумывалась для запуска агентов, которые выполняют ваши задания в интернете. Парсят странички, отслеживают события и выполняют действия от вашего имени. Агенты создают и принимают события, передавая их друг другу по цепочке.
Huginn предоставляет множество встроенных агентов, которые мы можем использовать как настраиваемые элементы своего Pipeline. Агенты могут запускаться по расписанию или принимать события от других агентов, обрабатывать и передавать результат дальше по цепочке.

  • Webhook Agent – принимает POST запросы от внешних источников.
  • Post Agent, Website Agent – отправляет запросы на указанный урл, парсит JSON, HTML или XML.
  • DeDuplication Agent – не пропускает дубли событий по уникальному ключу.
  • Event Formatting Agent – позволяет перемапить поля в сообщении.
  • JavaScript Agent – выполняет произвольный JS код (V8, therubyracer).

Для полноценной интеграции нам не хватало только агента, который умеет отслеживать изменения в базе и мы написали его сами, благо в Huginn очень удобно писать своих агентов.
huginn_mysql2_agent

Как оказалось, большинство кейсов мы покрываем тремя агентами:

  • Mysql2Agent – поллим базу на наличие изменений. Для каждой строки выборки будет сгенерировано событие и передано дальше по цепочке.
  • EventFormatting – форматируем входящее сообщение с использованием liquid шаблонов.
  • JsonAPIAgent – вызвать внешнее или внутреннее API для получения/отправки данных.

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

Публикация новых аукционов в Telegram-канал

Ниже представлена одна из первых реализованных цепочек. Агент ежеминутно проверяет новые аукционы в БД по created_at, далее по внутреннему API получает всю информацию по авто и отправляет сообщение в Telegram.

Huginn: простая интеграционная платформа - 4

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

Персональные рекомендации по sms

Ниже пример реализации эксперимента по доставке персональных рекомендаций дилерам по sms. Для каждого нового аукциона получаем по API внутренней рекомендательной системы (LSTM RNN) список дилеров, из БД получаем номер телефона, сокращаем ссылку на аукцион с помощью urlshortener и отправляем sms через внешний сервис рассылки.
Huginn: простая интеграционная платформа - 5

Интеграция с маркетинговыми инструментами

Далее представлена часть схемы интеграции с маркетинговыми инструментами – сервисом exponea. В ходе ее реализации ни один разработчик не пострадал – реализация и поддержка силами одного менеджера.
Huginn: простая интеграционная платформа - 6

Развернуть и попробовать

Самый простой способ попробовать Huginn – развернуть его в docker.

docker run -it --name huginn 
    -p 3000:3000 
    -e ADDITIONAL_GEMS="huginn_mysql2_agent(git: https://github.com/yubuylov/huginn_mysql2_agent.git),huginn_jsonapi_agent(git: https://github.com/yubuylov/huginn_jsonapi_agent.git)" 
    huginn/huginn

http://localhost:3000/
Логин: admin, Пароль: password

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

Спасибо за внимание. Надеюсь, данная заметка будет полезна, а Huginn кому-то поможет освободить немного времени для крутых проектов!

Полезные ссылки

Оф.репозиторий: github.com/huginn/huginn
Установка в docker: github.com/huginn/huginn/blob/master/doc/docker/install.md
Production environment: github.com/huginn/huginn/tree/master/docker/single-process
Список агентов: huginnio.herokuapp.com/agents

Автор: yubuylov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js