Иерархия порядков сообщений — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (rollbackEdits.php mass rollback)
 
Строка 1: Строка 1:
{| class="wikitable" align="center" style="color: red; background-color: black; font-size: 56px; width: 800px;"
 
|+
 
|-align="center"
 
|'''НЕТ ВОЙНЕ'''
 
|-style="font-size: 16px;"
 
|
 
24 февраля 2022 года российское руководство во главе с Владимиром Путиным развязало агрессивную войну против Украины. В глазах всего мира это военное преступление совершено от лица всей страны, всех россиян.
 
 
Будучи гражданами Российской Федерации, мы против своей воли оказались ответственными за нарушение международного права, военное вторжение и массовую гибель людей. Чудовищность совершенного преступления не оставляет возможности промолчать или ограничиться пассивным несогласием.
 
 
Мы убеждены в абсолютной ценности человеческой жизни, в незыблемости прав и свобод личности. Режим Путина — угроза этим ценностям. Наша задача — обьединить все силы для сопротивления ей.
 
 
Эту войну начали не россияне, а обезумевший диктатор. И наш гражданский долг — сделать всё, чтобы её остановить.
 
 
''Антивоенный комитет России''
 
|-style="font-size: 16px;"
 
|Распространяйте правду о текущих событиях, оберегайте от пропаганды своих друзей и близких. Изменение общественного восприятия войны - ключ к её завершению.
 
|-style="font-size: 16px;"
 
|[https://meduza.io/ meduza.io], [https://www.youtube.com/c/popularpolitics/videos Популярная политика], [https://novayagazeta.ru/ Новая газета], [https://zona.media/ zona.media], [https://www.youtube.com/c/MackNack/videos Майкл Наки].
 
|}
 
 
 
[[Категория: Параллельное программирование]]
 
[[Категория: Параллельное программирование]]
 
В распределённых системах могут быть разные гарантии порядка доставки отправленных сообщений.
 
В распределённых системах могут быть разные гарантии порядка доставки отправленных сообщений.

Текущая версия на 19:40, 4 сентября 2022

В распределённых системах могут быть разные гарантии порядка доставки отправленных сообщений. Более того: иногда программисты могут неявно предполагать тот или иной порядок и очень удивляться, когда он нарушается.

Мы рассматриваем четыре гарантии порядка сообщений, от более слабых к более сильным:

  1. Асинхронная передачи: никаких гарантий, только exactly-once delivery
  2. FIFO (First In First Out order)
  3. Причинно-согласованный порядок (causally consistent ordering, от слова cause, а не casual)
  4. Синхронный порядок

Можно использовать различные алгоритмы, чтобы получить из более слабой гарантии более сильную.

При добавлении multicast/broadcast сообщений возникают свои проблемы, там нужно смотреть на общий порядок сообщений.

FIFO

Не существует пары сообщений $m, n \in M$ таких, что $snd(m) < snd(n) \land rcv(n) < rcv(m)$ (тут $<$ работает только если два события произошли в одном процессе).

Переформулировка: для каждой упорядоченной пары процессов $(A, B)$ сообщения приходят к $B$ в том же порядке, в котором они отправлены $A$.

Пример нарушения:

Distributed-order-fifo-wrong.png

Очевидно, что FIFO также гарантирует асинхронный порядок.

Причинно-согласованный порядок

Как FIFO, только вместо $<$ написали $\to$: не существует пары сообщений $m, n \in M$ таких, что $snd(m) \to snd(n) \land rcv(n) \to rcv(m)$.

Пример нарушения (пара сообщений $m=(a, b)$ и $n=(d, e)$):

Distributed-order-cc-wrong.png

Неверная переформулировка

На лекции не было, но может казаться правдоподобным.

Если есть события $a, a', b, b'$, причём $a<a'$, $proc(b)=proc(b')$ (взяли пару процессов и два события в каждом), $a\to b$ и $a' \to b'$ (взяли цепочки сообщений между ними), то $b < b'$ (порядок сообщений не меняется).

Проблема в том, что $a \to b$ может начаться не с сообщения, а с нескольких переходов внутри $proc(a)$:

P --a---a'--x----
         \   \
Q -------b'---b--

Причинно-согласованный порядок также гарантирует и FIFO-порядок, потому что из $a \le b$ следует $a \to b$.

Синхронный порядок

Можно считать, что сообщения доставляются мгновенно. В сочетании с линейным порядком событий внутри процессов получаем

Определение:
В системе есть синхронный порядок сообщений, если всем сообщениям можно сопоставить время $T(m)$ (число) так, что верно:
  • Для любого сообщения $m$: $T(rcv(m))=T(snd(m))$ (обозначается $T(m)$).
  • Для любых двух событий $e \to f$ верно $T(e)<T(f)$ (обратное может быть неверно), т.е. $T$ является логическими часами.

Другими словами, можно рисовать стрелочки доставки сообщений строго вертикально.

Пример нарушения (причинно-согласованность не нарушена):

Distributed-order-sync-wrong.png

Синхронный порядок гарантирует причинно-согласованный порядок: от противного: пусть есть два сообщения $m, n$, причём $snd(m) \to snd(n)$ (тогда $T(m) < T(n)$) и $rcv(n) \to rcv(m)$ (тогда $T(n)<T(m)$), противоречие.