теория

Зомби и ограждающий номер

Разберём лекарство спокойно — идея красивее, чем звучит.

Главная ловушка распределёнки: узел не может доверять сам себе. «Я лидер», «моя аренда ещё действует», «прошло всего пару секунд» — всё это узел утверждает изнутри, а изнутри он не видит собственной паузы и не слышит, что сеть объявила его мёртвым. Отсюда : два узла одновременно искренне считают себя главными и оба действуют.

Значит, самопроверка бесполезна, и вердикт «ты ещё главный?» должен выносить не сам узел, а тот, к кому он приходит с запросом. Инструмент для этого — (ограждающий номер). Работает так:

  • Кто получает лидерство — получает и номер, всегда больше предыдущего: 33, потом 34, потом 35.
  • Каждый запрос к общему ресурсу (базе, хранилищу) несёт этот номер.
  • Ресурс помнит наибольший номер, что он видел, и отвергает всё, что со старым.

Зомби с номером 33 стучится в базу, которая уже обслужила лидера с номером 34, — и получает отказ, не успев ничего испортить. Заметь: базе не нужно знать, кто «настоящий» лидер и была ли пауза. Ей хватает одного монотонного числа. Сложную проблему «жив ли узел» мы заменили простой «свежий ли у тебя номер».

Крайний случай для полноты картины — : узел не просто замирает, а врёт или действует злонамеренно (подделывает номер). Защита от такого дорога и нужна в основном там, где узлам нельзя доверять в принципе, — в обычном сервисе курьеров ею не занимаются.

← назад