Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 86
Текст из файла (страница 86)
Такой подход весьма напоминает ситуацию с объектами, которые самостоятельно обрабатывают параллельные обращения.Распределенные системы, предлагающие подобные объекты, обычно не нуждаются в централизованной поддержке репликации. Поддержка может быть ограничена предоставлением серверов и адаптеров, помогающих в построении осведомленных о репликации объектов (рис. 6.3, а).
Примеры таких систем, которые мырассмотрим в главе 9, — это SOS [409] и Globe [471]. Преимущество осведомленных о репликации объектов состоит в том, что они могут реализовать специ-6.1. Обзор333фическую для объекта стратегию репликации, подобно тому, как параллельноработающие объекты могут обрабатывать параллельные обращения каким-нибудь особым образом.Реплицированный—••у^ объект " ^ j — -ПромежуточныйуровеньСетевая ОССетьЗависящийот объектапротоколрепликацииРеплицированный--—^объект \ j — -ПромежуточныйуровеньПромежуточныйуровеньСетевая ОССетевая ОСПромежуточныйуровеньПротоколСетевая ОС"репликации»промежуточногоуровняСетьРис.
б.З. Распределенная система для осведомленных о репликациираспределенных объектов (а). Распределенная система,отвечающая за управление репликами (б)Второй, более общий вариант обеспечения непротиворечивости параллельныхобъектов — сделать ответственной за управление репликацией распределеннуюсистему, как это показано на рис.
6.3, б. В частности, распределенная система отвечает за то, чтобы параллельные обращения перенаправлялись различным репликам в правильном порядке. Такой подход используется, в частности, в системеPiranha [281], которая предоставляет средства для помехоустойчивых, полностьюупорядоченных и причинно упорядоченных обращений к объектам в технологииCORBA.
Использование распределенной системы для управления репликациейпозволяет упростить разработку приложений. При этом иногда бывает нелегкоадаптировать специфические для объектов решения, и в этом недостаток такихсистем. Как мы увидим, эти решения часто требуются для масштабирования.6.1.3. Репликация как метод масштабированияРепликация и кэширование, увеличивающие производительность, часто используются в качестве способа масштабирования. Масштабирование обычно ведет кпроблемам с производительностью. Однако размещение копий данных и объектов неподалеку от использующих их процессов благодаря сокращению временидоступа позволяет повысить производительность и таким образом решить проблемы масштабирования.Возможно, платой за это будет необходимость сохранения актуальности копий,что потребует дополнительной пропускной способности сети.
Рассмотрим процесс Р, который обращается к локальной реплике Л/'раз в секунду, в то время каксама реплика обновляется М раз в секунду. Допустим, что обновление полностью изменяет предьщущую версию локальной реплики. Если Л^«М, то есть соот-334Глава 6. Непротиворечивость и репликацияношение обращений к обновлениям очень низкое, мы попадаем в такую ситуацию,когда обращений ко многим обновленным версиям со стороны Р попросту не будет и задействовать сетевую связь для доставки этих версий бесполезно.
В этомслучае может быть правильнее не устанавливать локальную реплику вблизи процесса Р или применить другую стратегию обновления этой реплики. Ниже мывернемся к этим вопросам.Более серьезной проблемой является то, что сохранение актуальности множества копий само по себе может стать серьезной проблемой масштабирования.Интуитивно понятно, что набор копий актуален, если все копии постоянно одинаковы. Это означает, что операция чтения должна давать одинаковые результаты для каждой из копий. Соответственно, при выполнении операции обновления одной из копий обновление должно распространиться на все копии до того,как начнется следующая операция.
При этом безразлично, с какой копии началась эта операция.Такой тип непротиворечивости иногда неформально (и неверно) называютплотной непротиворечивостью, поскольку она поддерживает так называемую синхронную репликацию [78]. (В следующем разделе мы представим точное определение непротиворечивости и введем ряд моделей непротиворечивости.) Ключевойявляется идея о том, что обновление всех копий проводится как одна атомарнаяоперация или транзакция. К сожалению, реализация атомарности операции, еслив нее вовлечено большое число реплик, которые к тому же могут быть разбросаны по узлам крупной сети, изначально затруднена, особенно когда эта операциявдобавок должна производиться за короткое время.Трудности вытекают из того факта, что мы должны синхронизировать все реплики. Конкретно это означает, что все реплики должны достичь согласия в том,когда точно должно производиться их локальное обновление.
Так, например, репликам может потребоваться договориться о глобальном упорядочении операцийс использованием механизма отметок времени Лампорта или завести координатора, который будет диктовать им порядок действий. Глобальная синхронизацияпросто отнимет массу времени на взаимодействие, особенно если реплики разбросаны по глобальной сети.Итак, мы оказались перед дилеммой. С одной стороны, остроту проблем масштабируемости можно снизить, используя репликацию и кэширование, которыевызовут рост производительности.
С другой стороны, чтобы поддерживать всекопии в актуальном состоянии, обычно требуется глобальная синхронизация, которая чересчур сильно влияет на производительность. Лекарство может оказаться хуже болезни.Во многих случаях единственное реальное решение состоит в том, чтобы пожертвовать ограничениями. Другими словами, если мы снимем требование обатомарности операций обновления, мы сможем отказаться от необходимостимгновенной глобальной синхронизации, выиграв при этом в производительности. Ценой за это станет ситуация возможной неодинаковости копий. То, в какойстепени мы можем пожертвовать непротиворечивостью, зависит от вариантов доступа к реплицированным данным и вариантов их обновления, а также от задач,в которых используются эти данные.6.2.
Модели непротиворечивости, ориентированные на данные335В следующем разделе мы сначала рассмотрим ряд моделей непротиворечивости, которые позволят нам дать точное определение непротиворечивости. Затеммы продолжим наш разговор о различных способах реализации этих моделей спомощью протоколов распределения и протоколов непротиворечивости. Различные подходы к классификации непротиворечивости и реплицирования можнонайти в [176, 492].6.2. Модели непротиворечивости,ориентированные на данныеПо традиции непротиворечивость всегда обсуждается в контексте операций чтения и записи над совместно используемыми данными, доступными в распределенной памяти (разделяемой) или в файловой системе (распределенной).
В этомразделе мы задействуем общий термин хранилище данных {data store). Хранилище данных может быть физически разнесено по нескольким машинам. В частности, каждый из процессов, желающих получить доступ к данным из хранилища,может означать наличие доступной через хранилище локальной (или расположенной неподалеку от него) копии данных. Операции записи распространяютсяи на другие копии, как это показано на рис. 6.4. Операции над данными называются операциями записи, если они изменяют данные. Все прочие операции считаются операциями чтения.ПроцессПроцессПроцессРаспределенноехранилище данныхРис.
6.4. Обобщенная организация логического хранилища данных, физическираспределенного и реплицируемого по нескольким процессамМодель непротиворечивости {consistency model), по существу, представляет собой контракт между процессами и хранилищем данных. Он гласит, что если процессы согласны соблюдать некоторые правила, хранилище соглашается работатьправильно. Обычно процесс, выполняющий операцию чтения элемента данных,ожидает, что операция вернет значение, соответствующее результату последнейоперации записи этих данных.В отсутствие глобальных часов трудно точно определить, какая из операцийзаписи была последней. Нам нужно ввести другие, альтернативные определения,которые приведут к созданию моделей непротиворечивости. Каждая модель будет336Глава 6. Непротиворечивость и репликацияуспешно ограничивать набор значений, которые может возвратить операция чтения над элементом данных.
Как можно догадаться, модели с минимальным объемом ограничений использовать проще, а модели с максимальными ограничениями — труднее. Плата за это, разумеется, состоит в том, что простые моделиработают хуже, чем сложные. Такова жизнь. Дополнительную информацию помоделям непротиворечивости можно почерпнуть в [4, 303].6 . 2 . 1 . Строгая непротиворечивостьНаиболее жесткая модель непротиворечивости называется строгой непротиворечивостью {strict consistency). Она определяется следующим условием: всякое чтение элемента данных х возвращает значение, соответствуюш,ее результату последней записи X.Это определение естественно и очевидно, хотя косвенным образом подразумевает существование абсолютного глобального времени (как в классической физике), в котором определение «последней» однозначно.
Однопроцессорные системы традиционно соблюдают строгую непротиворечивость, и программисты такихсистем склонны рассматривать такое поведение, как естественное. Рассмотримследующую программу:а = 1: а = 2: p r 1 n t ( a ) ;Система, в которой эта программа напечатает 1 или любое другое значение,кроме 2, быстро приведет к появлению толпы возбужденных программистов имассе полезных мыслей.Для системы, в которой данные разбросаны по нескольким машинам, а доступ к ним имеет несколько процессов, все сильно усложняется. Допустим, чтоX — это элемент данных, хранящийся на машине В. Представим, что процесс, работающий на машине Л, читает х в момент времени Т1, то есть посылает В сообщение с требованием возвратить х.
Чуть позже, в момент времени 72, процесс смашины В производит запись х. Если строгая непротиворечивость сохраняется,чтение должно всегда возвращать прежнее значение, которое не зависит от того,где находятся машины и насколько мал интервал между Т1 и Т2. Однако еслиТ2-Т1 равно, скажем, одной наносекунде, а машины расположены в трех метрахдруг от друга, то чтобы запрос на чтение от АкВ дошел до машины раньше В отправления запроса на запись, он должен двигаться в 10 раз быстрее скоростисвета, а это противоречит теории относительности Эйнштейна. Разумно ли программистам требовать, чтобы система была строго непротиворечивой, даже еслиэто требование противоречит законам физики?Проблема со строгой непротиворечивостью состоит в том, что она завязана наабсолютное глобальное время. В сущности, в распределенной системе невозможно установить на каждую операцию уникальную отметку времени, согласованную с действительным глобальным временем.
Мы можем снизить остроту этойситуации, разделив время на серии последовательных неперекрывающихся интервалов. Каждая операция может происходить в пределах интервала и получаетотметку времени, соответствующую этому интервалу. В зависимости от того.6.2. Модели непротиворечивости, ориентированные на данные337насколько точно можно синхронизировать часы, мы можем оказаться и в ситуации, когда на один такой интервал будет приходиться больше одной операции.К сожалению, на то, что на один интервал будет приходиться максимум однаоперация, нет никаких гарантий.