Процессы в распределенной системе сообщаются либо с помощью доступа с разделяемым переменным либо при помощи передачи сообщений. Мы примем более ограниченный взгляд и рассмотрим только распределенные системы, где процессы сообщаются при помощи обмена сообщениями. Распределенные системы, где сообщение производится посредством разделяемых переменных, будут обсуждаться в главе 15. Читатель, интересующийся сообщением посредством разделяемых переменных, может проконсультироваться в поворотной статье Дейкстры [Dij68] или Овицкий и Грайс [OG76].
Сообщения в распределенных системах могут передаваться либо синхронно, либо асинхронно. Основной упор в этой книге делается на алгоритмы для систем, где сообщения передаются асинхронно. Во многих случаях синхронная передача сообщений может рассматриваться как специальный случай асинхронной передачи сообщений, как это было продемонстрировано Чаррон-Бост и др. [CBMT92]. Подраздел 2.1.2 описывает модель асинхронной передачи сообщений точно; в подразделе 2.1.3 модель адаптируется к системам, использующим синхронную передачу сообщений. В подразделе 2.1.4 кратко обсуждается справедливость.
Система переходов состоит из множества всех возможных состояний системы, переходов («ходов»), которые система совершает в этом множестве, и подмножества состояний, в которых системе позволено стартовать. Чтобы избежать беспорядка между состояниями отдельного процесса и состояниями алгоритма целиком («глобальных состояний»), последние теперь будут называться конфигурациями.
Определение 2.1 Система переходов есть тройка S = (C, ®, I), где С это множество конфигураций, ® это бинарное отношение перехода на C, и I это подмножество С начальных конфигураций.
Отношение перехода это подмножество С х С. Вместо (g, d) Î ® будет использоваться более удобная нотация g ® d.
Определение 2.2 Пусть S = (C, ®, I) это система переходов. Исполнение S это есть максимальная последовательность E = (g0, g1, g2,…), где g0 Î I, и для всех i ³ 0, gi ® gi+1.
Терминальная конфигурация это конфигурация g, для которой не существует d такой, что g ® d. Нужно помнить, что последовательность E = (g0, g1, g2,…) с gi ® gi+1 для всех i максимальна, если она либо бесконечна, либо заканчивается в терминальной конфигурации.
Определение 2.3 Конфигурация d достижима из g, нотация g Þ d, если существует последовательность g = g0, g1, g2, …, gk = d c gi ® gi+1для всех 0 £ i < k. Конфигурация d достижима, если она достижима из начального состояния.
2.1.2 Системы с асинхронной передачей сообщений
Распределенная система состоит из набора процессов и коммуникационной подсистемы. Каждый процесс является системой переходов сам по себе с той лишь оговоркой, что он может взаимодействовать с коммуникационной подсистемой. Чтобы избежать путаницы между атрибутами распределенной системы как целого и атрибутов индивидуальных процессов, мы используем следующее соглашение. Термины «переход» и «конфигурация» используются для атрибутов системы целиком, и (их эквиваленты) термины «событие» и «состояние» используются для атрибутов процессов. Чтобы взаимодействовать с коммуникационной системой процесс имеет не только обычные события (упоминаемые как внутренние события), но также события отправки и события получения, при которых сообщения воспроизводятся и потребляются. Пусть M будет множеством возможных сообщений, и обозначим набор мультимножеств с элементами из M через M(M).
Определение 2.4 Локальный алгоритм процесса есть пятерка (Z, I, ^i, ^s, ^r), где Z это множество состояний, I это подмножество Z начальных состояний, ^i это отношение на Z x Z, и ^s и ^r это отношения на Z x M x Z. Бинарное отношение ^ на Z определяется как
c ^ d Û (c, d) Î ^i Ú $m Î M((c, m, d) Î ^sÈ ^r).
Отношения ^i , ^s , ^r соответствуют переходам состояния, соотносящихся с внутренними сообщениями, сообщениями отправки и сообщениями получения, соответственно. Впоследствии мы будем обозначать процессы через p, q, r, p1, p2и т.д., и обозначать множество процессов системы P. Определение 2.4 служит как теоретическая модель для процессов; конечно, алгоритмы в этой книге не описываются только перечислением их состояний и событий, но также средствами удобного псевдокода (см. приложение А). Исполнения процесса есть исполнения системы переходов (Z, ^, I). Нас, однако, будут интересовать исполнения системы целиком, и в таком исполнении исполнения процессов координируются через коммуникационную систему. Чтобы описать координацию, мы определим распределенную систему как систему переходов, где множество конфигураций, отношение перехода, и начальные состояния строятся из соответствующих компонентов процессов.
Определение 2.5 Распределенный алгоритм для набора P = {p1, …, pN} процессов это набор локальных алгоритмов, одного для каждого процесса в P.
Поведение распределенного алгоритма описывается системой переходов, как это объясняется далее. Конфигурация состоит из состояния каждого процесса и набора сообщений в процессе передачи; переходы это события процессов, которые влияют не только на состояние процесса, но также оказывают влияние (или подвергаются таковому) на набор сообщений; начальные конфигурации это конфигурации, где каждый процесс находится в начальном состоянии и набор сообщений пуст.
Определение 2.6 Система переходов, порожденная распределенным алгоритмом для процессов p1, …, pN при асинхронной коммуникации, (где локальный алгоритм для процесса pi это есть (Z, I, ^i, ^s, ^r)), это S = (C, ®, I), где
(1) C = {(cP1, …, cPN, M) : ("p Î P : cpÎ Zp) и M Î M(M)}.
(2) - = (ÈpÎP -p), где -p это переходы соответствующие изменениям состояния процесса p; -Pi это множество пар
(cP1, …, cPi, …, cPN, M1), (cP1, …, c’Pi, …, cPN, M2),
для которых выполняется одно из следующих трех условий:
· (cPi , c’Pi ) Î ^iPi и M1 = M2;
· для некоторого m Î M, (cPi , m, c’Pi ) Î ^sPi и M2 = M1È {m};
· для некоторого m Î M, (cPi , m, c’Pi ) Î ^rPi и M1 = M2È {m}.
(3) I = {(cP1, …, cPN, M) : ("p Î P : cpÎ Ip) Ù M = Æ}.
Исполнение распределенного алгоритма это исполнение его, породившее систему переходов. События исполнения выполняются явно с помощью следующей нотации. Пары (c, d) Î ^ip называются (возможными) внутренними событиями процесса p, и тройки в ^sp и ^rp называются событиями отправки и событиями получения процесса.
· Внутреннее событие е заданное как е = (c, d) процесса p называется применимым в конфигурации g = (cP1, …, cP, …, cPN, M), если cp = c. В этом случае, e(g) определяется как конфигурация (cP1, …, d, …, cPN, M).
· Событие отправки e, заданное как e = (c, m, d) процесса p называется применимым в конфигурации g = (cP1, …, cP, …, cPN, M), если cp = c. В этом случае, e(g) определяется как конфигурация (cP1, …, d, …, cPN, M È {m}).
· Событие получения e, заданное как e = (c, m, d) процесса p называется применимым в конфигурации g = (cP1, …, cP, …, cPN, M), если cp = c и m Î M. В этом случае, e(g) определяется как конфигурация (cP1, …, d, …, cPN, M \ {m}).
Предполагается, что для каждого сообщения существует уникальный процесс, который может получить сообщение. Этот процесс называется назначением сообщения.
2.1.3 Системы с синхронной передачей сообщений
Говорят, что передача сообщений синхронная, если событие отправки и соответствующее событие получения скоординированы так, чтобы сформировать отдельный переход системы. То есть, процессу не разрешается посылать сообщение, если назначение сообщения не готово принять сообщение. Следовательно, переходы системы делятся на два типа: одни соответствуют изменениям внутренних состояний, другие соответствуют скомбинированным коммуникационным событиям двух процессов.
Определение 2.7 Система переходов, порожденная распределенным алгоритмом для процессов p1, …, pN при синхронной коммуникации, это S = (C, ®, I), где
(1) C = {(cP1, …, cPN) : "p Î P : cpÎ Zp}.
(2) - = (ÈpÎP -p) È (Èp,qÎP:p¹q -pq), где
· -Pi это множество пар
(cP1, …, cPi, …, cPN), (cP1, …, c’Pi, …, cPN),
для которых (cPi , c’Pi ) Î ^iPi ;
· -PiPj это множество пар