API перезапускаемых задач (rerunnable jobs)
Это пост с кратким пересказом очередной главы книги “API Design Patterns” Дж. Дж. Гивакса, посвящённой перезапускаемым задачам (rerunnable jobs).
Зачем нужны перезапускаемые задачи? Перезапускаемые задачи (rerunnable jobs) позволяют настроить процесс работы один раз, а затем запускать её по расписанию или по требованию, без необходимости заново передавать параметры. То есть они похожи на длительные операции (long-running operations) с тем различием, что этот паттерн покрывает дополнительные сценарии, когда, например, требуется делегирование ролей (один человек может настраивать задачу, а другой - запускать её) или еще нужно автоматическое выполнение уже созданных операций по расписанию.
Для поддержки перезапускаемых задач нужны следующие компоненты:
- Ресурс Job для хранения параметров задачи и методы для работы с ресурсом (создание, удаление, обновление). Важно, что методы эти должны быть быстрыми и синхронными.
- Метод Run запускает задачу, используя параметры, сохранённые в ресурсе Job. Этот метод не требует дополнительных входных параметров и возвращает ресурс Operation. Далее сценарий работы аналогичен паттерну LRO.
- И ресурс Execution для результатов задачи после её выполнения (например, для долгосрочного хранения отчётов или бэкапов) со своей собственной политикой хранения. Так как Execution является ресурсом, необходимо реализовать несколько стандартных методов (GET, LIST и необязательно DELETE). Результаты обычно неизменяемы, стандартный метод UPDATE реализовывать не нужно. Метод CREATE тоже не нужен, поскольку ресурс создается не конечным пользователем, а внутренними процессами.
И напоследок, примеры использования паттерна rerunnable jobs:
- Задачи резервного копирования могут быть настроены как перезапускаемые. Пользователь задаёт расписание для регулярных бэкапов, далее задача запускается по этому расписанию и после завершения создаётся новый ресурс, который представляет собой бэкап. Процесс может включать создание дополнительных данных, например, архивов на S3.
- В системах отчетности, например, для финансовых или аналитических приложений, могут быть настроены задачи для автоматической генерации отчётов. Эти задачи могут запускаться еженедельно или ежемесячно, а результатом выполнения соответственно будут отчеты.