- •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.3.2. Связь
В отличие от CORBA и DCOM Globe не предоставляет никаких других методов связи кроме синхронных обращений к методам. Когда обращение завершается, то есть когда происходит возвращение результата обращения (обращение при этом выглядит как вызов метода через локальный интерфейс), всякая деятельность внутри распределенного разделяемого объекта прекращается, не считая деятельности, связанной с другими вызовами. В этом смысле объекты Globe считаются пассивными (passive).
Чтобы понять, что такое пассивный объект, рассмотрим распределенный объект, совместно используемый тремя процессами (рис. 9.26). Процессы В и С имеют реплики своего состояния, представленные в виде заштрихованных подобъ-ектов семантики (Sem). Процесс Л не имеет не только состояния, он не имеет даже подобъекта семантики. Локальный объект в адресном пространстве процесса А соответствует традиционной клиентской заглушке, или заместителю.
Предположим, процесс Л обращается к объекту. В соответствие с простым сценарием репликации этот запрос будет передан соответственно процессам В и С, на что указывает траектория в виде сплошной линии. Когда запрос достигнет подобъекта связи (Comm), скажем, процесса Д будет активизирован поток выполнения для обработки запроса. В конце своей работы этот поток выполнения обратится к подобъекту семантики и вернет процессу Л результат в отдельном сообщении. Аналогичная деятельность происходит и в процессе С.
Пока происходит обращение, поток выполнения процесса А который собственно и выполняет вызов метода, блокируется. После возвращения результатов из других процессов в подобъект репликации (Repl) процесса Л блокировка с потока снимается, и он возобновляет выполнение. Если мы предположим, что в этот момент другие обращения не выполняются, то как только управление возвратится приложению Л у от которого исходило обращение, в локальных объектах, соответствующих этому распределенному разделяемому объекту, какая-либо деятельность прекращается.
Globe не поддерживает механизмы отката для клиентских приложений. Подобная поддержка может быть предоставлена только в том случае, если активизация потока выполнения была вызвана запросом, допускающим откат. Однако откаты могут привести к непредсказуемому поведению потока выполнения. При наличии реплик, которые должны сохранять непротиворечивость группы тесно взаимодействующих подобъектов репликации, такое поведение может быть опасно. Это один из примеров того, что разработчики Globe предпочитают богатству средств простоту. Вообще говоря, простота была основной целью проектирования Globe.
9.3.3. Процессы
Хотя в Globe между серверами и клиентами нет принципиальной разницы, часто при организации распределенных разделяемых объектов полезно эту грань провести. Клиентские процессы инициируют обращения к объектам, в то время как серверные в основном реагируют на эти обращения. Далее мы уточним эту разницу.
Клиент Globe
Клиент Globe — это процесс, который относится к распределенному разделяемому объекту и обращается к этому объекту, вызывая доступные методы через интерфейс подобъекта управления (Ctrl), как показано на рис. 9.26. Процесс А в данном случае представляет собой типичный пример клиента Globe, не имеющего состояния, но соединенного с репликами, у которых состояние имеется.
Во многих случаях клиент Globe относительно прост, в том смысле, что он даже не имеет подобъекта семантики. Все его обращения после маршалинга немедленно передаются репликам, выступающим в качестве серверов. Эта модель очень похожа на заместители в CORBA и также может быть использована в качестве основы для интеграции распределенных разделяемых объектов в системах, подобных CORBA [214]. Однако в Globe возможна также настройка клиентов в соответствии с подходом DCOM и RMI языка Java. Такая настройка может потребоваться, например, для того, чтобы позволить клиенту кэшировать результаты обращений.
Стандартный способ придания клиентам CORBA новых свойств — использование перехватчиков. В DCOM подобная настройка, которая производится путем реализации на клиенте выделенного заместителя, возможна благодаря поддержке пользовательского маршалинга. В Globe распределенный разделяемый объект обычно предоставляет несколько реализаций локальных объектов. Эти реализации содержатся в хранилищах классов. Клиент сам решает, какую реализацию ему использовать.
Когда клиент выполняет привязку к объекту, он получает несколько контактных адресов, соответствующих одной или нескольким реализациям локальных объектов, которые этот клиент может загрузить. Возможно также, что контактный адрес определяет только протокол связи, который должен использовать клиент. Если клиент соблюдает правила указанного протокола, он может задействовать любую реализацию, которую захочет. В частности, при желании клиент может ограничиться исключительно теми реализациями, которые имеются в доверенном хранилище классов.
Такая гибкость достигается в Globe немалой ценой. Приходится создавать реализации для разных локальных объектов и иногда для разных операционных систем и машинных архитектур. Некоторые из проблем, связанных с гетерогенностью, можно решить путем использования переносимых реализаций, написанных на интерпретируемых языках, таких как Java.
Сервер Globe
В противоположность клиенту сервер системы Globe — это процесс, который способен только обрабатывать запросы с обращениями, приходящие к нему по сети. Другими словами (см. рис. 9.26), он не в состоянии вызывать методы через интерфейс, предоставляемый подобъектом управления (Ctrl); процессы В и С — это примеры серверов Globe.
В Globe имеется также сервер объектов, поддерживающий распределенные разделяемые объекты. Такой сервер предоставляет базовую функциональность, которая требуется локальному объекту распределенного разделяемого объекта. Процессы могут связаться с сервером объектов Globe через интерфейс, методы которого перечислены в табл. 9.14. В сущности, каждый сервер объектов Globe представляется для своих клиентов просто еще одним распределенным разделяемым объектом.
Одна из важных операций сервера — привязка к данному распределенному разделяемому объекту с помощью метода Bind. При этом серверу передается дескриптор объекта и критерии выбора контактного адреса (при наличии нескольких контактных адресов). Так, сервер может выбрать произвольный адрес или адрес, обладающий определенными свойствами.
Привязка сервера к объекту является идемпотентной операцией; если привязка уже выполнена, не происходит ничего. Если предполагается загрузка сервером другого локального объекта, относящегося к распределенному разделяемому объекту, привязка к которому уже выполнена, вызывается метод AddBinding.
Сервер объектов Globe также содержит базовые средства создания распределенных разделяемых объектов путем создания локальных объектов. Создание производится вызовом метода CreateLR с указанием той реализации (то есть объекта класса), которую может загрузить сервер. Когда объект класса загружен, сервер создает по объекту класса новый локальный объект и инициализирует его. Обычно инициализация также предполагает, что контактный адрес нового объекта становится доступным службе локализации Globe. Таким образом, с этого момента к объекту можно выполнять привязку других процессов.
Метод RemoveLR просто удаляет определенный локальный объект с сервера объектов. Обычно эта операция не вызывается никогда. Вместо этого сервер, как правило, получает указание разорвать привязку к распределенному разделяемому объекту методом Unbi ndDSO. В результате разрыва привязки все локальные объекты данного объекта удаляются с сервера, таким образом, объект сам очищает занимаемое им место.
Отметим, что разрыв привязки вовсе не обязательно означает ликвидацию объекта. Во многих случаях к нему могут быть привязаны другие процессы, и пока объект не уничтожен явным образом, он продолжает существовать. Подобно CORBA, но в противоположность DCOM, Globe поддерживает как нерезидентные, так и сохранные объекты.
И, наконец, существует несколько операций для просмотра привязок серверов объектов и состояния каждого из локальных объектов.
В Globe существует два способа привязки сервера объектов к распределенному разделяемому объекту. Во-первых, привязка может повлечь за собой создание сохранного локального объекта. Сохранный локальный объект (persistent local object) — это локальный объект, для которого сервер объектов Globe будет выполнять маршалинг его состояния и записывать это состояние на устройство длительного хранения. Сохранение подобного локального объекта обычно является частью процесса корректного отключения сервера. Когда впоследствии сервер вновь запускается, он предварительно восстанавливает сохраненные ранее локальные объекты. С другой стороны, в результате привязки может образоваться нерезидентный локальный объект (transient local object), который никогда не записывается на устройства длительного хранения сервера объектов. Таким образом, по окончании работы сервера нерезидентные локальные объекты полностью уничтожаются.
Привязка может потребовать создания сервером объектов контактного адреса, соответствующего установленному локальному объекту. Такой адрес позволяет другим процессам выполнять привязку к удаленному объекту через локальный объект, находящийся на сервере объектов. В подобных случаях сервер объектов будет сам регистрировать контактные адреса в службе локализации Globe и обрабатывать входящие запросы других процессов так, как описано ниже.
