В этой главе рассматривается контроль репликации, который необходим для обеспечения согласованности данных на всех сайтах. Мы изучим методы контроля репликации и алгоритмы, необходимые для контроля репликации.
Как обсуждалось ранее, репликация — это метод, используемый в распределенных базах данных для хранения нескольких копий таблицы данных на разных сайтах. Проблема с наличием нескольких копий на нескольких сайтах связана с поддержанием согласованности данных, особенно во время операций обновления.
Чтобы поддерживать взаимосогласованные данные на всех сайтах, необходимо принять методы контроля репликации. Существует два подхода к управлению репликацией, а именно:
- Управление синхронной репликацией
- Управление асинхронной репликацией
Управление синхронной репликацией
При подходе с синхронной репликацией база данных синхронизируется, поэтому все репликации всегда имеют одинаковое значение. Транзакция, запрашивающая элемент данных, будет иметь доступ к одному значению на всех сайтах. Чтобы обеспечить это единообразие, транзакция, которая обновляет элемент данных, расширяется, так что она выполняет обновление во всех копиях элемента данных. Обычно для этой цели используется протокол двухфазной фиксации.
Например, давайте рассмотрим таблицу данных PROJECT (PId, PName, PLocation). Нам нужно запустить транзакцию T1, которая обновляет PLocation на «Мумбаи», если PLocation — «Бомбей». Если репликации нет, операции в транзакции T1 будут:
Begin T1: Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T1;
Если таблица данных имеет две реплики на сайте A и сайте B, T1 должен порождать двух дочерних T1A и T1B, соответствующих двум сайтам. Расширенная транзакция T1 будет —
Begin T1: Begin T1A : Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T1A; Begin T2A : Update PROJECT Set PLocation = 'Mumbai' Where PLocation = 'Bombay'; End T2A; End T1;
Управление асинхронной репликацией
В подходе асинхронной репликации реплики не всегда поддерживают одно и то же значение. Одна или несколько реплик могут хранить устаревшее значение, а транзакция может видеть разные значения. Процесс приведения всех реплик к текущему значению называется синхронизацией .
Популярный метод синхронизации — это метод хранения и пересылки. В этом методе один сайт обозначается как основной сайт, а другие сайты являются вторичными сайтами. Основной сайт всегда содержит обновленные значения. Все транзакции сначала попадают на основной сайт. Эти транзакции затем ставятся в очередь для применения на вторичных сайтах. Вторичные сайты обновляются с использованием метода развертывания только в том случае, если на нем запланировано выполнение транзакции.
Алгоритмы управления репликацией
Некоторые из алгоритмов управления репликацией —
- Алгоритм управления репликацией ведущий-ведомый.
- Алгоритм распределенного голосования.
- Алгоритм консенсуса большинства.
- Алгоритм циркуляционного токена.
Главный-подчиненный алгоритм управления репликацией
Существует один главный сайт и N ведомых сайтов. Главный алгоритм запускается на главном сайте для обнаружения конфликтов. Копия подчиненного алгоритма выполняется на каждом подчиненном сайте. Общий алгоритм выполняется в следующие два этапа —
-
Фаза принятия / отклонения транзакции — когда транзакция входит в монитор транзакций подчиненного сайта, подчиненный сайт отправляет запрос на главный сайт. Главный сайт проверяет наличие конфликтов. Если нет никаких конфликтов, мастер отправляет сообщение «ACK +» на ведомый сайт, который затем начинает фазу приложения транзакции. В противном случае ведущее устройство отправляет ведомому сообщение «ACK-», которое затем отклоняет транзакцию.
-
Фаза применения транзакции. После входа в эту фазу подчиненный узел, на котором была введена транзакция, передает всем подчиненным запрос на выполнение транзакции. Получив запросы, равноправные ведомые выполняют транзакцию и отправляют «ACK» запрашивающему ведомому по завершении. После того, как запрашивающее ведомое устройство получило сообщения «ACK» от всех своих одноранговых узлов, оно отправляет сообщение «DONE» на главный сайт. Мастер понимает, что транзакция завершена, и удаляет ее из очереди ожидания.
Фаза принятия / отклонения транзакции — когда транзакция входит в монитор транзакций подчиненного сайта, подчиненный сайт отправляет запрос на главный сайт. Главный сайт проверяет наличие конфликтов. Если нет никаких конфликтов, мастер отправляет сообщение «ACK +» на ведомый сайт, который затем начинает фазу приложения транзакции. В противном случае ведущее устройство отправляет ведомому сообщение «ACK-», которое затем отклоняет транзакцию.
Фаза применения транзакции. После входа в эту фазу подчиненный узел, на котором была введена транзакция, передает всем подчиненным запрос на выполнение транзакции. Получив запросы, равноправные ведомые выполняют транзакцию и отправляют «ACK» запрашивающему ведомому по завершении. После того, как запрашивающее ведомое устройство получило сообщения «ACK» от всех своих одноранговых узлов, оно отправляет сообщение «DONE» на главный сайт. Мастер понимает, что транзакция завершена, и удаляет ее из очереди ожидания.
Алгоритм распределенного голосования
Он состоит из «N» одноранговых сайтов, каждый из которых должен «ок» подтвердить транзакцию, прежде чем она начнет выполняться. Ниже приведены две фазы этого алгоритма —
-
Фаза принятия распределенной транзакции. Когда транзакция входит в диспетчер транзакций сайта, она отправляет запрос транзакции всем остальным сайтам. При получении запроса одноранговый сайт разрешает конфликты, используя правила голосования на основе приоритетов. Если все одноранговые сайты в порядке с транзакцией, запрашивающий сайт начинает фазу приложения. Если какой-либо одноранговый сайт не «одобряет» транзакцию, запрашивающий сайт отклоняет транзакцию.
-
Этап применения распределенной транзакции. После входа в эту фазу сайт, на котором была выполнена транзакция, передает запрос всем подчиненным для выполнения транзакции. Получив запросы, равноправные ведомые выполняют транзакцию и отправляют сообщение «ACK» запрашивающему ведомому по завершении. После того, как запрашивающее ведомое устройство получило сообщения «ACK» от всех своих одноранговых узлов, оно сообщает менеджеру транзакций, что транзакция завершена.
Фаза принятия распределенной транзакции. Когда транзакция входит в диспетчер транзакций сайта, она отправляет запрос транзакции всем остальным сайтам. При получении запроса одноранговый сайт разрешает конфликты, используя правила голосования на основе приоритетов. Если все одноранговые сайты в порядке с транзакцией, запрашивающий сайт начинает фазу приложения. Если какой-либо одноранговый сайт не «одобряет» транзакцию, запрашивающий сайт отклоняет транзакцию.
Этап применения распределенной транзакции. После входа в эту фазу сайт, на котором была выполнена транзакция, передает запрос всем подчиненным для выполнения транзакции. Получив запросы, равноправные ведомые выполняют транзакцию и отправляют сообщение «ACK» запрашивающему ведомому по завершении. После того, как запрашивающее ведомое устройство получило сообщения «ACK» от всех своих одноранговых узлов, оно сообщает менеджеру транзакций, что транзакция завершена.
Алгоритм большинства консенсуса
Это отличие от алгоритма распределенного голосования, в котором транзакция может выполняться, когда большинство партнеров «ок» одобрили транзакцию. Это разделено на три этапа —
-
Фаза голосования. Когда транзакция входит в диспетчер транзакций сайта, она отправляет запрос транзакции всем остальным сайтам. При получении запроса одноранговый сайт проверяет наличие конфликтов с использованием правил голосования и сохраняет конфликтующие транзакции, если таковые имеются, в очереди ожидания. Затем он отправляет сообщение «ОК» или «НЕ ОК».
-
Фаза принятия / отклонения транзакции — если запрашивающий сайт получает большинство «ОК» по транзакции, он принимает транзакцию и передает «ПРИНЯТЬ» всем сайтам. В противном случае он передает «ОТКАЗ» на все сайты и отклоняет транзакцию.
-
Этап применения транзакции — когда одноранговый сайт получает сообщение «ОТКАЗ», он удаляет эту транзакцию из списка ожидания и пересматривает все отложенные транзакции. Когда одноранговый сайт получает сообщение «ПРИНЯТЬ», он применяет транзакцию и отклоняет все отложенные транзакции в очереди ожидания, которые находятся в конфликте с этой транзакцией. По завершении он отправляет «ACK» запрашивающему ведомому.
Фаза голосования. Когда транзакция входит в диспетчер транзакций сайта, она отправляет запрос транзакции всем остальным сайтам. При получении запроса одноранговый сайт проверяет наличие конфликтов с использованием правил голосования и сохраняет конфликтующие транзакции, если таковые имеются, в очереди ожидания. Затем он отправляет сообщение «ОК» или «НЕ ОК».
Фаза принятия / отклонения транзакции — если запрашивающий сайт получает большинство «ОК» по транзакции, он принимает транзакцию и передает «ПРИНЯТЬ» всем сайтам. В противном случае он передает «ОТКАЗ» на все сайты и отклоняет транзакцию.
Этап применения транзакции — когда одноранговый сайт получает сообщение «ОТКАЗ», он удаляет эту транзакцию из списка ожидания и пересматривает все отложенные транзакции. Когда одноранговый сайт получает сообщение «ПРИНЯТЬ», он применяет транзакцию и отклоняет все отложенные транзакции в очереди ожидания, которые находятся в конфликте с этой транзакцией. По завершении он отправляет «ACK» запрашивающему ведомому.
Алгоритм обращения токена
При таком подходе транзакции в системе сериализуются с использованием циркулирующего токена и выполняются соответствующим образом для каждой реплики базы данных. Таким образом, все транзакции принимаются, т.е. ни одна не отклоняется. Это имеет две фазы —
Этап сериализации транзакций — на этом этапе все транзакции запланированы для выполнения в порядке сериализации. Каждой транзакции на каждом сайте присваивается уникальный тикет из последовательной серии, указывающий порядок транзакции. После того, как транзакции был присвоен билет, она транслируется на все сайты.
Этап применения транзакции. Когда сайт получает транзакцию вместе со своим билетом, он помещает транзакцию для выполнения в соответствии со своим билетом. После завершения транзакции этот сайт передает соответствующее сообщение. Транзакция заканчивается, когда она завершила выполнение на всех сайтах.