Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
440-620.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.13 Mб
Скачать

9.1.5. Синхронизация

Две наиболее важные службы, облегчающие синхронизацию в CORBA, — это служба параллельного доступа и служба транзакций. Эти две службы работают совместно, реализуя распределенные и вложенные транзакции путем двухфазной блокировки.

В основе транзакций в CORBA лежит следующая модель. Транзакция ини­циируется клиентом и содержит последовательность обращений к объектам. Ко­гда соответствующий объект вызывается в первый раз, он автоматически стано­вится частью транзакции. При этом сервер объекта уведомляется о том, что теперь он участвует в транзакции. Эта информация неявно передается серверу при обращении к объекту.

Частью транзакции могут стать объекты двух основных типов. Восстанови­мый объект (recoverable object) — это объект, выполняемый сервером объектов, который способен включиться в протокол двухфазного подтверждения. В част­ности, серверы восстановимых объектов в состоянии обработать прерывание транзакции с откатом всех изменений, внесенных в результате обращения к од­ному из восстановимых объектов. Однако в ходе транзакции может осуществ­ляться и обращение к объектам, которые невозможно вернуть в состояние, пред­шествующее началу транзакции. Конкретно — это транзакционные объекты (trans­actional objects), выполняемые серверами, которые не могут включиться в прото­кол двухфазного подтверждения транзакций. Транзакционные объекты обычно предназначены только для чтения.

Таким образом, понятно, что транзакции в CORBA подобны распределенным транзакциям и их протоколам, которые мы обсуждали в главах 5 и 7.

Точно так же и службы блокировок, предоставляемые службой параллельно­го доступа, — это именно то, что мы ожидаем увидеть. На практике служба реа­лизуется при помощи центрального менеджера блокировок, приемы распреде­ленной блокировки не применяются. Служба отличает блокировки записи от блокировок чтения и способна поддерживать несколько степеней детализации блокировки, что часто бывает нужно при работе с базами данных. Так, например, она в состоянии отличать блокировку всей таблицы от блокировки одной запи­си. Информацию о степенях блокировки можно получить в [160, 177]

9.1.6. Кэширование и репликация

CORBA не поддерживает обобщенных кэширования и репликации. В третью версию CORBA, как мы увидим далее, включена только возможность реплика­ции объектов в целях отказоустойчивости. Отсутствие поддержки обобщенной репликации означает, что в случае необходимости разработчики приложений в плане поддержания репликация могут прибегнуть к специальным мерам. В боль­шинстве случаев эти меры основаны на использовании перехватчиков.

Давайте рассмотрим один из примеров того, как для повышения произво­дительности в CORBA можно включить возможность репликации. Эта задача решается в системе CASCADE. В CASCADE цель состоит в предоставлении обобщенной масштабируемой схемы, позволяющей кэшировать любой объект CORBA [102]. CASCADE поддерживает службу кэширования, реализуемую с по­мощью по возможности большого набора серверов объектов, каждый из которых ссылается на так называемый доменный сервер кэширования (Domain Caching Server, DCS). Каждый сервер DCS — это сервер объектов, работающий в ORB системы CORBA. Коллекция серверов DCS может быть распределена по гло­бальной сети, такой как Интернет.

Кэшируемые копии одного и того же объекта образуют иерархию. Подразу­мевается, что одиночный клиент, например владелец объекта, может зарегистри­ровать свой объект на локальном сервере DCS. Этот DCS становится корнем иерархии. Другие клиенты также могут потребовать у своих локальных серверов DCS кэшировать копию этого объекта. Для этого DCS сначала присоединяется к текущей иерархии тех DCS, которые уже кэшируют этот объект.

CASCADE поддерживает клиентскую модель непротиворечивости данных, которую мы обсуждали в главе 6. Кроме того, он поддерживает тотальное упоря­дочивание, которое гарантирует, что все изменения повсюду будут производить­ся в одном и том же порядке. Каждый из объектов может иметь собственную мо­дель непротиворечивости, но общесистемных правил поддержания кэшируемых объектов не существует. Как мы показали в главе 6, при репликации с целью по­вышения производительности важно, чтобы одновременно поддерживались раз­ные модели непротиворечивости, поскольку применимость моделей в значитель­ной степени зависит от шаблонов обращения и доступа к объекту. CASCADE удовлетворяет этим требованиям.

В качестве службы CORBA система CASCADE тесно связана с перехватчи­ками. Со стороны клиента система CASCADE фактически невидима, все вопросы, связанные с непротиворечивостью, скрыты за интерфейсами, которые предо­ставляют объекты. Единственный случай, когда клиент получает явный доступ к CASCADE, — обращение к своему локальному серверу DCS с запросом о нача­ле кэширования конкретного объекта. Когда в дальнейшем к этому объекту про­исходят обращения, они перехватываются клиентским брокером ORB и пересы­лаются DCS.

В зависимости от модели непротиворечивости объекта, указанного в ссылке, к запросу перед его отправкой в DCS добавляется дополнительная информация. Так, например, если клиент нуждается в непротиворечивости чтения собствен­ных записей, необходимо сообщить объекту, какую последнюю операцию записи видел клиент.

Обобщенную организацию DCS иллюстрирует рис. 9.12. DCS управляет не­сколькими копиями объекта. Копия объекта состоит из состояния и реализаций операций, производимых в этом состоянии. В терминологии CORBA, DCS име­ет того же слугу, что и исходная копия объекта. Перехватчик, стоящий за DCS, перехватывает входящие обращения и выделяет из них определенную инфор­мацию, например, добавленную перехватчиком клиента. Запрос после этого пе­ресылается управляющему модулю обращений к методу, который однозначно связан с объектом, указанным в ссылке. Как показано на рисунке, каждый кэши-рованный объект имеет собственный объект правил, который содержит специфи­ческую информацию об управлении обращениями к методу. Дополнительная информация, извлеченная перехватчиками, передается в этот объект правил от­дельно.

Хотя CASCADE и позволяет более или менее прозрачно кэшировать серверы объектов, однако похоже, что для реализации службы кэширования в CORBA необходимы дополнительные усилия. Хотя при необходимости изменять обра­щения для реализации подобной услуги можно с помощью перехватчиков, ника­кой другой поддержки кэширования CORBA не предоставляет.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]