
454 Глава 7. Отказоустойчивость
прийти это сообщение. Кроме того, если другое сообщение, т', причинно завися-
щее от доставки
т,
доставляется процессу Q, то Q также входит в набор DEP(m).
Отметим, что причинная зависимость т' от доставки т означает, что оно посы-
лается тем же самым процессом, который ранее получил т или другое сообще-
ние,
причинно зависящее от доставки т.
Набор COPY(m) состоит из тех процессов, которые содержат копию т, но
(пока) не в своих локальных хранилищах. Когда процесс Q получает сообщение т,
он также становится членом COPY(m). Отметим, что COPY(m) состоит из тех
процессов, которые могут передавать копию т для воспроизведения передачи.
Если все эти процессы отказали, очевидно, что воспроизведение передачи т ока-
зывается невозможным.
Используя эту нотацию, легко определить, что же такое осиротевший про-
цесс.
Предположим, что в распределенной системе отказали несколько процес-
сов.
Пусть Q
—
один из сохранившихся процессов. Процесс
Q
является сиротой,
если существует такое сообщение т, что Q оказывается в наборе DEP(m), в то
время как все процессы из СОРУ(т) отказали. Другими словами, осиротевший
процесс появляется в том случае, если он зависит от сообщения т, однако нет
никакой возхможности повторить передачу этого сообщения.
Чтобы предотвратить появление осиротевших процессов, необходимо гаран-
тировать, что в DEP(m) не будет выживших процессов, если откажут все процес-
сы в COPY(m). Система оказывается в таком состояние, если каждый процесс,
являющийся членом набора DEP(m), также является и членом набора
СОРУ(т).
Другими словами, всякий процесс, зависящий от доставки сообщения
т,
должен
хранить копию этого сообщения.
Существует два основных подхода, которым мы можем следовать. Первый из
них представлен так называемыми
протоколами пессимистического
протоколи-
рования
(pessimistic
logging
protocols).
В этих протоколах предполагается, что для
каждого неустойчивого сообщения т имеется хотя бы один зависящий от него
процесс. Другими словами, протоколы пессимистического протоколирования
предполагают, что любое неустойчивое сообщение т доставляется как минимум
в один процесс. Отметим, что как только т доставляется, скажем, в процесс Р,
этот процесс становится членом набора COPY(m).
Самое плохое, что может произойти,
—
процесс Р откажет еще до того, как бу-
дет записано сообщение т. В случае пессимистического протоколирования про-
цессу Р после получения сообщения т нельзя рассылать какие-либо сообщения,
пока т не будет записано в устойчивое хранилище. Таким образом, пока не будет
гарантирована возможность повторной посылки сообщения т, не сможет поя-
виться ни одного процесса, зависящего от доставки т процессу Р. Таким обра-
зом, мы полностью предотвращаем появление осиротевших процессов.
В противоположность этому в протоколе
оптимистического
протоколирова-
ния
{optimistic logging protocol)
реальная работа начинается после отказа процес-
са.
В
частности, допустим, что для некоторого сообщения т отказали все процес-
сы из набора
СОРУ(т).
Согласно оптимистическому подходу любой осиротевший
процесс из DEP(m) откатывается в такое состояние, когда он перестает входить
в набор DEP(m).