Фундаментальной проблемой в распределенных вычислениях и многоагентных системах является достижение общей надежности системы при наличии ряда неисправных процессов. Это часто требует координации процессов для достижения консенсуса или согласования некоторого значения данных, которое необходимо во время вычислений. Примеры применения консенсуса включают согласование того, какие транзакции следует фиксировать в базе данных и в каком порядке, репликацию конечного автомата и атомарные трансляции . Реальные приложения, часто требующие консенсуса, включают облачные вычисления , синхронизацию часов , PageRank , формирование мнения, интеллектуальные электросети , оценку состояния , управление беспилотными летательными аппаратами (и несколькими роботами/агентами в целом), балансировку нагрузки , блокчейн и другие.
Проблема консенсуса требует соглашения между несколькими процессами (или агентами) по одному значению данных. Некоторые процессы (агенты) могут давать сбои или быть ненадежными в других отношениях, поэтому протоколы консенсуса должны быть отказоустойчивыми или устойчивыми. Процессы должны выдвигать свои кандидатные значения, общаться друг с другом и согласовывать единое консенсусное значение.
Проблема консенсуса является фундаментальной проблемой в управлении многоагентными системами. Один из подходов к достижению консенсуса заключается в том, чтобы все процессы (агенты) согласились на значение большинства. В этом контексте большинство требует как минимум одного голоса больше половины доступных голосов (где каждому процессу дается голос). Однако один или несколько ошибочных процессов могут исказить конечный результат таким образом, что консенсус может быть не достигнут или может быть достигнут неправильно.
Протоколы, решающие проблемы консенсуса, предназначены для работы с ограниченным числом неисправных процессов . Эти протоколы должны удовлетворять нескольким требованиям, чтобы быть полезными. Например, тривиальный протокол может иметь все процессы, выводящие двоичное значение 1. Это бесполезно; таким образом, требование изменено таким образом, что производство должно зависеть от ввода. То есть выходное значение протокола консенсуса должно быть входным значением некоторого процесса. Другое требование заключается в том, что процесс может принять решение о выходном значении только один раз, и это решение является необратимым. Метод является правильным при выполнении, если он не испытывает сбоя. Протокол консенсуса, допускающий остановку сбоев, должен удовлетворять следующим свойствам. [1]
Вариации определения целостности могут быть уместны в зависимости от приложения. Например, более слабый [ необходимо дополнительное объяснение ] тип целостности будет для значения решения, равного значению, которое предложил какой-то правильный процесс — не обязательно все из них. [1] Также существует условие, известное в литературе как действительность , которое относится к свойству, что сообщение, отправленное процессом, должно быть доставлено. [1]
Протокол, который может корректно гарантировать консенсус среди n процессов, из которых не более t завершаются неудачей, называется t-устойчивым .
При оценке производительности протоколов консенсуса интерес представляют два фактора: время выполнения и сложность сообщения . Время выполнения указывается в нотации Big O в количестве раундов обмена сообщениями как функция некоторых входных параметров (обычно количества процессов и/или размера входного домена). Сложность сообщения относится к объему трафика сообщений, генерируемого протоколом. Другие факторы могут включать использование памяти и размер сообщений.
Различные модели вычислений могут определять «проблему консенсуса». Некоторые модели могут иметь дело с полностью связанными графами, в то время как другие могут иметь дело с кольцами и деревьями. В некоторых моделях допускается аутентификация сообщений, тогда как в других процессы полностью анонимны. Модели общей памяти, в которых процессы взаимодействуют путем доступа к объектам в общей памяти, также являются важной областью исследований.
В большинстве моделей протоколов связи участники общаются через аутентифицированные каналы. Это означает, что сообщения не являются анонимными, и получатели знают источник каждого сообщения, которое они получают. Некоторые модели предполагают более сильную, передаваемую форму аутентификации, где каждое сообщение подписывается отправителем, так что получатель знает не только непосредственный источник каждого сообщения, но и участника, который изначально создал сообщение. Этот более сильный тип аутентификации достигается с помощью цифровых подписей, и когда эта более сильная форма аутентификации доступна, протоколы могут выдерживать большее количество сбоев. [2]
Две различные модели аутентификации часто называют моделями устной коммуникации и письменной коммуникации . В модели устной коммуникации известен непосредственный источник информации, тогда как в более сильных моделях письменной коммуникации на каждом шагу получатель узнает не только непосредственный источник сообщения, но и историю коммуникации сообщения. [3]
В большинстве традиционных протоколов консенсуса с одним значением, таких как Paxos , взаимодействующие узлы согласовывают одно значение, например целое число, которое может иметь переменный размер, чтобы кодировать полезные метаданные, такие как транзакция, зафиксированная в базе данных.
Частный случай проблемы консенсуса с одним значением, называемый двоичным консенсусом , ограничивает входные данные и, следовательно, выходную область одной двоичной цифрой {0,1}. Хотя сами по себе они не очень полезны, двоичные протоколы консенсуса часто полезны в качестве строительных блоков в более общих протоколах консенсуса, особенно для асинхронного консенсуса.
В протоколах многозначного консенсуса, таких как Multi-Paxos и Raft , цель состоит в том, чтобы согласовать не просто одно значение, а ряд значений с течением времени, формируя постепенно растущую историю. В то время как многозначный консенсус может быть достигнут наивно путем запуска нескольких итераций протокола однозначного консенсуса подряд, многие оптимизации и другие соображения, такие как поддержка реконфигурации, могут сделать многозначные консенсусные протоколы более эффективными на практике.
Существует два типа сбоев, которые может претерпеть процесс: аварийный сбой или византийский сбой . Аварийный сбой происходит, когда процесс внезапно останавливается и не возобновляется. Византийские сбои — это сбои, при которых не налагаются абсолютно никакие условия. Например, они могут возникнуть в результате злонамеренных действий злоумышленника. Процесс, который испытывает византийский сбой, может отправлять противоречивые или конфликтующие данные другим процессам или может спать, а затем возобновить деятельность после длительной задержки. Из двух типов сбоев византийские сбои являются гораздо более разрушительными.
Таким образом, протокол консенсуса, допускающий византийские сбои, должен быть устойчивым к любой возможной ошибке.
Более сильная версия консенсуса, допускающего византийские неудачи, достигается путем усиления ограничения целостности:
Проблема консенсуса может рассматриваться в случае асинхронных или синхронных систем. Хотя реальные коммуникации часто по своей сути асинхронны, более практично и часто проще моделировать синхронные системы, [4] учитывая, что асинхронные системы по своей природе связаны с большим количеством проблем, чем синхронные.
В синхронных системах предполагается, что все коммуникации происходят раундами . В одном раунде процесс может отправлять все необходимые ему сообщения, получая при этом все сообщения от других процессов. Таким образом, ни одно сообщение из одного раунда не может повлиять на сообщения, отправленные в том же раунде.
В полностью асинхронной распределенной системе передачи сообщений, в которой по крайней мере один процесс может иметь сбой , было доказано в знаменитом результате невозможности FLP 1985 года Фишером, Линчем и Патерсоном, что детерминированный алгоритм для достижения консенсуса невозможен. [5] Этот результат невозможности вытекает из наихудших сценариев планирования, которые вряд ли возникнут на практике, за исключением враждебных ситуаций, таких как интеллектуальный атакующий отказ в обслуживании в сети. В большинстве обычных ситуаций планирование процессов имеет степень естественной случайности. [4]
В асинхронной модели некоторые формы сбоев могут быть обработаны синхронным консенсусным протоколом. Например, потеря связи может быть смоделирована как процесс, который потерпел византийский сбой.
Рандомизированные алгоритмы консенсуса могут обойти результат невозможности FLP, достигая как безопасности, так и жизнеспособности с подавляющей вероятностью, даже в наихудших сценариях планирования, таких как интеллектуальный злоумышленник, осуществляющий отказ в обслуживании в сети. [6]
Традиционно алгоритмы консенсуса предполагают, что набор участвующих узлов фиксирован и задан изначально: то есть, что некоторый предшествующий (ручной или автоматический) процесс конфигурации разрешил определенную известную группу участников, которые могут аутентифицировать друг друга как членов группы. При отсутствии такой четко определенной, закрытой группы с аутентифицированными членами атака Сивиллы против открытой консенсусной группы может победить даже византийский алгоритм консенсуса, просто создав достаточно виртуальных участников, чтобы преодолеть порог отказоустойчивости.
Протокол консенсуса без разрешения , напротив, позволяет любому человеку в сети динамически присоединяться и участвовать без предварительного разрешения, но вместо этого налагает другую форму искусственных затрат или барьера для входа, чтобы смягчить угрозу атаки Сивиллы . Биткоин представил первый протокол консенсуса без разрешения, использующий доказательство работы и функцию корректировки сложности, в котором участники соревнуются в решении криптографических хэш- головоломок и вероятностно зарабатывают право на фиксацию блоков и получение связанных с этим вознаграждений пропорционально вложенным ими вычислительным усилиям. Мотивированные отчасти высокой стоимостью энергии этого подхода, последующие протоколы консенсуса без разрешения предложили или приняли другие альтернативные правила участия для защиты от атаки Сивиллы, такие как доказательство доли , доказательство пространства и доказательство полномочий .
Ниже приведены три представляющие интерес проблемы согласования.
Набор процессов, пронумерованных от для общения путем отправки сообщений друг другу. Процесс должен передавать значение всем процессам таким образом, чтобы:
Ее также называют «Проблемой генерала».
Формальные требования к консенсусному протоколу могут включать:
Для n процессов в частично синхронной системе (система чередует хорошие и плохие периоды синхронности), каждый процесс выбирает частное значение. Процессы взаимодействуют друг с другом раундами для определения публичного значения и генерируют вектор консенсуса со следующими требованиями: [7]
Можно показать, что вариации этих проблем эквивалентны в том, что решение проблемы в одном типе модели может быть решением другой проблемы в другом типе модели. Например, решение проблемы Weak Byzantine General в синхронной аутентифицированной модели передачи сообщений приводит к решению для Weak Interactive Consistency. [8] Алгоритм интерактивной согласованности может решить проблему консенсуса, заставив каждый процесс выбрать значение большинства в своем векторе консенсуса в качестве своего значения консенсуса. [9]
Существует t-устойчивый анонимный синхронный протокол , который решает задачу византийских генералов [10] [11], если и случай слабых византийских генералов [8], где — количество сбоев, а — количество процессов.
Для систем с процессорами, из которых византийские, было показано, что не существует алгоритма, который решает проблему консенсуса для в модели устных сообщений . [12] Доказательство строится путем демонстрации невозможности для случая с тремя узлами и использования этого результата для рассуждений о разделах процессоров. В модели письменных сообщений есть протоколы, которые могут выдерживать . [2]
В полностью асинхронной системе нет консенсусного решения, которое может выдержать один или несколько сбоев, даже если требуется только свойство нетривиальности. [5] Этот результат иногда называют доказательством невозможности FLP, названным в честь авторов Майкла Дж. Фишера , Нэнси Линч и Майка Патерсона , которые были награждены премией Дейкстры за эту значимую работу. Результат FLP был механически проверен на то, что он справедлив даже при предположениях о справедливости . [13] Однако FLP не утверждает, что консенсус никогда не может быть достигнут: просто в соответствии с предположениями модели ни один алгоритм не может всегда достигать консенсуса за ограниченное время. На практике это крайне маловероятно.
Алгоритм консенсуса Paxos Лесли Лэмпорта и его варианты, такие как Raft , широко используются в широко распространенных распределенных и облачных вычислительных системах. Эти алгоритмы обычно синхронны, зависят от избранного лидера для достижения прогресса и терпят только сбои, а не византийские неудачи.
Примером протокола бинарного консенсуса с полиномиальным временем, допускающего византийские сбои, является алгоритм Phase King Гарая и Бермана. [14] Алгоритм решает консенсус в синхронной модели передачи сообщений с n процессами и до f сбоев, при условии, что n > 4 f . В алгоритме Phase King есть f + 1 фаз, с 2 раундами на фазу. Каждый процесс отслеживает свой предпочтительный выход (изначально равный собственному входному значению процесса). В первом раунде каждой фазы каждый процесс транслирует свое собственное предпочтительное значение всем другим процессам. Затем он получает значения от всех процессов и определяет, какое значение является значением большинства, и его количество. Во втором раунде фазы процесс, идентификатор которого совпадает с текущим номером фазы, назначается королем фазы. Король транслирует значение большинства, которое он наблюдал в первом раунде, и служит в качестве решающего фактора. Затем каждый процесс обновляет свое предпочтительное значение следующим образом. Если количество значений большинства, которое процесс наблюдал в первом раунде, больше, чем n /2 + f , процесс меняет свое предпочтение на это значение большинства; в противном случае он использует значение короля фазы. В конце f + 1 фаз процессы выводят свои предпочтительные значения.
Google реализовал распределенную библиотеку сервиса блокировки под названием Chubby . [15] Chubby хранит информацию о блокировках в небольших файлах, которые хранятся в реплицированной базе данных для достижения высокой доступности в случае сбоев. База данных реализована поверх отказоустойчивого слоя журнала, который основан на алгоритме консенсуса Paxos . В этой схеме клиенты Chubby взаимодействуют с мастером Paxos для доступа к реплицированному журналу или его обновления; т. е. для чтения и записи файлов. [16]
Многие одноранговые онлайн- стратегии в реальном времени используют модифицированный протокол lockstep в качестве протокола консенсуса для управления состоянием игры между игроками в игре. Каждое игровое действие приводит к трансляции дельты состояния игры всем другим игрокам в игре вместе с хешем общего состояния игры. Каждый игрок подтверждает изменение, применяя дельту к своему собственному состоянию игры и сравнивая хеши состояния игры. Если хеши не совпадают, то проводится голосование, и те игроки, чье состояние игры находится в меньшинстве, отключаются и удаляются из игры (это называется рассинхронизацией).
Другой известный подход называется алгоритмами типа MSR, которые широко используются в компьютерной науке и теории управления. [17] [18] [19]
Bitcoin использует proof of work , функцию корректировки сложности и функцию реорганизации для достижения консенсуса без разрешения в своей открытой одноранговой сети. Чтобы расширить блокчейн или распределенный реестр биткойнов , майнеры пытаются решить криптографическую головоломку, где вероятность нахождения решения пропорциональна вычислительным усилиям, затраченным в хэшах в секунду. Узел, который первым решает такую головоломку, добавляет свою предложенную версию следующего блока транзакций в реестр и в конечном итоге принимает ее всеми остальными узлами. Поскольку любой узел в сети может попытаться решить проблему proof of work, атака Сивиллы в принципе невозможна, если только у злоумышленника нет более 50% вычислительных ресурсов сети.
Другие криптовалюты (например, Ethereum , NEO, STRATIS, ...) используют доказательство доли , в котором узлы соревнуются за добавление блоков и зарабатывают соответствующие вознаграждения пропорционально доле или существующей криптовалюте, выделенной и заблокированной или поставленной на ставку на определенный период времени. Одним из преимуществ «доказательства доли» перед системой «доказательства работы» является высокое потребление энергии, требуемое последней. Например, по оценкам, майнинг биткоинов (2018) потребляет невозобновляемые источники энергии в количестве, аналогичном всем странам Чешской Республики или Иордании, в то время как общее потребление энергии Ethereum, крупнейшей сети доказательства доли, чуть меньше, чем у 205 средних домохозяйств США. [29] [30] [31]
Некоторые криптовалюты, такие как Ripple, используют систему валидации узлов для валидации реестра. Эта система, используемая Ripple, называется Ripple Protocol Consensus Algorithm (RPCA), и работает раундами:
Другие правила участия, используемые в протоколах консенсуса без разрешения для наложения барьеров на вход и противодействия атакам Сивиллы, включают в себя доказательство полномочий , доказательство пространства , доказательство записи или доказательство прошедшего времени.
В отличие от вышеприведенных правил участия без разрешения, все из которых вознаграждают участников пропорционально объему инвестиций в какое-либо действие или ресурс, протоколы доказательства личности направлены на то, чтобы дать каждому реальному участнику-человеку ровно одну единицу права голоса в консенсусе без разрешения, независимо от экономических инвестиций. [33] [34] Предлагаемые подходы к достижению распределения права консенсуса «один на человека» для доказательства личности включают физические псевдонимные партии, [35] социальные сети, [36] псевдонимизированные удостоверения личности, выданные правительством, [37] и биометрию. [38]
Для решения проблемы консенсуса в системе с общей памятью необходимо ввести параллельные объекты. Параллельный объект, или разделяемый объект, представляет собой структуру данных, которая помогает параллельным процессам общаться для достижения соглашения. Традиционные реализации, использующие критические секции, сталкиваются с риском сбоя, если какой-либо процесс умирает внутри критической секции или спит невыносимо долгое время. Исследователи определили свободу ожидания как гарантию того, что алгоритм завершится за конечное число шагов.
Число консенсуса параллельного объекта определяется как максимальное число процессов в системе, которые могут достичь консенсуса данным объектом в реализации без ожидания. [39] Объекты с числом консенсуса могут реализовать любой объект с числом консенсуса или ниже, но не могут реализовать любой объект с более высоким числом консенсуса. Числа консенсуса формируют то, что называется иерархией объектов синхронизации Херлихи . [40]
Согласно иерархии, регистры чтения/записи не могут решить консенсус даже в системе с 2 процессами. Структуры данных, такие как стеки и очереди, могут решить консенсус только между двумя процессами. Однако некоторые параллельные объекты являются универсальными (отмечены в таблице как ), что означает, что они могут решить консенсус среди любого количества процессов, и они могут имитировать любые другие объекты через последовательность операций. [39]
{{cite book}}
: |journal=
проигнорировано ( помощь )