Формализм распределённых систем — различия между версиями
Yeputons (обсуждение | вклад) (→Отличия от параллельных систем) |
Yeputons (обсуждение | вклад) (→Отличия от параллельных систем) |
||
Строка 31: | Строка 31: | ||
Отказ узлов или связи в распределённых системах — обычное дело, это основная сложность разработки распределённых алгоритмов. | Отказ узлов или связи в распределённых системах — обычное дело, это основная сложность разработки распределённых алгоритмов. | ||
+ | До билетов про иерархию ошибок мы считаем, что ошибок нет (например, в алгоритмах взаимного исключения). | ||
Из-за сети сообщения могут идти непонятно сколько времени (в том числе на практике). | Из-за сети сообщения могут идти непонятно сколько времени (в том числе на практике). | ||
В '''синхронных''' системах гарантируется, что каждое сообщение либо доходит за некоторое константное время $C$, либо теряется. | В '''синхронных''' системах гарантируется, что каждое сообщение либо доходит за некоторое константное время $C$, либо теряется. | ||
− | В '''асинхронных''' системах сообщения могут идти сколь угодно долго. | + | В '''асинхронных''' системах сообщения могут идти сколь угодно долго. До билетов про синхронные системы мы считаем всё асинхронным. |
+ | На практике же везде ставят таймаут, превращая систему в синхронную. | ||
Дополнительные сложности возникает с порядком сообщений: как между процессами (отсутствует, FIFO), так и глобально во всей системе (отсутствует, casual ordering, synchronous ordering), глобально во всей системе с учётом multicast-broadcast (отсутствует, casual total order). | Дополнительные сложности возникает с порядком сообщений: как между процессами (отсутствует, FIFO), так и глобально во всей системе (отсутствует, casual ordering, synchronous ordering), глобально во всей системе с учётом multicast-broadcast (отсутствует, casual total order). | ||
== Задачи == | == Задачи == |
Версия 17:46, 2 июня 2019
Модель
Имеется несколько независимых процессов, обычно обозначаются большими латинскими буквами: $P, Q, R, \dots \in \mathbb P$. Происходящее внутри процесса нас не интересует: там может быть сложная многопоточная система или простой цикл; может быть детерминированным, а может кидать монетку.
Процессы могут посылать друг другу сообщения, обычно обозначаются $m \in \mathbb M$ (с индексами). Нас интересует взаимодействие между процессами, оно бывает ровно одного вида: посылки сообщений друг другу. С точки зрения внешнего мира процесс считается однопоточным: все отправки/получения сообщений одним процессом линейно упорядочены.
В каждом процессе могут происходить события, обычно обозначаются маленькими латинскими буквами: $a, b, c, d, \dots \in \mathbb E$. Можно узнать процесс, в котором произошло событие: $proc(e) \in \mathbb P$ (такая нотация встречается редко). Если $e$ и $f$ произошли в одном процессе, то одно из двух произошло первым, обозначается $e < f$.
Каждому сообщению соответствуют ровно два события: отправка сообщения $snd(m) \in \mathbb E$ и его получение $rcv(m) \in \mathbb E$. Другие события нас не интересуют.
Happens-before (произошло-до)
Транзитивное замыкание:
- Если $e < f$, то $e \to f$
- Для любого сообщения $m$: $snd(m) \to rcv(m)$
События $a$ и $c$, не связанные отношением произошло-до, называются параллельными.
"Времени" или "глобального времени" в распределённых системах не существует. Следствие: слова "одновременно" и "текущий момент" запрещены, если только не подкрепляются определением на основе "произошло-до". Можно почитать Justin Sheehy. 2015. There is No Now. Queue 13, 3, Pages 20 (March 2015), 8 pages. DOI: https://doi.org/10.1145/2742694.2745385
Отличия от параллельных систем
Самая дорогая и длительная операция в распределённых системах обычно не вычисления, а посылка сообщения, потому что это включает в себя сеть (задержки между континентами порядка сотен миллисекунд). Так что в алгоритмах нас интересует не время вычислений, а количество посланных сообщений, причём точное, а не просто асимптотика.
Отказ узлов или связи в распределённых системах — обычное дело, это основная сложность разработки распределённых алгоритмов. До билетов про иерархию ошибок мы считаем, что ошибок нет (например, в алгоритмах взаимного исключения).
Из-за сети сообщения могут идти непонятно сколько времени (в том числе на практике). В синхронных системах гарантируется, что каждое сообщение либо доходит за некоторое константное время $C$, либо теряется. В асинхронных системах сообщения могут идти сколь угодно долго. До билетов про синхронные системы мы считаем всё асинхронным. На практике же везде ставят таймаут, превращая систему в синхронную.
Дополнительные сложности возникает с порядком сообщений: как между процессами (отсутствует, FIFO), так и глобально во всей системе (отсутствует, casual ordering, synchronous ordering), глобально во всей системе с учётом multicast-broadcast (отсутствует, casual total order).