Экспоненциальная задержка: алгоритм прощения
Слово «илунга» из языка тшилуба, на котором говорят на юго-востоке Республики Конго, является самым труднопереводимым в мире. «Илунга» означает «человек, который готов на первый раз простить любое оскорбление, вытерпеть его во второй раз, но уж в третий – ни за что».
Из новостей ВВС
Если с первого раза не получается, Пробуй, пробуй снова.
Т. Х. Палмер
Мы рассчитываем, что все современные устройства будут беспроводными, даже если в этом нет необходимости: мышка и клавиатура, например, подключены к компьютеру по беспроводному соединению, хотя находятся в паре дюймов друг от друга. Но изначально беспроводные сети возникли именно по необходимости, там, где провода не могли бы справиться с задачей: на Гавайях. В конце 60-х – начале 70-х годов Норман Абрамсон в Гавайском университете в Гонолулу пытался связать между собой семь университетских кампусов и несколько научно-исследовательских институтов, расположенных на четырех островах за сотни миль друг от друга. Он додумался до реализации пакетной коммутации с помощью радио, а не телефонной системы, соединив острова цепью приемников и передатчиков. Эта сеть впоследствии получила название ALOHAnet.
Самым большим препятствием в работе ALOHAnet были помехи. Случалось, что две станции начинали передачу одновременно, непреднамеренно заглушая сигналы друг друга. (Это также нередко происходит и в диалогах между людьми.) Если обе станции будут повторно передавать сигналы, чтобы все-таки доставить свои сообщения, они рискуют навсегда застрять в постоянных взаимных помехах. Ясно, что протокол ALOHAnet должен был урегулировать сообщения конкурирующих сигналов, чтобы они уступали канал друг другу и приносили результат.
Первое, что отправитель в этом случае должен сделать, это «нарушить симметрию». Любому пешеходу знакома ситуация, когда двое идущих навстречу человека, пытаясь разойтись, принимают один вправо, другой влево, в итоге синхронно отклоняются в одну и ту же сторону, а потом, пытаясь исправить дело, столь же синхронно делают шаг в другую. Схожая ситуация возникает, когда оба участника диалога вдруг замолкают, уважительно уступая право голоса другому, а затем одновременно начинают говорить; или когда на перекрестке два автомобиля сперва останавливаются, уступая друг другу, а затем синхронно газуют. Это та сфера, где рандомизация имеет большое значение. Более того, существование сетей было бы невозможным без нее.
Простейший способ нарушить симметрию – заставить каждую станцию работать по принципу подбрасывания монетки: орел – ретрансляция, решка – пропуск хода, а потом ретрансляция. Несомненно, одна из них справится через какое-то время. Но это хорошо работает, если отправителей всего два. А если будет три одновременных сигнала? А четыре? Шанс получить хотя бы один пакет будет в этом случае один к четырем (после чего все равно останутся еще три конфликтующие станции и еще больше конкурирующих сигналов, поступающих в одно и то же время). Число конфликтов будет расти, и рано или поздно пропускная способность сети может просто рухнуть. В отчете по ALOHAnet 1970 года говорится, что едва средний коэффициент загруженности радиоволн превысит границу в 18,6 %, как «канал становится нестабильным… и среднее число повторных передач становится неограниченным». Что не есть хорошо.
Так что же делать? Как создать систему, которая сможет избежать этой участи?
Важным открытием оказалось увеличение средней задержки после каждого следующего провала, в частности удвоение предполагаемой отсрочки перед повторной передачей. Таким образом, после первоначального провала отправитель случайным образом повторит отправку через один или два хода; после второй неудачи он повторит попытку через 1–4 хода; третья подряд ошибка будет означать задержку в 1–8 ходов и т. д. Этот оригинальный подход позволяет сети принимать теоретически любое количество конкурирующих сигналов. Поскольку максимальная длина отсрочки растет в геометрической (экспоненциальной) прогрессии (2, 4, 8, 16…), этот метод получил название «экспоненциальная задержка».
Экспоненциальная задержка сыграла огромную роль в самом начале успешного функционирования ALOHAnet в 1971 году, а в 1980-х она была внедрена в протокол ТСР, став важной частью интернета (и она до сих пор является таковой). Как гласит один важный документ, «для порта, встроенного в сеть неизвестной топологии, с неизвестным, непознаваемым и постоянно меняющимся количеством конкурирующих диалогов, только одна схема имеет шансы на успех – экспоненциальная задержка». Но есть и другое применение данного алгоритма, более директивное и более значительное. Помимо избегания столкновений, экспоненциальная задержка стала способом обработки почти всех случаев падения сети или ее ненадежности, применяемым по умолчанию. Например, когда ваш компьютер пытается зайти на сайт, который, похоже, не грузится, он использует экспоненциальную задержку, совершая повторные попытки секундой позже, потом – спустя еще несколько секунд после этого и так далее. Это хорошо для всех участников процесса: такой подход предотвращает ситуацию, в которой хост-сервер выйдет из строя под валом повторных запросов, стоит ему едва только заработать вновь, а компьютер не тратит впустую слишком много усилий, чтобы выжать кровь из камня. Но что интересно, это к тому же не заставит ваш компьютер (да и не даст ему) вовсе прекратить попытки.
Экспоненциальная задержка также является важным звеном сетевой безопасности: последовательное неоднократное введение неверного пароля при попытке войти в свой аккаунт штрафуется экспоненциально возрастающим временем блокировки. Это предотвращает попытки хакеров атаковать аккаунт «перебором по словарю», подбирая пароль за паролем до тех пор, пока в конце концов не повезет. В то же время решается еще одна задача: реальный владелец аккаунта, каким бы забывчивым он ни был, не рискует навсегда быть заблокирован после произвольного выключения из работы.
В нашем же обществе мы склонны предоставлять людям некоторое количество шансов, прежде чем окончательно сдаться. Три попытки – и выбываешь из игры. Эта модель по умолчанию превалирует в любой ситуации, где идет речь о прощении, снисхождении или упорстве. Проще говоря, там, где мы, вероятно, делаем что-то неправильно.
Одна наша подруга недавно вспоминала своего друга детства, у которого была обескураживающая привычка ломать все планы. Что же делать? Решить, что с нее довольно и пора раз и навсегда закончить эти отношения? Это казалось необоснованным и жестким вариантом, но и продолжать постоянно менять свои планы было глупо, это привело бы к бесчисленным разочарованиям и впустую потраченному времени. Выход: экспоненциальная задержка по ставке приглашений. Попробуйте перенести дату на неделю позже, потом на две, потом на четыре, потом на восемь. Показатель повторной передачи стремится к нулю, но при этом вам не приходится окончательно ставить точку.
Другая знакомая мучительно решала, не предложить ли защиту и финансовую поддержку родственнику-наркоману. Она не в силах была расстаться с надеждой, что он сможет измениться, а мысль раз и навсегда отвернуться от него была для нее невыносимой. Но она также не могла заставить себя делать все то, что требовалось бы для совместного проживания с ним (покупать ему одежду, готовить ему, заново открывать для него банковские счета, отвозить его на работу каждое утро), зная, что в самый неожиданный момент он мог забрать из дома все деньги и исчезнуть, чтобы спустя несколько недель позвонить с просьбой простить его и принять обратно. Это был жестокий и невозможный выбор.
Экспоненциальная задержка не будет волшебной панацеей в подобных ситуациях, но она может предложить возможный вариант действий. Требование экспоненциально возрастающего периода трезвости может стать сдерживающим фактором против повторного нарушения правил совместного проживания. Это заставит члена семьи еще более усердно доказывать серьезность своих намерений вернуться и защитит хозяйку дома от постоянного стресса в случае срыва. И, что еще важнее, у хозяйки не будет повода заявить своему родственнику, что она навсегда отказывается от него или что он – отрезанный ломоть без надежды на улучшение. Этот метод предлагает нам путь к ограниченному терпению и бесконечному милосердию. Может, нам и не нужно выбирать.
По факту в последнее десятилетие наблюдается тихая революция в том, как сама система правосудия осуществляет административный надзор за наркоторговцами без изоляции их от общества. Во главе этой революции стоит экспериментальная программа под названием «НАДЕЖДА», которая использует принципы экспоненциальной задержки ALOHAnet и которая – поразительное совпадение! – зародилась на родине самого ALOHAnet'а – в Гонолулу.
Вскоре после принятия присяги в Первом окружном суде на Гавайях судья Стивен Альм обратил внимание на странную картину. Участники программы неоднократно нарушали условия своего испытательного срока, а окружные судьи, регулярно пользуясь своими особыми полномочиями, отпускали их с предупреждением без наказания. Но в какой-то момент, вероятно после дюжины-другой нарушений, судья принимал решение быть строгим и приговаривал нарушителя к нескольким годам тюремного заключения. Альм вспоминает: «Я подумал: что за идиотский способ заставить кого-то изменить свое поведение!» И Альм предложил нечто практически противоположное. Вместо слушаний о нарушениях, расписанных на месяцы вперед, требующих непонятных вызовов в суд и иногда завершающихся значительными санкциями, «НАДЕЖДА» практикует немедленные, заранее установленные наказания, которые начинаются с одного дня в тюрьме, и срок этот увеличивается после каждого инцидента. Пятилетнее исследование Департамента юстиции доказало, что подопечных «НАДЕЖДЫ» арестовывали за новые преступления или отзывали с испытательного срока в два раза реже, чем обычных участников программы. И наркотики они употребляли на 72 % реже. Семнадцать штатов последовали примеру Гавайев и запустили свои собственные версии «НАДЕЖДЫ».