- •7.5.2. Трехфазное подтверждение
- •7.6. Восстановление
- •7.6.1. Основные понятия
- •7.6.2. Создание контрольных точек
- •7.6.3. Протоколирование сообщений
- •7.7. Итоги
- •Глава 8
- •8.1. Общие вопросы защиты
- •8.1.1. Угрозы, правила и механизмы
- •8.1.2. Вопросы разработки
- •8.1.3. Криптография
- •8.2. Защищенные каналы
- •8.2.1. Аутентификация
- •8.2.2. Целостность и конфиденциальность сообщений
- •8.2.3. Защищенное групповое взаимодействие
- •8.3. Контроль доступа
- •8.3.1. Общие вопросы контроля доступа
- •8.3.2. Брандмауэры
- •8.3.3. Защита мобильного кода
- •8.4. Управление защитой
- •8.4.1. Управление ключами
- •8.4.2. Управление защищенными группами
- •8.4.3. Управление авторизацией
- •8.5. Пример — Kerberos
- •8.6. Пример — sesame
- •8.6.1. Компоненты системы sesame
- •8.6.2. Сертификаты атрибутов привилегий
- •8.7. Пример — электронные платежные системы
- •8.7.1. Электронные платежные системы
- •8.7.2. Защита в электронных платежных системах
- •8.7.3. Примеры протоколов
- •8.8. Итоги
- •Глава 9
- •9.1. Corba
- •9.1.1. Обзор
- •9.1.2. Связь
- •9.1.3. Процессы
- •9.1.4. Именование
- •9.1.5. Синхронизация
- •9.1.6. Кэширование и репликация
- •9.1.7. Отказоустойчивость
- •9.1.8. Защита
- •9.2. Dcom
- •9.2.1. Обзор
- •9.2.2. Связь
- •9.2.3. Процессы
- •9.2.4. Именование
- •Синхронизация
- •Репликация
- •Отказоустойчивость
- •9.2.8. Защита
- •9.3. Globe
- •9.3.1. Обзор
- •9.3.2. Связь
- •9.3.3. Процессы
- •9.3.4. Именование
- •9.3.5. Синхронизация
- •9.3.6. Репликация
- •Отказоустойчивость
- •9.4. Сравнение систем corba, dcom и Globe
- •9.4.1. Философия
- •Процессы
- •9.4.4. Именование
- •Синхронизация
- •Кэширование и репликация
- •Отказоустойчивость
7.7. Итоги
Отказоустойчивость — это важная область построения распределенных систем. Отказоустойчивость определяется как способность системы маскировать появление ошибок и исправлять их. Другими словами, система отказоустойчива, если она продолжает функционировать при наличии отказов.
Существуют разные типы отказов. Поломка означает простую остановку системы. Пропуск данных наблюдается в том случае, если процесс не реагирует на входящие запросы. Если процесс отвечает слишком быстро или слишком медленно, мы говорим об ошибке синхронизации. Отклик на входящий запрос с ошибкой — пример ошибки отклика. Сложнее всего обрабатывать ситуации, когда в процессе может случиться ошибка любого типа. Такие ошибки называют произвольными или византийскими.
Избыточность — это стандартный способ обеспечения отказоустойчивости. Если избыточность применяется к процессам, становится важным понятие группы процессов. Процессы в группе тесно взаимодействуют между собой для предоставления некоторой услуги. В отказоустойчивых группах один или более процессов могут отказать, не оказывая при этом заметного влияния на доступность услуги, реализуемой группой. Часто необходимо, чтобы взаимодействие внутри группы было высоконадежным и в плане обеспечения отказоустойчивости поддерживало свойства строгой упорядоченности и атомарности.
Надежное групповое взаимодействие, именуемое также надежной групповой рассылкой, может существовать в различных формах. До тех пор пока группы относительно малы, достижение надежности вполне возможно. Однако при необходимости поддерживать очень большие группы масштабирование надежной групповой рассылки становится проблематичным. Ключевым моментом в реализации масштабируемости становится снижение числа откликов, возвращающих отчет об удачном (или неудачном) приеме разосланного сообщения.
Проблемы усложняются, когда требуется соблюсти атомарность. В протоколах атомарной групповой рассылки важно, чтобы каждый член группы имел одинаковое представление о том, каким элементам группы доставляется сообщение. Атомарная групповая рассылка должна быть точно сформулирована в понятиях модели виртуально синхронного выполнения. В частности, эта модель вводит границы, внутри которых членство в группах не меняется, а сообщения передаются надежно. Сообщения никогда не пересекают границ.
Механизм изменения членства в группе — это пример того, что каждый процесс должен согласиться с единым списком членов. Такое соглашение может быть заключено при помощи протоколов подтверждения, самым распространенным из которых является протокол двухфазного подтверждения. В условиях протокола двухфазного подтверждения координатор сначала проверяет готовность всех процессов к выполнению одной и той же операции (то есть к ее подтверждению), а на втором этапе рассылает результат этого голосования. Протокол трехфазного подтверждения используется для того, чтобы справиться с отказом координатора без необходимости блокировать все процессы, для достижения соглашения дожидаясь восстановления координатора.
Восстановление в отказоустойчивых системах неизменно организуется на основе регулярного сохранения информации о состоянии системы. Работа с контрольными точками полностью распределена. К сожалению, создание контрольной точки — довольно затратная операция. Для повышения производительности множество распределенных систем сочетают контрольные точки с протоколированием сообщений. Благодаря протоколированию взаимодействия между процессами после отказа системы можно воспроизвести ход ее функционирования.
Вопросы и задания
Надежные системы часто требуют обеспечения высокой степени защиты. Почему?
Что делает модель аварийной остановки трудной для реализации в случае поломок?
Рассмотрим web-браузер, возвращающий устаревшие страницы из кэша, а не обновленные с сервера. Является ли это ошибкой, и если да, какой это тип ошибки?
Может ли модель тройного модульного резервирования, описанная в тексте, справиться с византийскими ошибками?
Сколько отказавших элементов (обычных устройств и устройств голосования) может быть обработано схемой, представленной на рис. 7.1? Дайте пример ошибки, которая может быть замаскирована.
Можно ли обобщить тройное модульное резервирование на пять элементов в группе вместо трех? Если да, какие свойства будет оно иметь?
Для какого из следующих приложений, по вашему, наилучшим образом подойдет семантика «минимум однажды» или «максимум однажды»? Дайте развернутое объяснение.
Чтение и запись файлов на файловый сервер.
Компиляция программы.
Домашний банк.
В случае асинхронных вызовов RPC клиент блокируется до момента получения его запроса сервером (см. рис. 7.12). В какой степени наличие ошибок влияет на семантику асинхронных вызовов RPC?
Приведите пример, когда для группового взаимодействия вообще не нужно никаких синхронизирующих сообщений.
10. Всегда ли в надежных групповых рассылках есть необходимость в том, чтобы копии сообщений сохранялись на коммуникационном уровне с целью повторной посылки?
В какой степени важна масштабируемость для атомарных групповых рассы-лок?
В тексте мы предложили, что при атомарной групповой рассылке можно сохранять дату осуществления изменения согласного на это набора процессов. В какой степени мы можем гарантировать, что каждое из изменений действительно было сделано?
Виртуальная синхронность аналогична слабой непротиворечивости распределенных хранилищ данных с изменениями представления групп в качестве точек синхронизации. В этом контексте что будет аналогом строгой непротиворечивости?
Каков разрешенный порядок доставки для комбинации FIFO и полностью упорядоченной групповой рассылки (см. табл. 7.3)?
Адаптируйте протокол для установки следующего представления в случае виртуальной синхронности, чтобы он мог противостоять ошибкам в процессах.
Почему в протоколе двухфазного подтверждения невозможно полностью исключить блокировку, даже в случае выбора участниками нового координатора?
Из нашего объяснения механизма трехфазного подтверждения можно понять, что завершение транзакции определяется большинством голосов. Так ли это?
В случае кусочно детерминированной модели достаточно ли заносить в журнал только сообщения? Или также требуется протоколировать другие события?
Опишите, как для восстановления после отказов можно использовать в распределенных транзакциях журнал с упреждающей записью.
Нуждается ли в создании контрольных точек сервер без фиксации состояния?
Протоколирование сообщений получателем обычно считается более правильным, чем протоколирование отправителем. Почему?
