Cloudflare Computer добавил восстановление задач и ожидание подтверждения

Cloudflare Computer добавил восстановление задач и ожидание подтверждения
Содержание статьи

26 октября Cloudflare представила восстановление прерванных JavaScript-задач и ожидание внешнего ответа в пакете @cloudflare/computer, начиная с версии 0.7.0. Это помогает агенту продолжить работу после сбоя или развёртывания новой версии. На Mentoring.digital объясняем, какие гарантии даёт режим replay и где разработчику всё ещё нужна защита от повторных действий.

Восстановление нужно включить явно

У WorkerJavaScriptBackend появился параметр onInterrupt. Значение по умолчанию, fail, завершает прерванную задачу с ошибкой. В режиме restart программа запускается заново вместе с уже выполненными вызовами. В режиме replay она также начинает выполнение сначала, но получает сохранённые результаты завершённых вызовов из журнала и затем продолжает работу.

Восстановление начинается при следующем обращении к workspace.runtime. Чтобы не ждать нового пользовательского запроса, приложение может вызвать workspace.runtime.recover() из alarm своего Durable Object. Само включение replay не означает немедленного запуска после развёртывания.

Операция могла завершиться до записи результата

Если внешний вызов выполнился, но его результат не успел попасть в журнал, восстановление может вызвать его снова. Поэтому сохранённый ход программы не гарантирует однократную отправку сообщения или изменение внешней системы.

Для вызовов пользовательских модулей предусмотрен стабильный callId, который можно передать внешнему сервису как ключ идемпотентности. Если сервис не позволяет безопасный повтор, обёртка unsafeToRepeat() завершит задачу с ошибкой при прерывании такого вызова. Выбор зависит от свойств конкретной операции.

Как агент ждёт решения человека

Функция пользовательского модуля может вызвать ctx.interrupt() и приостановить задачу до ответа приложения. Например, перед отправкой комментария можно показать пользователю текст и дождаться согласия. Ожидание переживает развёртывание, а его длительность не расходует тайм-аут выполнения.

Оба механизма пока помечены как экспериментальные: их поведение и формат хранения могут меняться. Для первого внедрения полезно проверить три случая на тестовых данных: сбой до внешнего действия, сбой после него и отказ пользователя. Разобрать границы повторов и хранение состояния можно с ментором по разработке серверной части.

Похожие статьи по данной теме