Все статьи

Координация во время исполнения

Агенту нужна аренда работы, а не постоянное владение

Возобновляемая аренда работы даёт агенту временное право продвигать задачу, а организации — дисциплинированный способ остановить, заменить и контролировать его при утрате определённости.

MP
Max PerfiljevFounder & CEO, AES · Архитектор автономных организаций
Read in English

Назначение задачи агенту отвечает на полезный, но неполный вопрос: кому поручили работу? Оно не отвечает на более трудный вопрос времени исполнения: кто всё ещё вправе продвигать её сейчас?

Это различие становится практическим, как только автономная работа переживает один непрерывный процесс. Повтор модели может возобновиться со старым контекстом. Воркер может приостановиться, пока запускается замена. При разделении сети агент может не понимать, признаёт ли его рантайм по-прежнему. Оператору может понадобиться принять дело, которое уже выполняется. Видимость задачи в очереди, heartbeat процесса и собственный отчёт агента о статусе не устанавливают полномочия ни в одном из этих случаев.

Подходящий примитив здесь — возобновляемая аренда работы. Агент не владеет задачей постоянно. Он получает ограниченное по времени право продвигать определённый рабочий объект — на условиях, которые рантайм наблюдает, а системы-получатели его действий могут применить принудительно.

Владение должно истекать

Аренды — давно известный механизм распределённых систем. Грей и Черитон описали их как ограниченные во времени права: если клиент становится недоступен, конфликтующий доступ может быть задержан, но лишь до истечения выданного права. Ценность не в том, что время устраняет все отказы. Ценность в том, что полномочия не остаются неопределёнными навсегда. Корректность всё равно требует явных допущений о часах, консервативной обработки истечения срока или семантики, которую предоставляет сервис координации.

Это верная модель и для автономной организации. Аренда работы должна означать, что один держатель сейчас вправе продвигать конкретную задачу, а не что задача принадлежит ему бессрочно. Держатель продлевает аренду, пока способен подтвердить ограниченные условия, заданные рантаймом. Если продление не удаётся или становится неопределённым, его полномочия сужаются, а не продолжаются молча.

Kubernetes даёт знакомый пример такого примитива: он представляет аренды как объекты координации, используемые для heartbeat узлов и выбора лидера компонентов. etcd связывает лидерство на выборах с арендой, поэтому лидерство может перейти другому участнику после истечения или отзыва аренды. Это не продукты для управления агентами. Но они демонстрируют важное операционное правило: текущий держатель — это явно поддерживаемый факт, а не вывод из того, что процесс всё ещё запущен.

Аренде недостаточно heartbeat

Рабочая запись аренды должна хранить как минимум идентификатор аренды, идентификатор работы, идентичность держателя, время выдачи и продлений, правило истечения, текущее состояние определённости, причину перехвата, историю продлений, fencing epoch и эффекты, попытки которых были предприняты в рамках аренды. Это не учётная запись, добавленная ради удобства аудита. Это состояние, необходимое для того, чтобы перехват, расследование и восстановление были управляемыми операциями, а не разговорами между операторами.

Решающим полем является fencing epoch — монотонно возрастающий номер, назначаемый при смене держателя работы. Каждое внешнее действие, зависящее от исключительных полномочий, передаёт текущий epoch или эквивалентный sequencer в инструмент или бизнес-систему получателя. Получатель обязан проверить его и отклонить действие прежнего держателя.

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

Аренда устанавливает, кто сейчас вправе продвигать работу. Fencing epoch позволяет зависимым системам отвергнуть полномочия, срок которых истёк.

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

Jeopardy — это состояние, а не текст ошибки

Самый опасный момент — не чистое падение, а неопределённость. Агент может продолжать вычисления, не имея возможности продлить аренду или понять, дошло ли продление до сервиса координации. Относиться к этому как к обычной деградации сети — значит допустить раздвоение полномочий: прежний держатель продолжает действовать, пока рантайм назначает нового.

Управляемый рантайм должен явно вводить состояние jeopardy. Когда действительность продления неясна, держатель прекращает производить внешние эффекты. Он может сохранить локальное состояние, подготовить checkpoint, собрать доказательства или ждать возвращения определённости. Но он не должен создавать новые обязательства, отправлять необратимую инструкцию или заявлять об успешном завершении. Требуемое поведение — покой, а не оптимизм.

Это не означает, что любую незавершённую задачу можно безопасно передать после истечения аренды. Преемнику может понадобиться долговечный checkpoint. Ему может потребоваться сверить уже предпринятые эффекты. Частично выполненная отгрузка, изменённая настройка производства или обязательство перед клиентом могут потребовать компенсации либо проверки человеком. Аренда регулирует текущие основания действовать; она не отменяет состояние реального мира, созданное до возникновения неопределённости.

Не смешивайте три решения рантайма

Аренды работы часто путают со смежными контролями. Их следует разделять, потому что они отвечают на разные вопросы в разные моменты.

  • Допуск работы отвечает на вопрос, можно ли вообще начинать: зарезервированы ли ёмкость, границы задачи и операционный контур?
  • Аренда работы отвечает на вопрос, какой исполнитель сейчас вправе продвигать рабочий объект.
  • Авторизация в момент фиксации отвечает на вопрос, допустим ли конкретный предлагаемый эффект сейчас с учётом политики, доказательств и контекста.

Допущенная задача может ожидать без аренды. Держателю аренды могут отказать в момент фиксации, потому что конкретное действие больше не разрешено. А авторизация фиксации не доказывает, что воркер остаётся правомерным исполнителем более широкой задачи. Если свести эти решения к одному токену, отказы будет трудно объяснять, а передачи работы — трудно контролировать.

Проектируйте перехват раньше счастливого пути

Для основателей и архитекторов практическая проверка проста: если воркер исчезает, приостанавливается или его оспаривает оператор, может ли организация показать, кто вправе действовать следующим и почему? Надёжный ответ — это протокол, а не договорённость для дежурной смены.

  1. Выдавайте аренду на том уровне, где действительно нужны исключительное владение работой или дефицитные полномочия. Не превращайте каждую задачу в глобальный mutex.
  2. Продлевайте её через механизм координации с явной семантикой истечения. Heartbeat — лишь ограниченное свидетельство живости и продления, но не доказательство корректности, прогресса или соответствия политике.
  3. Переводите держателя в jeopardy, когда действительность продления неясна, и запрещайте ему создавать внешние эффекты.
  4. При истечении, отзыве или одобренном вмешательстве выдавайте новую аренду с более высоким fencing epoch и фиксируйте причину перехвата.
  5. Требуйте от получателей эффектов проверки epoch или эквивалентного транзакционного условия; затем сверяйте checkpoints и попытки эффектов, прежде чем объявлять работу завершённой.

Передача человеку должна идти тем же путём. Оператор не должен просто написать агенту, чтобы тот остановился. Рантайм должен отозвать или заменить его аренду, зафиксировать причину, выдать временные полномочия человеку или исполнителю-замене и сохранить доказательства для понимания уже предпринятой работы. Тогда вмешательство становится подотчётным исполнением, а не исключением за пределами системы.

Временные полномочия честнее постоянных

В автономных организациях неизбежны паузы, повторы, частичные отказы и спорные передачи работы. Постоянное владение задачей делает вид, что этих условий не существует. Аренда признаёт их и ограничивает их последствия.

Архитектурный сдвиг невелик, но важен: представляйте владение работой как возобновляемое, наблюдаемое и отзывное; представляйте неопределённость как состояние, ограничивающее действия; требуйте, чтобы системы, получающие значимые эффекты, отвергали устаревших держателей. Само по себе это не обещает исполнения без дублей. Но даёт организации устойчивый ответ на предшествующий вопрос: какой исполнитель имел право действовать в этот момент?

ПОСТРОИТЬ С AES

Превратите архитектуру в работающую компанию.

AES связывает стратегию, задачи, организационную память, знания, агентов, людей и согласования в единой среде исполнения.