Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lit / Kosyakov_-_raspredelennye_sistemy_unlocked.pdf
Скачиваний:
360
Добавлен:
16.03.2016
Размер:
3.86 Mб
Скачать

РАЗДЕЛ 3. ЛОГИЧЕСКИЕ ЧАСЫ

Понятие времени является фундаментальным для нашего мышления; его течение отделяет все более раннее от всего более позднего. Большинство, наверное, скажет, что событие а произошло раньше события b, если a произошло в более ранее время, чем b.

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

Вэтом разделе мы рассмотрим механизм логических часов, который позволяет отслеживать причинно-следственный порядок событий распределенного вычисления и, как следствие, упорядочивать события в одну или несколько последовательностей, которые могли бы происходить

всистеме. Использование логического времени, отсчитываемого такими часами, значительно упрощает разработку алгоритмов для распределенных систем.

Следует подчеркнуть, что основная задача логических часов заключается только в отслеживании порядка событий, а не в определении каких-либо других свойств, обычно ассоциируемых с понятием времени. Например, логические часы не дают никакого количественного представления о физическом времени, прошедшем между двумя событиями. В отличие от физического времени, чей ход нельзя остановить или изменить, логическое время не течет само по себе. Оно поддается учету только при наступлении событий в распределенной системе, и потому – дискретно. Невозможно ничего не делать и ожидать наступления того или иного момента логического времени в будущем: если не происходит никаких событий, логическое время "останавливается", и ожидаемый момент может никогда не наступить.

3.1.Общие принципы построения логических часов

Вобычной жизни мы говорим, что некоторое событие произошло в 9:30, если оно наступило после того, как наши часы показали 9:30, и до того, как показания часов изменились на 9:31. При этом с каждым

65

интересующим нас событием мы ассоциируем отметку времени (англ. timestamp), соответствующую этому событию.

Описание принципов построения логических часов мы также начнем с понимания того, что такие часы должны обеспечивать механизм, позволяющий каждому событию в распределенной системе приписывать некоторое числовое значение, которое можно интерпретировать как время наступления этого события. Поэтому логическими часами (англ. logical clock) назовем всякую функцию Θ, отображающую множество событий распределенного вычисления в некоторое упорядоченное множество (T, <), где Т представляет собой совокупность допустимых значений логического времени (англ. time domain). В распределенных системах каждый процесс Pi может управлять работой только своих часов Θi независимо от часов других процессов. При этом отметка логического времени события ei, происходящего в процессе Pi, будет определяться показаниями часов этого процесса на момент наступления ei, т.е. Θ(ei) = Θi(ei) для всех событий ei процесса Pi. Как было указано выше, показания часов Θi должны изменяться между наступлением событий процесса Pi, т.е. сам факт изменения показаний Θi событием не является.

Несмотря на то, что такие часы работают в независимых процессах, отметки логического времени, назначаемые событиям, должны удовлетворять фундаментальному условию монотонного возрастания времени. А именно, все события, принадлежащие конусу прошлого любого события ei, должны быть отмечены временем меньшим, чем время Θ(ei) события ei. И наоборот, все события из конуса будущего события ei должны иметь время наступления большее, чем Θ(ei):

ei, ej' : ei ej' Θ(ei) < Θ(ej').

Данное требование монотонного возрастания времени называют условием непротиворечивости логических часов (англ. clock consistency) или условием непротиворечивости отметок времени событий. Оно отражает последовательную природу выполнения каждого отдельного процесса и соглашение о том, что на передачу любого сообщения затрачивается ненулевое конечное время. Действительно, из определения отношения причинно-следственного порядка следует, что требование непротиворечивости логических часов будет выполнено при выполнении следующих двух условий:

Условие 1: если ei и ei' – два разных события одного и того же процесса Pi, и событие ei наступает в Pi раньше события ei', то Θ(ei) < Θ(ei').

Условие 2: если ei и ej' – взаимосвязанные события отправки и получения одного и того же сообщения, передаваемого из процесса Pi в процесс Pj, то Θ(ei) < Θ(ej').

66

В случае, когда Θ и T удовлетворяют условию

ei, ej' : ei ej' Θ(ei) < Θ(ej'),

логические часы называют строго непротиворечивыми (англ. strongly consistent).

Реализация механизма логических часов подразумевает

(1) определение структуры данных, поддерживаемой локально каждым процессом для представления логического времени из множества Т и хранения текущих показаний своих часов, и (2) описание метода продвижения логического времени, гарантирующего выполнение условия непротиворечивости.

В логических часах каждого процесса Pi часто выделяют две составляющие.

Логические локальные часы для измерения собственного хода выполнения процесса. То есть логические локальные часы

используются процессом Pi для записи информации о ходе своего собственного выполнения.

Логические глобальные часы для описания локального

представления процесса Pi о глобальном времени. То есть логические глобальные часы используются процессом Pi для записи информации о ходе выполнения других процессов. Логические глобальные часы позволяют процессу назначать непротиворечивые отметки времени для собственных событий.

Обычно показания логических локальных и логических глобальных часов хранятся в одной структуре данных, описывающей логическое время.

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

Правило 1: определяет, как процесс изменяет показания своих логических локальных часов при наступлении в нем любого события.

Правило 2: определяет, как процесс изменяет показания своих логических глобальных часов для отражения своего представления о ходе выполнения других процессов. Точнее говоря, это правило определяет, какая информация о текущем логическом времени процесса включается в каждое отправляемое им сообщение, и как процесс, получающий такое сообщение, использует эту информацию для обновления своего локального представления о глобальном времени.

Нетрудно видеть, что для гарантии непротиворечивости логических часов указанные Правила 1 и 2 должны соответственно удовлетворять Условиям 1 и 2, перечисленным выше.

Различные механизмы логических часов отличаются друг от друга как структурой данных, описывающей логическое время, так и методом его продвижения. Однако все они в той или иной форме реализуют

67

Соседние файлы в папке Lit