- •Глава 13. Семантическое моделирование
- •Часть III Проектирование базы данных
- •Часть IV
- •14.1. Введение
- •14.2. Транзакции
- •14.3. Восстановление транзакции
- •14.4. Восстановление системы
- •14.5. Восстановление носителей
- •14.6. Двухфазная фиксация
- •14.7. Поддержка языка sql
- •14.8. Резюме
- •15.1. Введение
- •15.2. Три проблемы параллельности
- •15.3. Блокировка
- •15.4. Устранение трех проблем параллельности
- •15.5. Взаимная блокировка
- •15.6. Упорядочиваемость
- •15.7. Уровни изоляции
- •15.8. Блокировка намерения
- •15.9. Средства языка sql
- •15.10. Резюме
- •Часть V
- •16.1. Введение
- •16.2. Избирательная схема управления доступом
- •16.3. Мандатная схема управления доступом
- •16.4. Статистические базы данных
- •16.5. Шифрование данных
- •16.6. Средства языка sql
- •16.7. Резюме
- •17.1. Введение
- •17.2. Пример выполнения оптимизации
- •17.3. Оптимизация запросов
- •17.4. Преобразование выражений
- •17.5. Статистические показатели базы данных
- •17.6. Стратегия по принципу "разделяй и властвуй"
- •17.7. Реализация реляционных операторов
- •17.8. Резюме
- •18.1. Введение
- •18.2. Обзор концепции трехзначной логики
- •18.3. Некоторые следствия изложенной схемы
- •18.4. Отсутствующие значения и ключи
- •18.5. Внешнее соединение
- •18.6. Специальные значения
- •18.7. Поддержка неопределенных значений в языке sql
- •18.8. Резюме
- •Глава 19
- •19.1. Введение
- •19.2. Иерархия типов
- •19.3. Полиморфизм и заменимость
- •19.4. Переменные и операция присвоения
- •19.5. Специализация по ограничениям
- •19.6. Операции сравнения
- •19.7. Операторы, версии и сигнатуры
- •19.8. Является ли окружность эллипсом
- •19.9. Пересмотр специализации ограничением
- •19.10. Резюме
- •20.1. Введение
- •20.2. Предварительные сведения
- •20.3. Двенадцать основных целей
- •1. Локальная независимость
- •2. Отсутствие опоры на центральный узел
- •3. Непрерывное функционирование
- •4. Независимость от расположения
- •5. Независимость от фрагментации
- •6. Независимость от репликации
- •7. Обработка распределенных запросов
- •8. Управление распределенными транзакциями
- •9. Аппаратная независимость
- •10. Независимость от операционной системы
- •11. Независимость от сети
- •12. Независимость от типа субд
- •20.4. Проблемы распределенных систем
- •Транзакция т1х
- •20.5. Системы "клиент/сервер"
- •20.6. Независимость от субд
20.3. Двенадцать основных целей
1. Локальная независимость
Узлы в распределенной системе должны быть независимы, или автономны. Локаль- ная независимость означает, что все операции на узле контролируются этим узлом. Ника- кой узелХ не должен зависеть от некоторого узлаУ, чтобы успешно функционировать (иначе, если узел У будет отключен, узел X не сможет функционировать, даже если на са- мом узле X будет все в порядке; возникновение таких ситуаций, безусловно, нежелательно). Локальная независимость также означает, что локальные данные имеют локальную при- надлежность, управление и учет. Все данные "реально" принадлежат одной и той же ло- кальной базе данных, даже если доступ к ней осуществляется с других, удаленных узлов. Следовательно, такие вопросы, как безопасность, целостность и представление локальных данных в памяти, остаются под контролем и в пределах компетенции локального узла.
В действительности локальная независимость не вполне достижима — есть множест- во ситуаций, в которых узел X должен отказываться в определенной степени от контроля в пользу узла Y. Поэтому цель достижения локальной независимости точнее можно было бы сформулировать так: узлы должны быть независимыми в максимально возможной степени. (См. аннотацию к публикации [20.14], где этот вопрос описан подробнее.)
2. Отсутствие опоры на центральный узел
Локальная независимость предполагает, что все узлы в распределенной системе должны рассматриваться как равные. Поэтому, в частности, не должно быть никаких обращений к "центральному" или "главному" узлу с целью получения некоторого цен- трализованного сервиса. Не должно быть, например, централизованной обработки за- просов, централизованного управления транзакциями или централизованной службы присвоения имен, поскольку в таких случаях система в целом будет зависимой от цен- трального узла. Таким образом, вторая цель на самом деле является следствием первой цели — если первая цель достигнута, то вторая цель также заведомо достигнута. Но дос- тижение цели "Отсутствие опоры на центральный узел" полезно само по себе, даже если полная локальная независимость узлов не будет достигнута. Поэтому отдельная форму- лировка данной цели также важна.
Опора на центральный узел является нежелательной по крайней мере по двум сле- дующим причинам. Во-первых, такой центральный узел, скорее всего, станет узким ме- стом системы, и, во-вторых (что еще хуже), система станет уязвимой — если работа цен- трального узла будет нарушена, то вся система выйдет из строя (проблема "единого ис- точника отказа").
3. Непрерывное функционирование
В общем случае преимущество распределенных систем состоит в том, что они долж- ны предоставлять более высокую степень надежности и доступности.
Надежность понимается как высокая степень вероятности того, что система будет работоспособна и будет функционировать в любой заданный момент. Надежность распределенных систем повышается за счет того, что они не опираются на прин- цип "все или ничего"; распределенные системы могут непрерывно функциониро- вать (в сокращенном варианте) даже в случаях отказов части их компонентов, та- ких как отдельный узел.
Доступность понимается как высокая степень вероятности того, что система ока- жется работоспособной и будет непрерывно функционировать в течение опреде- ленного времени. Доступность распределенных систем также повышается — час- тично по тем же причинам, а также благодаря возможности дублирования данных (подробности приводятся в комментарии к цели 6).
Предыдущие рассуждения относятся к случаям незапланированного отключения системы, т.е. к аварийным ситуациям, которые могут возникнуть в системе в любой мо- мент. Незапланированные отключения системы, безусловно, нежелательны, но их трудно предупредить! Планируемые отключения системы, напротив, никогда не должны быть необходимы, т.е. никогда не должна возникать необходимость отключить систему, что- бы выполнить какую-либо задачу, например добавить новый узел или заменить на уже существующем узле текущую версию СУБД ее новой реализацией.