Cadence Workflow Engine был разработан в Uber и открыт под лицензией MIT.
Отличие Cadence от большинства существующих движков рабочих процессов заключается в том, что они ориентированы на разработчиков, чрезвычайно гибки и масштабируемы (до десятков тысяч обновлений в секунду и до миллиардов открытых рабочих процессов). Рабочие процессы написаны как объектно-ориентированные программы, и механизм гарантирует, что состояние объектов рабочего процесса, включая стеки потоков и локальные переменные, полностью сохраняется в случае сбоев хоста.
Cadence используется практически для любого бэкэнд-приложения, которое существует за пределами одного ответа на запрос. Примеры использования:
Распределенные задания CRON Управление конвейерами машинного обучения/данных Реакция на деловые события. Например, события поездки в Uber. Рабочий процесс может накапливать состояние на основе полученных событий и выполнять действия при необходимости. Развертывание сервисов в Mesos/Kubernetes Реализация конвейера непрерывной интеграции Обеспечение завершения нескольких вызовов службы при получении запроса. Включая реализацию шаблона SAGA Управление рабочими задачами (аналогично Amazon MTurk) Медиа обработка Маршрутизация запросов в службу поддержки клиентов Обработка заказа Сервис тестирования, похожий на ChaosMonkey и многие другие
Другой набор вариантов использования основан на переносе существующих механизмов рабочих процессов для работы в Cadence. Практически любой существующий язык спецификации рабочего процесса движка можно портировать для работы в Cadence. Есть несколько внутренних систем Uber, которые были перенесены. Таким образом, одна серверная служба может управлять несколькими системами рабочих процессов, специфичными для предметной области.