Введение
Алгоритм, используемый для определения порядка событий в распределенной компьютерной системе. Алгоритм временных меток Лампорта — это простой алгоритм логических часов, используемый для определения порядка событий в распределенной компьютерной системе. Поскольку различные узлы или процессы обычно не идеально синхронизированы, этот алгоритм используется для обеспечения частичного упорядочения событий с минимальными накладными расходами и служит концептуальной основой для более продвинутого метода векторных часов. Алгоритм назван в честь его создателя, Лесли Лампорта. Распределенные алгоритмы, такие как синхронизация ресурсов, часто зависят от некоторого метода упорядочения событий для своего функционирования. Например, рассмотрим систему с двумя процессами и диском. Процессы отправляют сообщения друг другу и отправляют сообщения на диск с запросом доступа. Диск предоставляет доступ в порядке получения сообщений. Например, процесс отправляет сообщение на диск с запросом на запись, а затем отправляет сообщение с инструкцией чтения процессу . Процесс получает сообщение и, в свою очередь, отправляет свой собственный запрос на чтение на диск. Если из-за задержки диск получает оба сообщения одновременно, он может определить, какое сообщение произошло раньше другого: событие происходит раньше события , если существует последовательность переходов двух типов, позволяющая перейти из в : движение вперед во времени, оставаясь в пределах одного и того же процесса, и следование за сообщением от момента его отправки до момента его получения. Алгоритм логических часов предоставляет механизм для определения фактов о порядке таких событий. Следует отметить, что если два события происходят в разных процессах, которые не обмениваются сообщениями напрямую или косвенно через третьи процессы, то эти процессы считаются конкурентными, то есть о порядке этих двух событий ничего нельзя сказать. Лампорт изобрел простой механизм, позволяющий численно фиксировать отношение «происходит раньше». Логические часы Лампорта — это числовое значение программного счетчика, поддерживаемое в каждом процессе. Концептуально эти логические часы можно рассматривать как часы, имеющие смысл только в контексте сообщений, перемещающихся между процессами. Когда процесс получает сообщение, он синхронизирует свои логические часы с часами отправителя. Векторные часы, упомянутые выше, являются обобщением этой идеи для произвольного числа параллельных, независимых процессов.
The Lamport timestamp algorithm is a simple logical clock algorithm used to determine the order of events in a distributed computer system. As different nodes or processes will typically not be perfectly synchronized, this algorithm is used to provide a partial ordering of events with minimal overhead, and conceptually provide a starting point for the more advanced vector clock method. The algorithm is named after its creator, Leslie Lamport. Distributed algorithms such as resource synchronization often depend on some method of ordering events to function. For example, consider a system with two processes and a disk. The processes send messages to each other, and also send messages to the disk requesting access. The disk grants access in the order the messages were received. For example process sends a message to the disk requesting write access, and then sends a read instruction message to process Process receives the message, and as a result sends its own read request message to the disk. If there is a timing delay causing the disk to receive both messages at the same time, it can determine which message happened before the other: happens before if one can get from to by a sequence of moves of two types: moving forward while remaining in the same process, and following a message from its sending to its reception. A logical clock algorithm provides a mechanism to determine facts about the order of such events. Note that if two events happen in different processes that do not exchange messages directly or indirectly via third party processes, then we say that the two processes are concurrent, that is, nothing can be said about the ordering of the two events. Lamport invented a simple mechanism by which the happened before ordering can be captured numerically. A Lamport logical clock is a numerical software counter value maintained in each process. Conceptually, this logical clock can be thought of as a clock that only has meaning in relation to messages moving between processes. When a process receives a message, it re synchronizes its logical clock with that sender. The above mentioned vector clock is a generalization of the idea into the context of an arbitrary number of parallel, independent processes.
Причинное распределение
Для любых двух событий, A и B, если существует возможность, что A могло повлиять на B, то метка времени Лампорта A будет меньше метки времени Лампорта B. Также возможно, что для двух событий нельзя определить, какое произошло раньше; в этом случае это означает, что они не могли повлиять друг на друга. Если A и B не могут оказывать влияния друг на друга, то не имеет значения, какое из них произошло первым.
Последствия
Часы Лампорта могут использоваться для создания частичного упорядочения событий между процессами. Если логические часы следуют этим правилам, то верно следующее соотношение: если то , где означает "произошло раньше". Это отношение одностороннее и называется условием согласованности часов: если одно событие произошло раньше другого, то его логические часы предшествуют часам другого события. Условие строгой согласованности часов, которое является двусторонним (если то ), может быть получено другими методами, такими как векторные часы. Используя только простые часы Лампорта, можно вывести только частичный причинно-следственный порядок событий. Однако, используя контрапозицию, верно, что влечет за собой . Таким образом, например, если то не могло произойти раньше . Другими словами, означает, что могло произойти раньше , либо быть несравнимым с в отношении порядка "произошло раньше", но не произошло после . Тем не менее, временные метки Лампорта можно использовать для создания полного упорядочения событий в распределенной системе, используя некоторый произвольный механизм для разрешения конфликтов (например, идентификатор процесса). Важно отметить, что это упорядочение является искусственным и не может использоваться для установления причинно-следственной связи.
Another way of putting this is that means that may have happened before , or be incomparable with in the happened before ordering, but did not happen after
Nevertheless, Lamport timestamps can be used to create a total ordering of events in a distributed system by using some arbitrary mechanism to break ties (e. g., the ID of the process). The caveat is that this ordering is artificial and cannot be depended on to imply a causal relationship.
Логические часы Лампорта в распределенных системах
В распределенной системе на практике невозможно синхронизировать время между сущностями (обычно рассматриваемыми как процессы) в системе; следовательно, сущности могут использовать концепцию логических часов, основанных на событиях, посредством которых они взаимодействуют. Если два объекта не обмениваются сообщениями, то им, вероятно, не требуется общая синхронизация времени; события, происходящие на этих объектах, называются конкурирующими (параллельными) событиями. Среди процессов на одной локальной машине мы можем упорядочить события на основе системных часов. Когда две сущности общаются посредством обмена сообщениями, событие отправки считается произошедшим раньше события приема, и между событиями можно установить логический порядок. Распределенная система характеризуется частичным порядком, если между событиями в системе можно установить отношение частичного порядка. Если можно установить "тотальный" порядок, то есть причинно-следственную связь между всеми событиями в системе, то система характеризуется полным порядком. Одна сущность не может иметь два события, происходящих одновременно. Если система имеет полный порядок, мы можем определить порядок всех событий в системе. Если система имеет частичный порядок между процессами, что и обеспечивают логические часы Лампорта, то мы можем определить порядок только между взаимодействующими сущностями. Лампорт рассмотрел случай упорядочивания двух событий с одинаковой временной меткой (или счетчиком): "Для разрешения неоднозначности мы используем любой произвольный полный порядок процессов".
Альтернативы потенциальной причинности
Событие "произошло раньше" отражает потенциальную, а не истинную причинность. В 2011 году Муниндар Сингх предложил декларативный, многоагентный подход, основанный на истинной причинности, названный информационными протоколами. Информационный протокол определяет ограничения на взаимодействие между агентами, составляющими распределенную систему. Однако, вместо указания порядка сообщений (например, посредством конечного автомата, распространенного способа представления протоколов в вычислительной технике), информационный протокол определяет информационные зависимости между сообщениями, которые агенты (конечные точки протокола) могут отправлять. Агент может отправить сообщение, находясь в определенном локальном состоянии (истории взаимодействия), только если сообщение и состояние вместе удовлетворяют соответствующим информационным зависимостям. Например, информационный протокол для приложения электронной коммерции может определять, что для отправки предложения с параметрами ID (уникальный идентификатор), наименование товара и цена, продавец должен уже знать ID и наименование товара из своего состояния, но может генерировать любую желаемую цену. Примечательно, что в информационных протоколах ограничены только отправки, но не приемы. В частности, агенты могут получать сообщения в любом порядке – приемы просто предоставляют информацию, и задерживать их нет смысла. Это означает, что информационные протоколы могут быть реализованы поверх неупорядоченных служб связи, таких как протокол UDP (User Datagram Protocol). Основная идея заключается в семантике приложений, то есть в проектировании распределенных систем на основе содержания сообщений – идея, связанная с принципом "от конца до конца". Современные подходы в значительной степени игнорируют семантику и сосредотачиваются на предоставлении приложений, не зависящих от конкретной реализации ("синтаксической") доставки сообщений и гарантий их упорядочивания в службах связи, где полезны идеи, такие как потенциальная причинность. Но если бы у нас был подходящий способ реализации семантики приложений, то такие службы связи не потребовались бы. Достаточной была бы неупорядоченная и ненадежная служба связи. Реальная ценность подхода информационных протоколов заключается в том, что он закладывает основу для подхода к семантике приложений.