
- •Распределённые алгоритмы План
- •1. Распределенные системы. Архитектура и функционирование
- •1.1. Поддержка Языка
- •Параллелизм.
- •2. Распределенные Алгоритмы
- •Распределенные алгоритмы против Централизованных алгоритмов
- •Пример: Связь с одиночным сообщением
- •3. Балансировка нагрузки в распределенных системах
- •Выборы координатора
- •4.7. Механизмы обеспечения синхронизации
- •Низкоуровневые средства синхронизации
- •4.8. Атомарные транзакции
- •4.8.2. Двухфазный протокол утверждения
- •5. Тупики в распределенных системах
2. Распределенные Алгоритмы
Программирование распределенных систем должно быть основано на использовании правильных, гибких, и эффективных алгоритмов.
Разработка распределенных алгоритмов - процедура, совершенно различная по характеру от процедуры, используемой в разработке централизованных алгоритмов. Распределенные и централизованные системы отличаются по ряду существенных отношений. Поэтому исследование и разработка распределённых алгоритмов развивается как независимое поле научного исследования.
Распределенные алгоритмы против Централизованных алгоритмов
Распределенные системы отличаются от централизованных компьютерных систем по следующим трем существенным отношениям:
(1) Недостаток знания глобального состояния.
В централизованных решениях управление алгоритмом может быть сделано основанным на наблюдениях состояния системы.
Даже при том, что ко всему состоянию обычно нельзя обращаться в одиночной машинной операции, программа может осматривать переменные один за другим, и принимать решение, в котором в итоге релевантная информация будет расценена. Никакие данные не изменяются между проверкой и решением, и это гарантирует целостность решения.
Узлы в распределенной системе имеют доступ только к их собственному состоянию и не к глобальному состоянию всей системы. Следовательно, невозможно делать решение управления основанным на глобальном состоянии.
Здесь имеет место тот факт, что узел может получать информацию относительно состояния других узлов и базировать решения управления на этой информации.
В отличие от централизованных систем, факт, что полученная информация является старой, может стать причиной получения недопустимой информации, потому что состояние другого узла, возможно, изменилось между посылкой информации состояния и решения, основанного на этом.
Состояние подсистемы связи (то есть, какие сообщения находятся в транзите в некоторый момент) никогда непосредственно не наблюдается узлами. Эта информация может только быть выведена косвенно, сравнивая информацию относительно сообщений, посланных и полученных узлами.
Недостаток глобального кадра времени.
События, составляющие выполнение централизованного алгоритма полностью упорядочиваются естественным способом их временным появлением.
Для каждой пары событий, каждое событие происходит ранее или позже чем другое.
Временное отношение, вызванное на событиях, составляющих выполнение распределенного алгоритма - их общее количество.
Для некоторых пар событий может иметься причина для решения, что каждое событие происходит перед другим событием, но для других пар имеет место, что ни одно из событий не происходит перед другим. Взаимное исключение может быть достигнуто в централизованной системе требующей этого исключения. Если доступ процесса p к ресурсу начинается позже чем доступ процесса q, то доступ процесса p начался после того, как доступ процесса q закончился. Действительно, все такие события (старт и окончание доступа процессов p и q) полностью упорядочиваются отношением временного предшествования.
В распределенной системе эти события - не упорядочиваются, и та же самая стратегия не достаточна. Процессы p и q могут начать обращаться к ресурсу, в то время как начало одного не предшествует началу другой.
(3) Недетерменизм.
Централизованная программа может описывать вычисления, поскольку эти вычисления разворачиваются из некоторого ввода недвусмысленно.
Имея данную программу и ввод, возможно описание только одиночного вычисления. Напротив, выполнение вычислений распределенной системой обычно не -детерминировано, из-за возможных различий в быстродействии выполнения компонентов системы.
Рассмотрим ситуацию, где процесс сервера может получать запросы из неизвестного числа процессов пользователя.
Сервер не может приостановить обработку запросов, пока все запросы не были получены, потому что не известно, сколько сообщений прибудет. Следовательно, каждый запрос должен быть обработан немедленно, и порядок обработки будет определять порядок, в который запросы прибывают. Порядок, в котором клиентура посылает их запросы, может быть известен, но поскольку задержки передачи не известны, запросы могут прибывать в различном порядке.
Недостаток знания относительно глобального состояния, недостаток глобального кадра времени, и недетерменизм делает проект распределенных алгоритмов сложной процедурой, потому что эти три аспекта вмешиваются несколькими способами. Понятия времени и состояния очень взаимосвязаны. В централизованных системах понятие времени может быть определено, в процессе рассмотрения последовательности состояний, принятых системой в течение выполнения алгоритма вычислений. Даже при том, что в распределенной системе глобальное состояние может быть определено, и выполнение алгоритма может рассматриваться как последовательность глобальных состояний, это представление имеет ограниченное использование, так как выполнение может также быть описано другими последовательностями глобальных состояний. Другие альтернативные последовательности обычно состоят из различных глобальных состояний. Это придает утверждению "система, принимала это или то состояние в течение выполнения " очень сомнительное значение. Недостаток знания относительно глобального состояния мог бы компенсироваться, если бы было возможно предсказать это глобальное состояние из алгоритма, который выполняется. К сожалению, это не возможно из-за свойственного недетерменизма в выполнении распределенных систем.