Кратко

  • RFC 992 предложил рассылать известия о сбое и восстановлении как упорядоченные сообщения группе процессов, чтобы действующие участники видели одну последовательность смены состава.
  • GBCAST согласовывал состав группы, ABCAST — порядок общих операций, CBCAST — причинные зависимости, сохраняя свободу для независимых сообщений.

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

Kenneth Birman и Thomas Joseph разбирали эту гонку в RFC 992, опубликованном в ноябре 1986 года на основе работы над ISIS в Корнелле. RFC 966 и RFC 988 уже говорили о группах хостов и многоадресной доставке. Новая трудность возникала тогда, когда список получателей менялся прямо во время передачи. Сообщение, адресованное «группе», должно было попасть к участникам с согласованным пониманием того, кто в эту группу входил.

Самый строгий инструмент назывался GBCAST. Вернувшийся процесс сообщал о восстановлении; за упавший процесс известие рассылала система. Покойнику назначили пресс-секретаря. Известие ставилось в порядок вместе с обычными сообщениями. Если один участник видел рабочий запрос до объявления о сбое, общие получатели видели их в том же порядке. Ранее отправленные сообщения погибшего процесса предшествовали объявлению о его гибели. Каждый участник вёл VIEW — список членов группы. Списки не менялись одновременно по всем часам, зато проходили одну и ту же последовательность изменений.

При получении конкретного сообщения участники опирались на согласованную версию состава.

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

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

Упавшая машина пропустила совещание. Остальным хотя бы выдали одинаковый протокол заседания.