
7.2. Отказоустойчивость процессов 415
Представим себе, что командир одной из армий «синих», генерал Александер,
посылает сообщение командиру второй армии «синих», генералу Бонапарту,
в котором пишет: «У меня есть план
—
давайте атакуем завтра на рассвете». По-
сыльный добирается до места назначения, и Бонапарт отправляет его назад с отве-
том: «Отличная идея, Алекс. Увидимся завтра, как рассветет». Посыльный не-
вредимым возвращается назад, и Александер приказывает войскам подготовиться
к бою на рассвете.
Однако позже в этот же день Александер понимает, что Бонапарт не знает,
добрался ли посыльный назад, а не зная этого, может и не решиться на атаку.
В
результате Александер приказывает посыльному пойти и сказать Бонапарту,
что его (Бонапарта) сообщение доставлено и битва состоится.
Посыльный добирается до армии Бонапарта и доставляет подтверждение. Но
теперь Бонапарт начинает беспокоиться о том, что Александер не знает, дошло
ли до него это подтверждение. По мнению Бонапарта, Александер будет рассуж-
дать так: «Если Бонапарт подумает, что посыльный был взят в плен, он не будет
уверен в моих (Александера) планах и может не рискнуть атаковать». И Бона-
парт вновь посылает гонца назад.
Сколько бы посыльный ни бегал туда-сюда, нетрудно понять, что Александер
и Бонапарт никогда не договорятся между собой, сколько бы соглашений они
друг другу не пересылали. Допустим, что это
—
некий протокол, который огра-
ничен конечным числом шагов. Уберем все дополнительные шаги в конце обме-
на, чтобы получить минимальный работающий протокол. Какое-то сообщение
станет теперь последним, и оно будет абсолютно необходимым для достижения
этого соглашения (поскольку это минимальный протокол). Если это сообщение
не будет доставлено, война прекратится.
Однако отправитель последнего сообщения не знает, доставлено ли это сооб-
щение. Если оно не доставлено, протокол не завершается и второй генерал не на-
чинает атаку. Таким образом, отправитель последнего сообщения не может уз-
нать,
планируется война или нет, а следовательно, не может отдать безопасной
команды своим войскам. Поскольку получатель последнего сообщения знает,
что отправитель не уверен в результате, он также не хочет идти на верную
смерть, и соглашение не заключается. Даже при условии безошибочных процес-
сов (генералов) соглашение между двумя процессами при условии ненадежного
взаимодействия невозможно.
Теперь предположим, что связь идеальна, а процессы
—
нет. Эта классическая
задача известна под названием проблемы византийских генералов {Byzantine
generals
problem). Согласно условиям этой задачи армия «зеленых» по-прежне-
му стоит лагерем в долине, а п армий синих под командованием своих генералов
расположились за рядом стоящими холмами. Между каждой парой из них нала-
жена телефонная связь, она мгновенна и идеальна. Однако т генералов
—
преда-
тели (дефектные процессы), которые активно стараются помешать лояльным
генералам заключить соглашение, сообщая им заведомо неверную и противо-
речивую информацию (моделируя неверно функционирующие процессы). Во-
прос в том, смогут ли лояльные генералы договориться, невзирая на противодей-
ствие.