Ранас Мукминов – Оркестрация ИИ-агентов. Claude Opus 4.7 (страница 49)
Из трудности согласования следует свойство, отличающее peer-to-peer от централизованных топологий сильнее всего: рой может не прийти к решению вовсе. В централизованной топологии центр в конце концов выносит вердикт — даже если он плох, он есть. В peer-to-peer вердикт должен возникнуть из взаимодействия, и нет гарантии, что он возникнет.
Возможны коллективные траектории, в которых рой активен, но не продвигается: узлы бесконечно пересогласовывают, перехватывают друг у друга задачи, отменяют чужие изменения своими. Это livelock на уровне роя (см. главы 45 и 74): все заняты, ресурсы тратятся, а система не сходится. В отличие от тупика, livelock не виден как остановка — снаружи рой выглядит работающим. Именно отсутствие центра делает livelock в peer-to-peer особенно вероятным и особенно трудным для обнаружения: нет узла, который видел бы, что общий прогресс отсутствует, потому что прогресс — глобальное свойство, а каждый узел видит лишь локальное.
Защита от расходимости в peer-to-peer не сводится к одному приёму. Она требует протоколов согласования с доказанными свойствами завершимости при принятых допущениях, ограничителей на пересогласование (узел не может бесконечно перехватывать одну и ту же задачу), и — что важнее всего — наблюдаемости глобального прогресса, которая в децентрализованной системе сама является трудной задачей (см. ниже).
Peer-to-peer добавляет к общим режимам отказа коммуникации (см. главу 30) и координации (см. часть VI) собственный класс, прямо вытекающий из отсутствия центра. Эти режимы — не крайние случаи, а типичное поведение децентрализованной сети, и проектировать против них нужно с самого начала.
Если сеть разделяется на части, которые временно не видят друг друга (network partition), каждая часть продолжает работать независимо. В централизованной топологии раскол виден как потеря связи с центром, и поведение определено: часть без центра останавливается или ждёт. В peer-to-peer обе части продолжают координироваться внутри себя, расходясь в состоянии. Когда раскол залечивается, две разошедшиеся истории состояния нужно слить, и это слияние может быть невозможным без потери изменений, сделанных в одной из частей (см. главу 40). Раскол сети — не редкость, а штатное событие распределённой системы, и peer-to-peer обязан иметь определённое поведение и при расколе, и при слиянии после него.
В сети без центра нет органа, удостоверяющего, что узел — это один участник. Противник может создать множество фиктивных узлов и тем самым получить непропорциональное влияние: перевесить голосование (см. главу 39), накрутить себе репутацию через фиктивные положительные оценки, занять в распределённой хеш-таблице участки пространства идентификаторов, через которые проходит чужой трафик. Это sybil-атака, и она специфична именно для децентрализованных систем: в централизованной топологии регистрацию узлов контролирует центр, и подделать множественность нельзя. В peer-to-peer защита от sybil требует либо дорогой проверяемой идентичности (что частично возвращает централизованный орган), либо механизмов, делающих создание множества узлов затратным, — и ни одна защита не бесплатна (см. главу 84).
Многошаговая маршрутизация и нетранзитивность доверия вместе порождают характерный режим: испорченное сообщение или инъекция, пройдя через цепочку посредников, на выходе выглядит легитимной, потому что получатель доверяет последнему посреднику и неявно — всей цепочке за ним. Это отмывание доверия (см. главу 84): источник скомпрометирован, но дистанция и посредничество скрывают это. В централизованной топологии путь короток и проходит через центр, который можно сделать точкой проверки; в peer-to-peer путь распределён, и каждый посредник — потенциальная точка как обнаружения, так и сокрытия компрометации.
Те же gossip-механизмы, что распространяют знание о составе сети и репутацию, распространяют и ошибки. Если узел внёс в общее состояние неверное значение, эпидемическое распространение разнесёт его по сети так же эффективно, как разнесло бы корректное (см. главу 53 об отравлении общей памяти). В централизованной топологии у испорченного состояния один источник — центр, — и его можно изолировать. В peer-to-peer после распространения испорченное значение присутствует на множестве узлов, и локализовать его источник постфактум трудно, а откатить — ещё труднее, потому что нет единого журнала изменений.
Самый практически тяжёлый режим — не конкретный сбой, а общая невозможность отладки. В централизованной топологии причинные цепочки проходят через центр, и посмертная реконструкция опирается на его журнал (см. главу 81). В peer-to-peer причинность размазана по множеству попарных взаимодействий, нет узла, видевшего всю картину, нет единого порядка событий (порядок в распределённой системе лишь частичен — см. главу 29). Сбой, возникший из взаимодействия многих узлов, может не локализоваться ни в одном из них (см. главу 80): каждый узел вёл себя корректно локально, а патология возникла в их совокупности. Восстановить, что произошло, без сквозной распределённой трассировки (см. главу 77), которую в peer-to-peer трудно построить именно из-за отсутствия центра, зачастую невозможно. Эта нерешаемая отладка — не недостаток инструментов, а прямое следствие топологии, и она — одна из главных причин, по которым peer-to-peer избегают в продакшене.
Режим отказа | Источник в топологии | Чего нет в централизованной топологии
Раскол сети и расхождение | Нет центра, синхронизирующего части | Раскол виден как потеря центра, поведение определено
Sybil-атака | Нет органа, удостоверяющего единичность узла | Регистрацию контролирует центр
Отмывание доверия | Многошаговый путь плюс нетранзитивность доверия | Короткий путь через центр-точку проверки
Эпидемическое отравление состояния | Gossip разносит ошибки как и корректные данные | Один источник истины, изолируемый
Нерешаемая отладка | Причинность размазана, нет единого порядка | Журнал центра восстанавливает картину
Полностью децентрализованная топология оправдана при совпадении жёстких условий, и отсутствие хотя бы одного смещает выбор к централизованной или гибридной форме.
Первое и главное — требование «нет допустимой единой точки отказа» реально, а не декларативно. Это требование возникает, когда система должна переживать потерю любого узла, включая координирующего, — например, при работе поверх ненадёжной или враждебной среды, где узлы регулярно исчезают, или когда сама постановка задачи запрещает доверенный центр (взаимно недоверяющие стороны, ни одна из которых не вправе быть арбитром). Если же допустимо иметь резервируемый центр (а резервирование оркестратора — стандартный приём, см. главу 75), требование снимается, и peer-to-peer лишний.
Второе — состав узлов крупен и динамичен настолько, что централизованное ведение его карты непрактично. Для роя из единиц и десятков агентов центр прекрасно держит карту состава; децентрализованное обнаружение тут — преждевременная сложность. Оно начинает окупаться на масштабах, где сама карта состава становится нагрузкой для центра, а такие масштабы в оркестрации агентов редки.
Третье — операции над общим состоянием коммутативны или состояние разделяемо так, что узлам почти не нужно согласовываться. Если работа естественно дробится на независимые куски без общего изменяемого состояния (см. главу 54 о share-nothing), децентрализация дёшева. Если же узлам постоянно нужно согласовывать пересекающиеся изменения, peer-to-peer платит консенсусом на каждом шаге и проигрывает центру.
Четвёртое — команда владеет распределённым консенсусом и располагает бюджетом на сложную наблюдаемость. Это организационное условие, но решающее (см. главу 15): архитектурно безупречный peer-to-peer, переданный команде без этих компетенций, превращается в неотлаживаемую систему, чьи сбои никто не умеет разбирать. Топология не должна превышать способность команды её эксплуатировать.
Преждевременная децентрализация. Команда строит peer-to-peer, чтобы «не иметь SPOF» и «масштабироваться неограниченно», на задаче, которой хватило бы оркестратора с резервированием. Платится весь налог децентрализации — квадратичное или многошаговое согласование, распределённый консенсус, нерешаемая отладка — без какой-либо выгоды, потому что реального требования к отсутствию центра не было (см. главу 15 о преждевременной децентрализации). Это частный случай антипаттерна «мультиагентность ради мультиагентности» (см. главу 4), доведённый до топологического предела.
Скрытый центр в декларативно децентрализованной системе. Систему объявили peer-to-peer, но все узлы зависят от одного общего ресурса — базы, очереди, сервиса имён. Этот ресурс — необъявленный SPOF, защита которого не заложена, потому что его существование отрицается (см. главу 3). Здесь сочетается худшее: налог децентрализации платится, а её главная выгода — отсутствие единой точки — отсутствует, потому что точка есть, просто скрытая.
Предположение о полноте знания о составе. Логика узла рассчитывает, что он знает обо всех участниках точно и сейчас. В peer-to-peer это неверно по построению: знание неполно и устаревает. Логика, требующая полной свежей картины состава (например, «опросить всех и дождаться ответа каждого»), в децентрализованной сети либо зависает в ожидании исчезнувших узлов, либо принимает решения на устаревшей карте.