Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 92
Текст из файла (страница 92)
Однако у нее естьпроблема — низкая производительность. Единственный способ улучшить показатели производительности — это ослабить модель непротиворечивости. Некоторые из возможностей иллюстрирует табл. 6.5. Модели перечислены в приблизительном порядке снижения ограничений.Таблица 6.5. Модели непротиворечивости, не требующие операцийсинхронизацииНепротиворечивостьОписаниеСтрогаяАбсолютная упорядоченность во времени всех обращенийк совместно используемой памятиЛинеаризуемостьВсе процессы наблюдают все обращения к совместноиспользуемой памяти в одном и том же порядке. Обращенияупорядочены в соответствии с (неуникальными)глобальными отметками времениПоследовательнаяВсе процессы наблюдают все обращения к совместноиспользуемой памяти в одном и том же порядке.Обращения не упорядочены по времениПричиннаяВсе процессы наблюдают все обращения, связанныепричинно-следственной связью, к совместно используемойпамяти в одном и том же порядкеFIFOВсе процессы наблюдают операции записи любого процессав порядке их выполнения.
Операции записи различныхпроцессов могут наблюдаться разными процессамив разном порядкеПричинная непротиворечивость и непротиворечивость FIFO представляютсобой ослабленные модели, в которых отсутствует глобальный контроль над тем,какие операции в каком порядке выполняются. Разным процессам последовательность операций кажется разной. Эти две модели различаются в том, какиепоследовательности считаются допустимыми, а какие нет.Другой подход состоит во введении явных переменных синхронизации, каксделано для слабой непротиворечивости, свободной непротиворечивости и поэлементной непротиворечивости.
Эти три модели приведены в табл. 6.6. Когдапроцесс выполняет операцию с обычным элементом совместно используемыхданных, отсутствуют какие-либо гарантии по поводу того, когда его смогут увидеть другие процессы. Изменения распространятся только при явной синхронизации. Эти три модели различаются способом синхронизации, но во всех случаяхпроцесс может производить множественные операции чтения и записи в крити-6.3.
М о д е л и непротиворечивости, ориентированные на клиента355ческой области без реального переноса данных. После окончания критическойобласти результат передается другим процессам или хранится в готовом виде,ожидая, пока другой процесс не потребует этих данных.Таблица 6 .
6 . Модели непротиворечивости, использующие о п е р а ц и исинхронизацииНепротиворечивостьОписаниеСлабаяСовместно используемые данные могут считатьсянепротиворечивыми только после синхронизацииСвободнаяСовместно используемые данные становятся непротиворечивымипосле выхода из критической областиПоэлементнаяСовместно используемые данные, относящиеся к даннойкритической области, становятся непротиворечивыми при входев эту областьГоворя кратко, слабая, свободная и поэлементная непротиворечивости требуют дополнительных программных конструкций, которые при правильном использовании позволяют программистам представить дело так, будто хранилищеданных обладает последовательной непротиворечивостью.
В принципе эти тримодели, использующие явную синхронизацию, можно задействовать для повышения производительности, однако вполне вероятно, что для разных приложений успешность такого подхода будет разной.6.3. Модели непротиворечивости,ориентированные на клиентаМодели непротиворечивости, описанные в предыдущем разделе, ориентированына создание непротиворечивого представления хранилища данных. При этомделалось важное предположение о том, что параллельные процессы одновременно изменяют данные в хранилище и необходимо сохранить непротиворечивостьхранилища в условиях этой параллельности.
Так, например, в случае поэлементной непротиворечивости на базе объектов хранилище данных гарантирует, чтопри обращении к объекту процесс получит копию объекта, отражающую все произошедшие с ним изменения, в том числе и сделанные другими процессами. В ходе обращения гарантируется также, что нам не помешает никакой другой объект,то есть обратившемуся процессу будет предоставлен защищенный механизмомвзаимного исключения доступ.Возможность осуществлять параллельные операции над совместно используемыми данными в условиях последовательной непротиворечивости являетсябазовой для распределенных систем. По причине невысокой производительности последовательная непротиворечивость может гарантироваться только в случае использования механизмов синхронизации — транзакций или блокировок.В этом разделе мы рассмотрим специальный класс распределенных хранилищ данных, которые характеризуются отсутствием одновременных изменений356Глава 6.
Непротиворечивость и репликацияили легкостью их разрешения в том случае, если они все-таки случатся. Большаячасть операций подразумевают чтение данных. Подобные хранилища данных соответствуют очень слабой модели непротиворечивости, которая носит названиепотенциальной непротиворечивости. После введения специальных моделей непротиворечивости, ориентированных на клиента, оказывается, что множествонарушений непротиворечивости можно относительно просто скрыть.6.3.1. Потенциальная непротиворечивостьСтепень, в которой процессы действительно работают параллельно, и степень,в которой действительно должна быть гарантирована непротиворечивость, могутбыть разными. Существует множество случаев, когда параллельность нужна лишьв урезанном виде. Так, например, во многих системах управления базами данныхбольшинство процессов не производит изменения данных, ограничиваясь лишьоперациями чтения.
Изменением данных занимается лишь один, в крайнем случае несколько процессов. Вопрос состоит в том, как быстро эти изменения могутстать доступными процессам, занимающимся только чтением данных.В качестве другого примера рассмотрим глобальную систему именования, такую как DNS. Пространство имен DNS разделено на домены, каждый домен имеетисточник именования, который действует, как владелец этого домена. Толькоэтот источник может обновить свою часть пространства имен. Соответственно,конфликт двух операций, которые хотели бы одновременно обновить одни и теже данные (то есть конфликт двойной записи), невозможен.
Единственная ситуация, которую может потребоваться решать, — это конфликт чтения-записи.В том случае, когда он происходит, часто распространение изменений может производиться постепенно, в том смысле, что процессы чтения могут обнаружитьпроизошедшие изменения только через некоторое время после того, как они насамом деле произойдут.Еще один пример — World Wide Web. Фактически web-страницы всегда изменяются одним человеком — web-мастером или настоящим владельцем страницы.В результате разрешать конфликты двойной записи обычно не требуется.
С другой стороны, для повышения эффективности браузеры и прокси-серверы частоконфигурируются так, чтобы сохранять загруженные страницы в локальном кэше и возвращать при следующем запросе именно их. Важный момент обоих типов систем web-кэширования состоит в том, что они могут возвращать устаревшие web-страницы. Другими словами, кэшированные страницы, возвращаемые вответ на запрос клиента, могут не соответствовать более новым версиям страниц,хранящимся на web-сервере.
Но даже при этом многие пользователи lyioryT счестьтакое несоответствие приемлемым.Эти примеры могут рассматриваться как случаи распределенных и реплицируемых баз данных (крупных), нечувствительных к относительно высокойстепени нарушения непротиворечивости. Обычно в них длительное время непроисходит изменения данных, и все реплики постепенно становятся непротиворечивыми. Такая форма непротиворечивости называется потенциальной непротиворечивостью {eventual consistency).6.3. Модели непротиворечивости, ориентированные на клиента357Потенциально непротиворечивые хранилища данных имеют следующее свойство: в отсутствие изменений все реплики постепенно становятся идентичными.Как мы будем говорить позднее в этой главе, потенциальная непротиворечивость, в сущности, требует только, чтобы изменения гарантированно расходились по всем репликам. Конфликты двойной записи часто относительно легкоразрешаются, если предположить, что вносить изменения может лишь небольшая группа процессов.
Поэтому реализация потенциальной непротиворечивости часто весьма дешева. Специфику реализации мы рассмотрим позже в этойглаве.Потенциально непротиворечивые хранилища данных с успехом работают, есликлиент всегда осуществляет доступ к одной и той же реплике. Однако при работе с разными репликами возникают проблемы. Они прекрасно иллюстрируютсясхемой доступа мобильного пользователя к распределенной базе данных, представленной на рис. 6.13.Клиент перемещаетсяв другое место и связывается(прозрачно) с другой репликойПортативныйкомпьютерРаспределенная и реплицированнаябаза данныхОперации чтения и записиРис. 6.13.
Принцип доступа мобильного пользователя к разным репликамраспределенной базы данныхМобильный пользователь работает с базой данных, прозрачно подсоединяяськ одной из ее реплик. Другими словами, приложение, работающее на портативном компьютере пользователя, не знает, с какой именно репликой оно работает.Допустим, пользователь произвел несколько операций изменения данных и отсоединился от базы.