Оркестровка двигателей и рамок?

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

Более конкретно, требования в значительной степени таковы:

  • Обтекание и выполнение общих задач, в Java, если зависит от языка
  • API для запуска задач и рабочих процессов по требованию
  • Планирование было бы также хорошо
  • Поддержка распределенной архитектуры и масштабируемости (в основном для большого количества небольших задач)
  • Стойкость и устойчивость
  • Расширенные возможности настройки рабочего процесса (выполните это, затем эти 3 задачи параллельно, затем, имея приоритеты, зависимости...)
  • Пользовательский интерфейс мониторинга и администрирования (или хотя бы API)

Существующая система является старомодным монолитным сервисом (в Java), который имеет большую часть этого, включая саму логику выполнения, которая должна оставаться как можно более нетронутой.

У кого-нибудь есть опыт работы с подобной проблемой? Мне кажется, что это должно быть довольно распространенным, было бы странно, если бы мне пришлось полностью это реализовать. Здесь я нашел несколько вопросов (таких как этот и этот), в которых обсуждается теория оркестровки и системы хореографии, но не реальные примеры инструментов, реализующих ее. Кроме того, я думаю, что мы не совсем говорим о микросервисах - задачи не являются длительными и тяжелыми, они просто выполняются в фоновом режиме, выполняя короткие задания многих типов. Я бы не стал создавать сервис для каждого типа работы.

Я также не ищу облачные и контейнерные сервисы на данный момент - насколько я понимаю, развертывание - это другая проблема.

Самым близким, что я получил, является движок Netflix Conductor, который отвечает большинству требований, запуская сервер оркестрации, который управляет задачами, реализованными в сервлетах (или любых веб-службах на любом языке - плюс). Однако, похоже, что он построен в основном для организации тяжелых задач в рабочем процессе, а не для выполнения огромного количества небольших задач, что заставляет меня задуматься над тем, что может быть непроизводительным, например, при вызове множества небольших задач в сервлетах.

У кого-нибудь есть опыт или какой-либо вклад в Проводник или другие инструменты, которые я мог бы использовать? Или даже весь мой подход к проблеме?

РЕДАКТИРОВАТЬ: Я понимаю, что это своего рода "совет исследования необходимы", поэтому давайте просто скажем, в 3 вопроса:

  1. Правильно ли я искать решение для оркестровки для вышеуказанных требований?
  2. У кого-нибудь есть опыт работы с проводником Netflix? Есть какие-либо отзывы об этом?
  3. У него есть хорошие конкуренты?

1 ответ

Главный конкурент Netflix Conductor - Temporal Workflow. Он лучше масштабируется и более удобен для разработчиков за счет использования кода вместо JSON DSL для реализации логики оркестровки.

Он также хорошо работает с мелкозернистыми задачами за счет реализации определенных оптимизаций (локальных действий), которые позволяют объединять несколько небольших задач в одно обновление базы данных.

Temporal более четырех лет тестируется в Uber, Coinbase, HashiCorp и десятках других компаний.

Возможно, вы ищете что-то вроде Airflow https://airflow.apache.org/?

Обтекание и выполнение общих задач, в Java, если зависит от языка

https://github.com/apache/incubator-airflow/tree/master/airflow/hooks https://github.com/apache/incubator-airflow/tree/master/airflow/contrib/operators

API для запуска задач и рабочих процессов по требованию

https://airflow.apache.org/api.html (экспериментальный)

Планирование было бы также хорошо

подумайте о cron на стероидах - https://airflow.apache.org/scheduler.html

Поддержка распределенной архитектуры и масштабируемости (в основном для большого количества небольших задач)

чешуйка с узлами из даска или сельдерея - Airflow + сельдерей или даска Для чего, когда?

Стойкость и устойчивость

использует postgres db & rabbitMQ - если ваша арка развертывания не имеет состояния (например, повторяемые контейнеры и тома с докером), вы должны быть в хорошей форме с репликацией WAL, если вы используете Kubernetes или Consul, есть другие способы повысить устойчивость других компонентов

Расширенные возможности настройки рабочего процесса (выполните это, затем эти 3 задачи параллельно, затем, имея приоритеты, зависимости...)

Воздушный поток использует DAG. Возможности можно назвать достаточно продвинутыми. У вас также есть общий доступ к параметрам с помощью XCOM, если вам это действительно нужно

Пользовательский интерфейс мониторинга и администрирования (или хотя бы API)

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

также посмотрите на Oozie & Azkaban

это помогло?

Вы можете взглянуть на unify-flowret, легкий механизм оркестровки Java, который я создал в рамках разработки новой платформы в American Express. Если вы думаете, что Netflix Conductor подходит для вашей проблемы, вам обязательно стоит взглянуть на unify-flowret, поскольку Netflix Conductor был одним из вариантов, которые мы оценивали перед созданием unify-flowret.

Unify-flowret обеспечивает базовую функциональность оркестровки, а все остальное зависит от приложения. Вы определяете рабочий процесс в очень простом файле JSON, используя шаги и маршруты. Затем в приложении, которое хочет использовать flowret, вы создаете определенные реализации, например, реализацию для сохранения состояния в базе данных (таким образом можно использовать любое хранилище данных). Или реализация для возврата объекта в flowret, на котором flowret будет вызывать функцию шага. Таким образом, вместо того, чтобы реализовывать все типы требований в механизме оркестрации, чтобы упростить задачу, большинство из них возлагается на приложение.

Unify-flowret работает во встроенном режиме и масштабируется по горизонтали. Он возобновляется с того места, где остановился. Он устойчив к сбоям и возобновит работу с последней записанной позиции. Он обеспечивает настоящую техническую параллельную обработку посредством определения в JSON рабочего процесса. Он обеспечивает структуру SLA, которая информирует приложение о вехах, которые должны быть установлены в будущем. Он предоставляет функции управления работой в виде рабочих корзин. И многое другое!

Мы добились большого успеха в использовании его в American Express для действительно сложных требований оркестровки.

Вы можете оформить заказ на unify-flowret на https://github.com/americanexpress/unify-flowret.

Другие вопросы по тегам