Восстановление распределенных баз данных
(Коннолли, с.740-752).
Существует 4 типа отказов, характерных для СУРБД:
· потеря сообщения;
· отказ линии связи;
· аварийный останов одного из сайтов;
· расчленение сети.
Если СУРБД обнаружит, что некоторый сайт отказал/стал недоступным, она должна выполнить следующие действия:
1. отменить выполнение всех транзакций, затронутых данным отказом;
2. отметить сайт как отказавший, чтобы предотвратить любые попытки его использования другими сайтами;
3. периодически проверять состояние отказавшего сайта для восстановления его функционирования или ожидать поступления от этого сайта широковещательного сообщения с указанием о восстановлении его нормальной работы;
4. при перезапуске сайта после отказа на нем должна выполняться процедура восстановления, предназначенная для отката любых транзакций, выполненных на момент отказа лишь частично;
5. после завершения процедуры локального восстановления отказавший сайт должен обновить свою копию БД, чтобы привести ее в соответствие с остальной частью системы.
Процессы восстановления в СУРБД усложняются тем фактом, что соблюдение свойства атомарности требуется как в отношении локальных субтранзакций, так и всей глобальной транзакции. По этой причине в процедуре фиксации и отката транзакций необходимо внести такие изменения, которые не позволят глобальной транзакции зафиксировать/отменить результаты ее выполнения, пока все ее субтранзакции не будут успешно зафиксированы/отменены. Работоспособные сайты не должны оказаться заблокированными из-за отказа др.
сайтов, протоколы, обеспечивающие выполнение этого требования называются неблокирующими.
Существует 2 широко используемых протокола фиксации транзакций в СУРБД:
1. протокол двухфазной фиксации транзакций (2PC)
2. неблокирующий протокол трехфазной фиксации транзакций (3РС).
Протокол двухфазной фиксации транзакций выполняется в 2 этапа: этап голосования и принятия решений. Идея состоит в том, что координатор должен опросить всех участников, готовы ли они к фиксации транзакций. Если хотя бы 1 из участников не ответит на запрос в пределах заданного тайм-аута/потребует отката, то координатор (сайт, следящий за выполнением глобальной транзакции) укажет всем участникам на необходимость отката данной транзакции. Данный протокол предполагает, что каждый сайт имеет свой собственный локальный журнал и с его помощью может надежно откатить/зафиксировать транзакцию. Двухфазный протокол включает в себя этап ожидания сообщения от др. сайтов. Во избежание блокировок процессов система использует механизм тайм-аута. Двухфазный протокол не является неблокирующим, т.к. при его использовании возможны ситуации, когда некоторый сайт остается в заблокированном состоянии (процесс, зафиксировавший тайм-аут после отправки согласия на фиксацию транзакции, но так и не получивший глобального подтверждения от координатора, остается в заблокированном состоянии). На практике вероятность блокирования процесса достаточно мала, поэтому в большинстве СУРБД используется именно этот протокол.
Трехфазная фиксация транзакций. Для использования этого протокола необходимо выполнение следующих условий: расчленение сети не должно иметь места, по крайней мере 1 сайт всегда должен быть доступен, самое большое К сайтов может отказать одновременно. Трехфазная фиксация является неблокирующей в отношении отказов сайтов, за исключением ситуации одновременного отказа всех сайтов. Основная идея данного протокола состоит в устранении неопределенного периода ожидания, в который попадают участники после согласия на фиксацию транзакции и до получения от координатора извещения о глобальной фиксации/глобальном откате.Для этого вводится третья фаза – предфиксация (PRE-COMMIT), помещаемая между фазами голосования и принятия глобального решения. Участник, получивший глобальное извещение о предфиксации знает, что все участники проголосовали за фиксацию результатов транзакции и что со временем сам участник тоже выполнит фиксацию, если не наступит отказ. Каждый участник подтверждает получение сообщения о предфиксации. После того как координатор получит эти подтверждения, он рассылает команду глобальной фиксации транзакций.