Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 99
Текст из файла (страница 99)
В данном разделе мы обсудим различные способы реализации этих моделей непротиворечивости.Используя ранний подход, описанный в [440], протоколы последовательнойнепротиворечивости можно классифицировать по тому, существует ли первичная копия данных, которой должны передаваться все операции записи. Если такой первичной копии не существует, операции записи могут быть инициированы любой из реплик.6.5.1. Протоколы на базе первичной копиив протоколах на базе первичной копии каждый элемент данных х, находящийся вхранилище данных, имеет ассоциированный с ним первичный элемент данных,отвечающий за координацию всех операций записи в элемент х. Отличить первичный элемент данных можно по тому, что он постоянно находится на удаленном сервере, или по тому, что после переноса первичного элемента в тот процесс,в котором была инициирована операция записи, эта запись может выполнятьсялокально.Протоколы удаленной записиПростейший протокол на базе первичной копии — тот, в котором все операциичтения и записи передаются на удаленный сервер (единственный).
В результатеданные вообще не реплицируются, они просто размещаются на единственномсервере, с которого их невозможно куда-либо переместить. Эта модель традиционно используется в системах клиент-сервер, причем сервер может быть распределенным. Работу этого протокола иллюстрирует рис. 6.20. Здесь используютсяследующие обозначения:> W1 — запрос на запись;> W2 — пересылка запроса на сервер;4- W3 — подтверждение выполнения записи;4- W4 — подтверждение выполнения записи;"¥ R1 — запрос на чтение;"¥ R2 — пересылка запроса на сервер;"¥ R3 — возвращение ответа;4- R4 — возвращение ответа.Более интересны с точки зрения непротиворечивости протоколы, которыепозволяют процессам выполнять операции чтения с локальной копией, но операции записи должны пересылать на первичную (фиксированную) копию.
Подоб-6.5. Протоколы непротиворечивости379ные схемы часто называют [76] протоколами первичного архивирования {primarybackup protocols). Как работает протокол первичного архивирования, показано нарис. 6.21. Здесь используются следующие обозначения:W1 — запрос на запись;W2 — пересылка запроса на первичный сервер;W3 — сигнал на обновление резервных копий;W4 — подтверждение обновления;W5 — подтверждение выполнения записи;R1 — запрос на чтение;R2 — ответ для чтения.КлиентКлиентОдиночный сервердля элемента данных хСервер резервногокопированияХранилищеданныхРис. 6.20.
Протокол удаленной записи на базе первичной копии с фиксированным сервером,на который пересылаются все операции записи и чтенияКлиентКлиентПервичный сервердля элемента данных хW1W5Сервер резервногокопированияR1R2/ХранилищеданныхРис. 6 . 2 1 . Первичное архивирование данныхПроцесс, желающий выполнить операцию записи в элемент данных х, пересылает эту операцию на первичный сервер. Первичный сервер осуществляет обновление своей локальной копии х, после чего пересылает это обновление серверам резервного копирования.
Каждый из этих серверов обновляет свои данные ипосылает обратно первичному серверу свое подтверждение. После обновлениялокальных копий всех серверов резервного копирования первичный сервер посылает подтверждение процессу, инициировавшему операцию.380Глава 6. Непротиворечивость и репликацияПотенциальные проблемы производительности этой схемы заключаются втом, что в процессе, инициировавшем обновление, может возникнуть относительно длительная задержка между инициированием процесса обновления и егопродолжением.
То есть обновление реализовано в виде блокирующей операции.Альтернативой является использование неблокирующих методов. Как толькопервичный сервер вносит обновление в свою локальную копию х, он возвращаетподтверждение. После этого он дает сигнал серверам резервного копированиявнести необходимые обновления в свои данные.
Неблокирующий протокол первичного архивирования обсуждается в [77].Основная проблема неблокирующего первичного архивирования связана сзащитой от сбоев. В схеме с блокировкой процесс клиента осведомлен о том, чтооперация обновления архивируется на несколько других серверов. В случае схемы без блокировки это не так.
Мы вернемся к вопросам защиты от сбоев в следующей главе.Протоколы первичного архивирования представляют собой простую реализацию последовательной непротиворечивости, в которой первичный сервер упорядочивает все входящие операции записи. Очевидно, что все процессы наблюдаютвсе операции записи в едином порядке, и неважно, какой из серверов резервногокопирования они используют для выполнения операций чтения. Кроме того,в блокирующих протоколах процессы видят также и результат последней операции записи (отметим, что для неблокирующих протоколов, если не приниматьспециальных мер, это не гарантировано).Протоколы локальной записиСуществует два типа протоколов локальной записи на базе первичной копии.Первый предполагает наличие единственной копии каждого элемента данных х.Другими словами, реплики отсутствуют.
Когда процесс собирается выполнитьоперацию с некоторым элементом данных, единственная копия этого элементапередается в процесс, после чего производится операция. Этот протокол в основном предназначен для полностью распределенных нереплицируемых версий. Непротиворечивость сохраняется просто потому, что существует всего одна копиякаждого элемента данных. Работу этого протокола иллюстрирует рис, 6.22.
Здесьцифрами показана следующая последовательность действий.1. Отправка запроса на чтение или запись.2. Передача запроса на текущий сервер для элемента данных х.3. Перемещение элемента данных х на сервер клиента.4. Возвращение результата операции на сервер клиента.Одна из основных проблем с таким методом полного переноса — отслеживание текущего положения каждого элемента данных. Как упоминалось в главе 4, в решениях для локальных сетей можно воспользоваться встроеннымисредствами широковещательной рассылки. Альтернативные решения — передача указателей и подходы с использованием базы. Такие решения применяютсяв распределенных системах с разделяемой памятью [264].
Однако при работе скрупномасштабными и глобальными хранилищами данных необходимы другие6.5. Протоколы непротиворечивости381механизмы, например иерархические службы локализации, одна из которыхупоминалась в главе 4.КлиентТекущий сервердля элемента данных х©\Новый сервердля элемента данных хSХранилищеданныхРис. 6.22. Протокол локальной записи на базе первичной копии, в котором единственнаякопия данных перемещается между процессамиОдним из вариантов описанного протокола локальной записи является протокол первичного архивирования, в котором первичная копия перемещается между процессами, собирающимися выполнить операцию записи. Как и ранее, если процесс хочет изменить элемент данных х, он находит его первичную копию,после чего перемещает его туда, где находится сам, как это показано на рис. 6.23.Здесь используются следующие обозначения:W1 — запрос на запись;W2 — перемещение элемента данных х на новый первичный сервер;W3 — подтверждение завершения записи;W4 — сигнал на обновление резервных копий;W5 — подтверждение обновления;R1 — запрос на чтение;КлиентСтарыйНовый ^ Клиентпервичныйпервичныйсерверсервер^ для элемента х Для элемента хСервер резервногокопированияХранилищеданныхРис.
6.23. Протокол первичного архивирования, в котором первичная копия перемещаетсямежду процессами, которым необходимо изменить данные382Глава 6. Непротиворечивость и репликацияОсновное преимущество этого подхода состоит в том, что многочисленныепоследовательные операции записи производятся локально, в то время как процессы чтения по-прежнему могут оперировать своими локальными копиями.Однако это улучшение может быть достигнуто только в том случае, если послеобновления первичной копии остальные обновления будут распространяться сиспользованием описанного ранее неблокирующего протокола. Такой протоколприменяется во многих распределенных системах с разделяемой памятью.Упомянутый протокол первичного архивирования с локальной записью также можно использовать для мобильных компьютеров, способных работать безсети.
Перед отсоединением мобильный компьютер становится первичным сервером для всех элементов данных, которые он собирается изменять. Будучи отключен от сети, он локально осуществляет все операции обновления данных, всеостальные процессы могут в это время производить чтение, но не изменять данные.