Использование программного компонента#
Базовые функции сервиса#
К основным функциям сервиса Batch Tasks можно отнести:
создание, обновление, удаление Очереди;
создание Задач для Очереди;
управление нагрузкой на клиентский сервис;
запуск Очередей в виде вызовов API по протоколу REST.
Примеры сценариев использования#
Сценарий 1. Обработка событий по продукту клиента#
Вводные данные#
Дано:
Некоторый продукт клиента.
События разного вида, созданные по продукту клиента.
Note
Количество событий не ограничено (существует возможность автоматически управлять нагрузкой на инфраструктуру и при необходимости увеличивать/уменьшать интенсивность обработки в рамках заданных пределов).
Note
Количество продуктов не ограничено.
Каждый вид события имеет:
приоритет (означает, что событие типа А должно обработаться раньше, чем событие В для этого клиента);
окно возможности для обработки.
Бизнес-логика обработки каждого вида событий.
Необходимо:
Обработать события по продукту в соответствии с приоритетом и окном возможности.
Уменьшать или увеличивать поток обработки событий в зависимости от доступности ресурсов БД и прочей инфраструктуры.
Решение#
Обработка продуктов клиента#
С помощью ежедневно выполняемого задания (Job) через API Batch Tasks закройте прошлую очередь (для очистки сущностей) и создайте новую очередь для обработки событий.
По мере появления событий в очередь через API Batch Tasks складываются задачи (см. ниже подробный пример сценария взаимодействия с сервисом).
Batch Tasks запускает задачи согласно зависимостям и указанным значениям в параметре
scheduleTime.Необходимо совместное использование сервисов Batch Scheduler и Batch Tasks.
Управление нагрузкой#
Через API или UI сервиса Batch Tasks можно управлять нагрузкой на клиентский сервис (HttpTarget):
С помощью параметра
maxRunningTasksотрегулируйте количество одновременно обрабатываемых Задач.Чтобы глобально снизить/увеличить процент нагрузки, пометьте все очереди тегом.
Пример создания зависимой задачи с заданным окном возможности выполнения#
Для создания Задачи, условие начала выполнения которой будет зависеть от успешности выполнения другой Задачи, выполните следующие действия:
Если блокирующая Задача еще не создана, создайте ее с помощью UI или API сервиса Batch Tasks, указав в качестве
descriptionзначение<clientID>-<eventType>для использования в дальнейшем поиске задач для зависимостей.Если блокирующая Задача уже создана:
Узнайте идентификатор блокирующей Задачи, воспользовавшись поиском по ключевому
description:<clientID>-<eventType>.Создайте зависимую Задачу, при этом:
укажите идентификатор блокирующей Задачи в качестве значения параметра для атрибута
dependsOnдля зависимой Задачи,укажите для атрибута
scheduleTimeсоздаваемой Задачи значение начала окна возможностей, чтобы запустить Задачу в рамках окна возможностей.
Сценарий 2. Обработка кредитного портфеля#
Вводные данные#
Дано:
Кредитный портфель банка (N банков с общим объемом Х млн продуктов).
Бизнес-логика формирования событий.
Бизнес-логика обработки событий.
Расписание (окно возможности) формирования и обработки событий конкретного банка.
Необходимо:
Обработать кредитный портфель банка в выделенное окно возможности.
Уменьшать или увеличивать поток обработки событий в зависимости от доступности ресурсов БД и прочей инфраструктуры.
Решение#
Бизнес-логика обработки события должна быть реализована как HTTP API. Также необходимо совместное использование сервисов Batch Scheduler и Batch Tasks.
На каждый из банков создается задание (Job) через сервис Batch Scheduler. Время старта Задания — начало окна возможностей. Задание вызывает HTTP API на стороне клиента.
HTTP API на стороне клиента выполняет следующую логику:
запрос на создание Очереди через Batch Tasks API. На основе количества и времени обработки каждого события возможно изменять параметр количества одновременно обрабатываемых Задач (
maxRunningTasks);накопленные события ставятся в очередь в виде задач (Task).
При запуске задачи из Очереди вызывается HTTP API c бизнес-логикой обработки события.
Управление нагрузкой#
Через API или UI сервиса Batch Tasks доступны следующие возможности для управления нагрузкой на клиентский сервис (HttpTarget):
С помощью параметра
maxRunningTasksрегулировать количество одновременно обрабатываемых Задач.С помощью параметра
labelснижать или увеличивать процент нагрузки обрабатываемых Очередей.
Сценарий 3. Отправка уведомлений#
Вводные данные#
Дано:
список держателей кредитного договора;
информация по условиям кредитного договора.
Необходимо:
уведомление о внесении платежа приходит в день платежа в 12.00.
Решение#
Бизнес-логика обработки события должна быть реализована как HTTP API. Также необходимо совместное использование сервисов Batch Scheduler и Batch Tasks.
Сервис Batch Scheduler в 12:00 текущего дня запускает Задание (Job) на выполнение.
Задание создает в сервисе Batch Tasks Очередь (Queue) и Задачи (Tasks) для этой Очереди, состоящей из списка лиц, которым необходимо внести сегодня платеж.
Пользователь вызывает метод
heartBeatчерез каждые 5 мин для мониторинга статуса выполнения Задания.Задачи начинают выполняться с начала Очереди, отправляя уведомления о платеже по списку из указанных контактов (Очередь в процессе выполнения может дополняться новыми Задачами).
При выполнении последней Задачи (отправки последнего уведомления) пользователь вызывает финальный метод
callbackдля завершения работы Очереди.Пользователь отправляет финальный метод
callbackдля завершения работы Задания (Job).
Управление нагрузкой#
Через API или UI сервиса Batch Tasks можно управлять нагрузкой на клиентский сервис (HttpTarget):
С помощью параметра
maxRunningTasksотрегулируйте количество одновременно обрабатываемых Задач.Чтобы глобально снизить/увеличить процент нагрузки, объедините Очереди в группы (с помощью параметра
label).