7.6 KiB
Семинар 4. Групповые взаимодействия
На семинаре закрепим материал лекции через демонстрацию IP multicast, разбор историй отказов, работу с причинным буфером и эксперименты с gossip. Будем различать получение сетевого сообщения и его доставку приложению, проверять гарантии рассылки и сравнивать стоимость распространения информации.
Подготовка и участие
Для самостоятельных экспериментов заранее выполните инструкции по подготовке gossip и проверьте запуск distsys-gossip -h. Если окружение не готово, можно участвовать в разборе демонстрации и подготовленных журналов: предсказывать результат, находить нужные показатели и объяснять наблюдения.
1. IP multicast: доставка сетевых сообщений
Проследим путь сообщения от отправителя к нескольким получателям в примере с контейнерами. Найдём в коде адрес группы, присоединение получателя и отправку датаграммы.
Затем отключим одного получателя, отправим сообщение и вернём его в группу. Перед запуском предположим, кто увидит каждое сообщение, а после сравним прогноз с журналом.
Обсудим, восстанавливаются ли пропущенные сообщения и какие механизмы понадобились бы для этого. Свяжем наблюдение с различием между сетевым получением и доставкой приложению.
2. Надёжная рассылка: обязательства при отказах
Разберём свойства Validity, No Duplication, No Creation, Agreement и Uniform Agreement на историях с остановкой процессов. В каждой истории сначала определим, какие процессы корректны, затем проверим обязательства по доставке.
Основные вопросы:
- Что меняется, если отправитель падает посреди рассылки?
- Обязаны ли остальные корректные процессы доставить сообщение, если получатель уже доставил его, а затем упал?
- Почему перед вызовом
deliverможет потребоваться дождаться, пока сообщение сохранится у других процессов?
Сравним BEB, RB и URB и обсудим роль корректного большинства.
3. Порядок доставки: зависимости и буфер
На примерах последовательных сообщений и ответа в чате различим FIFO и Causal Order. Построим зависимости между сообщениями, полученными в перемешанном порядке, и пошагово разберём буфер доставки.
Для каждого сообщения определим, выполнены ли его зависимости и как доставка изменяет состояние получателя. Проверим, почему после одной доставки нужно снова просмотреть буфер и когда допустимы разные последовательности доставок.
В завершение обсудим пример независимых операций, для которых причинного порядка недостаточно, чтобы реплики получили одинаковый результат, и роль Total Order.
4. Gossip: скорость, трафик и остановка
В лабораторной работе сравним push, pull и push-pull с одинаковыми параметрами. Перед каждым экспериментом сформулируем прогноз, затем сопоставим его с результатом.
- Измерим время полного охвата и число сетевых сообщений.
- Изменим fanout и вероятность потерь, сохраняя остальные параметры.
- Сравним полный охват с прекращением периодических обменов.
- Разберём, почему
-qостанавливает симулятор, аSTOPPEDу процесса не означает его отказ.
Объясним наблюдения через действия узлов и ограничения модели. Результат одного запуска используем как конкретный пример; для проверки общего вывода повторим эксперимент с другими seed.
Дополнительные материалы
IP multicast
- Адреса multicast, IGMP и подробный разбор multicast.
- Работа с multicast в Python.
- Примеры применения: zeroconf, multicast DNS, multicast NTP, обнаружение узлов в Apache Ignite.
Надёжность и порядок
- Отношение happens-before.
- Конспект курса Distributed Systems, разделы 3 и 4.
Gossip и его применения
- Визуализация распространения информации.
- Обнаружение узлов и сведения о составе группы: Consul, обсуждение Serf, memberlist и SWIM, Cassandra.
- Gossip в Hyperledger Fabric.
- Распространение блоков и транзакций Bitcoin: обзор P2P-сети, статья, видеоматериалы.