Архитектура метаинтеллектаМетаинтеллект · Согласие · Отказоустойчивость

Согласие без центра: как решать вместе, не доверяя никому на слово

Пока у системы есть главный узел, вопрос общего решения не стоит: главный решил — остальные исполнили. Как только главного нет или ему нельзя доверять безоговорочно, появляется задача, которой в обычных агентных сборках просто не занимаются.

Архитектура метаинтеллекта · часть 5 из 6

Почему «пусть решает координатор» — не решение

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

Третье свойство обычно недооценивают. «Верить» здесь не про злой умысел: достаточно программной ошибки, устаревшего состояния или частичной потери связи, чтобы координатор начал раздавать решения, противоречащие тому, что видят остальные. И система это примет — потому что доверие встроено в архитектуру.

Что значит византийская модель отказов

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

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

Как устроен один цикл согласия

  1. Лидер раунда рассылает подписанное предложение: какое изменение общего состояния он предлагает зафиксировать.
  2. Каждая реплика самостоятельно проверяет предложение — корректность перехода состояния, номер последовательности, подпись — и отвечает собственным подписанным голосом.
  3. Лидер собирает кворум уникальных голосов и рассылает сертификат фиксации.
  4. Каждая реплика проверяет все подписи в сертификате, надёжно записывает его в журнал и только затем применяет изменение.

Арифметика устойчивости

Для комитета из n участников допустимое число произвольно ведущих себя реплик и размер кворума считаются так:

f = floor((n - 1) / 3)
quorum = 2f + 1

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

Что протокол обязан отвергать

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

Смена лидера и догоняющая синхронизация

Лидер может исчезнуть или замолчать. Тогда участники голосуют за смену раунда, и лидерство переходит дальше. Это не аварийная процедура, а штатная часть протокола: система должна продолжать работу без вмешательства человека.

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

Где это нужно агентной системе

Не везде. Согласие оправдано там, где решение общее и необратимое:

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

Код и артефакты

Серия «Архитектура метаинтеллекта»

  1. Метаинтеллект: почему следующий уровень — не модель, а среда
  2. Агент как ограниченный локальный мир
  3. Связь как объект первого класса, а не очередь сообщений
  4. Живой граф: когда топология — следствие работы, а не проект
  5. Согласие без центра: как решать вместе, не доверяя никому на слово
  6. Экономика агентов: почему автономии нужен бюджет

Частые вопросы

Это блокчейн?

Нет. Здесь фиксированный известный комитет и классический протокол византийского согласия, а не открытая сеть с экономическим стимулированием. Общее у них только требование корректности при произвольном поведении части участников.

Зачем агентам такая сложность?

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

Сколько узлов нужно?

Минимум четыре, чтобы пережить одного произвольно ведущего себя участника. Формула жёсткая: каждая дополнительная переживаемая неисправность требует ещё трёх узлов, и это следует учитывать при проектировании — устойчивость не бесплатна.

Чем мы помогаем по этой теме

Читать дальше

Обсудим вашу задачу

Если у вас похожая задача — расскажите, что нужно решить. Скажем прямо, если она решается проще, чем кажется.

Написать нам