Durable Task: когда процессу нужна память о каждом шаге

Когда долговечное исполнение окупается: долгие процессы, саги, массовая обработка через LLM и AI-агенты. Где хватит очереди и Kafka. Правило выбора.

  • Что такое durable execution
  • Сколько стоит процесс без памяти
  • Где durable execution окупается
  • Где он лишний

Повод

  1. Microsoft опубликовала в блоге .NET разбор Durable Task in the Real World.

  2. Авторы описывают пять практических сценариев, где durable execution оправдан, и случаи, где он только добавляет сложности.

  3. Отдельный раздел посвящён AI-агентам.

  4. Из разбора я вывел правило: долговечное исполнение окупается, когда бизнес-процесс живёт дольше одного запроса и потерянный шаг стоит денег. В остальных случаях хватит очереди и идемпотентного обработчика.

Что такое durable execution

  1. Durable Task - open-source фреймворк Microsoft, на нём построены Azure Durable Functions.

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

  3. Фреймворк записывает результат каждого завершённого шага в историю. Допустим, процесс упал на четвёртом шаге.

  4. После рестарта оркестратор перечитывает историю (этот механизм называется replay), подставляет сохранённые результаты первых трёх шагов и продолжает с четвёртого.

  5. Ожидание может длиться днями: таймер или внешнее событие хранятся в базе, поток при этом не занят. За это приходится платить.

  6. Код оркестратора должен быть детерминированным: внутри нельзя вызывать `DateTime.Now`, генерировать `Guid` или напрямую ходить в HTTP.

  7. Внешние вызовы разработчик выносит в activities, а время и случайные значения берёт через API фреймворка. Команда, которая не знает этих правил, получит баги, которые воспроизводятся только при replay.

Сколько стоит процесс без памяти

  1. Возьмём заказ, который проходит пять систем: сайт, 1С, склад, службу доставки и ЭДО. Предположим, доступность каждой системы 99%.

  2. Тогда заказ проходит цепочку без сбоя с вероятностью 0,99⁵, то есть около 95%.

  3. При 2 000 заказов в день примерно 100 зависнут где-то посередине.

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

  5. Получается самописный durable execution без гарантий и тестов, а устройство его знает один разработчик.

Оценить, где ИИ даст эффект в вашем процессе

Где durable execution окупается

  1. ### Процессы, которые ждут человека Примеры: согласование договора, подключение поставщика, подпись документа в ЭДО.

  2. Процесс отправляет документ, ждёт три дня, по таймауту эскалирует руководителю и после подписи идёт дальше.

  3. На очереди такой процесс превращается в машину состояний, размазанную по пяти таблицам. В оркестраторе он занимает несколько десятков строк последовательного кода. ### Саги с компенсацией

  4. Склад зарезервировал товар, оплата не прошла, резерв нужно снять.

  5. Оркестратор хранит список выполненных шагов и запускает компенсации в обратном порядке.

  6. Без этого на складе копятся фантомные резервы: товар физически лежит на полке, а продать его нельзя. ###

  7. Массовая обработка с параллелизмом Допустим, нужно обогатить через LLM 50 000 карточек товаров в Pimcore или Akeneo.

  8. Оркестратор режет их на пачки, запускает параллельно (fan-out) и собирает результат (fan-in).

  9. Если на 30 000-й карточке упадёт модель или кончится квота, обработка продолжится с места сбоя.

  10. Без оркестратора токены, оплаченные за первые 30 000 карточек, пришлось бы тратить второй раз. ### AI-агенты

  11. Агент работает циклом: модель выбирает инструмент, получает результат и решает, что делать дальше.

  12. Иногда агент останавливается и ждёт подтверждения человека.

  13. Каждая итерация стоит токенов и может иметь побочный эффект.

  14. Пусть агент упал на двенадцатом вызове из пятнадцати.

  15. Перезапуск с нуля оплатит одиннадцать вызовов повторно.

  16. Кроме того, клиент может получить письмо дважды, а в 1С появится второй документ. Durable execution сохраняет результат каждого вызова модели и инструмента, и после восстановления агент продолжает с последнего шага.

Где он лишний

  1. Короткие идемпотентные запросы, которые укладываются в секунды, закрываются политикой retry. Для потока «сообщение из Apache Kafka → запись в базу»

  2. оркестратор тоже не нужен: Kafka хранит offset, и второй источник истины только усложнит отладку.

  3. Если обмен с 1С уже идёт через ESB с гарантированной доставкой, например Datareon, MuleSoft или Talend, дублировать эти гарантии оркестратором бессмысленно.

  4. Есть и операционный риск, который команды часто упускают на старте, - версионирование. Представьте, что 400 экземпляров процесса ждут подписи, а вы меняете код оркестратора.

  5. При replay старая история не совпадёт с новым кодом, и процессы упадут.

  6. Стратегию версий нужно продумать до первого релиза.

Правило выбора на три вопроса

Когда мы проектируем интеграцию, мы задаём три вопроса:

Процесс живёт дольше минуты или ждёт внешнего события?

В нём больше трёх шагов в разных системах?

Повтор шага стоит денег или портит данные

Два «да» - берите durable execution. Меньше - хватит очереди с идемпотентными обработчиками. В проектах AI-native integration KT.Team мы сначала строим карту процесса и считаем цену потерянного шага, а инструмент выбираем потом. Потоки событий идут через Kafka, обмен с 1С - через Datareon. Долгие саги и агентные циклы мы пишем на C#/.NET с оркестратором. Вызовы моделей проходят через LLM & Security Gateway, где видно, сколько токенов ушло на повторы.

Вердикт

Durable execution сложен в освоении, зато для своего класса задач он быстро даёт результат: time to use, то есть срок от внедрения до первой пользы, у него короткий. Процесс, который раньше держался на таблице статусов, cron и ручном разборе, превращается в линейный код, который переживает падения. Команда, которая ставит оркестратор на каждый HTTP-вызов, получит лишнюю инфраструктуру и баги детерминизма.

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

Обсудить статью: Durable Task: когда процессу нужна память…

Укажите email или телефон, чтобы мы могли вам ответить.

Отправить через: