- •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. Именование
- •Синхронизация
- •Кэширование и репликация
- •Отказоустойчивость
9.1.7. Отказоустойчивость
Системы CORBA длительное время почти не имели средств поддержания отказоустойчивости. В большинстве случаев о факте ошибки просто сообщалось клиенту, никаких других действий система не предпринимала. Так, например, при невозможности добраться до объекта по ссылке из-за недоступности его сервера (временной) клиент просто ждал. В CORBA версии 3 отказоустойчивостью занялись серьезно. Спецификация отказоустойчивой системы CORBA содержится в [328].
Группы объектов
Базовый подход к обработке ошибок в CORBA состоит в репликации объектов и создании из них групп объектов (object groups). Такая группа содержит одну или несколько абсолютно идентичных копий одного и того же объекта. Адресация группы объектов производится так же, как и одного объекта. Группа имеет тот же самый интерфейс, что и каждая из ее реплик. Другими словами, для клиента репликация прозрачна. Поддерживаются различные стратегии репликации, включая репликацию на основе первичной копии, активную репликацию и репликацию на основе кворума. Все эти стратегии мы обсуждали в главе 6. Существуют также и другие характеристики групп объектов, их детальное рассмотрение можно найти в [328].
Для того чтобы по возможности обеспечить прозрачность репликации и восстановления после сбоев, группы объектов не должны отличаться от обычных объектов CORBA, если приложение не потребует обратного. В связи с этим важно понять, как ссылаться на группы объектов. Применяемая методика состоит в использовании особого типа ссылки IOR, именуемой межоперациоппой ссылкой па группу объектов (Interoperable Object Group Reference, IOGR). Основное ее отличие от обычной ссылки IOR состоит в том, что каждая ссылка IOGR содержит несколько ссылок на разные объекты, а именно на реплики, входящие в одну группу объектов. В противоположность этому ссылка IOR также может содержать несколько ссылок, но все они будут относиться к одному и тому же объекту, различаясь, возможно, протоколами доступа.
Когда клиент передает своему брокеру ORB ссылку IOGR, этот брокер пытается выполнить привязку к одной из указанных реплик. В случае протокола НОР брокер ORB может использовать дополнительную информацию, обнаруженную в одном из профилей ПОР в ссылке IOGR. Эта информация, как мы уже говорили, может храниться в поле компонентов. Например, как показано на рис. 9.13, конкретный профиль ПОР может ссылаться на первичный экземпляр или резервную копию группы объектов посредством разных тегов TAG_PRIMARY и TAG_BACKUP соответственно.
Если привязка к одной из реплик невозможна, ORB клиента может продолжить работу, попытавшись связаться с другой репликой в соответствии с правилом выбора следующей реплики, до получения успешного результата. Для клиента процесс привязки абсолютно прозрачен, для него это выглядит так, как будто он связывается с обыкновенным объектом CORBA.
Пример архитектуры
Чтобы поддерживать группы объектов и производить дополнительную обработку отказов, к CORBA необходимо добавить определенные компоненты. Одна из возможных архитектур отказоустойчивой версии CORBA приведена на рис. 9.14. Эта архитектура была применена в системе Eternal [305, 310], которая имеет отказоустойчивую инфраструктуру, построенную поверх системы надежных групповых коммуникаций Totem [304].
В этой архитектуре имеется несколько важных элементов. Наиболее важен менеджер репликации (replication manager), который отвечает за создание и управление группой реплицированных объектов. В принципе существует только один менеджер репликации, хотя для повышения отказоустойчивости его можно реплицировать.
Как мы установили, для клиента нет разницы между группой объектов и любым другим типом объекта CORBA. Для создания группы объектов клиент просто обращается к стандартной операции create_object, в данном случае менеджера репликации, указывая тип создаваемого объекта. Клиент пребывает в неведении о том, что на самом деле при этом создается группа объектов. Число реплик, создаваемых при запуске новой группы объектов, обычно задается системным значением по умолчанию. Менеджер репликации, кроме того, отвечает за замену реплики в случае ее отказа, гарантируя, таким образом, что число реплик не опустится ниже определенного минимума.
В архитектуре также представлены перехватчики уровня сообщений. В случае системы Eternal каждое обращение перехватывается и передается отдельному компоненту репликации, который поддерживает требуемую непротиворечивость групп объектов и гарантирует протоколирование сообщений на случай, если потребуется восстановление системы.
Обращения затем рассылаются остальным членам группы с использованием надежной, полностью упорядоченной групповой рассылки. В случае активной репликации запрос передается каждой из реплик объекта для обработки его каждым брокером ORB объектов. Однако в случае пассивной репликации запрос передается только брокеру ORB исходного экземпляра, в то время как остальные серверы просто протоколируют этот запрос на случай, если потребуется восстановление системы. Когда исходный экземпляр закончит обработку запроса, его состояние рассылается резервным копиям.
