Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл.11 ОС буклет.doc
Скачиваний:
10
Добавлен:
11.11.2018
Размер:
357.38 Кб
Скачать

11.2. Принципы разработки распределенных систем

В этом разделе будет речь идти о базовых технологиях разработки распределенных систем.

К ним принадлежат передачи сообщений и отдалены вызовы процедур (RPC).

11.2.1. Отдалены вызовы процедур

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

Заглушки

Основная идея, на которой основываются RPC, заключается в том, что клиент и сервер связаны не прямо, а через заглушки (stubs), — специальные программные модули, ответственные за сетевое взаимодействие. Рассмотрим, какие заглушки принимают участие в вызове отдаленной процедуры.

1. Во время обращения к отдаленной процедуре клиентский процесс использует локальные договоренности о вызове (аналогичные к вызову локальной процедуры), но в действительности обращается к клиентской заглушке (client stub), которая маршализует параметры и пересылает их серверу. Под маршализацией (marshaling) понимают упаковывание данных в формат, пригодный для передачи в сеть (с сетевым порядком байтов и тому подобное), под демаршализацией (demarshaling) - их обратное превращение.

2. На сервере данные принимает серверная заглушка (server stub), демаршализует параметры и вызывает отдаленную процедуру. Она также будет вызвана с локальными договоренностями о вызове, ее код не имеет информации о том, что вызов был отдаленным. После этого серверная заглушка маршализует возвращеные значения и передает их назад клиенту.

3. У клиента возвращеные значения демаршализует клиентская заглушка и передает клиентскому приложению аналогично к данным локальной процедуры.

Основной особенностью заглушек является то, что они имеют те же интерфейсы, что соответствующие процедуры. Клиентская заглушка выглядит для приложения-клиента как локальная процедура с одними и теми же параметрами; серверная заглушка выглядит для отдаленной процедуры как локальный клиент.

Язык IDL

Для автоматизации создания заглушек в RPC используют описание интерфейсов процедур специальным языком описи интерфейсов (Interface Definition Language, IDL).

Каждую процедуру, которую нужно вызывать отдаленно, необходимо описать на IDL, задав имя процедуры, количество и типы параметров, а также тип возвращения.

Файл с IDL-кодом, который содержит объявление таких процедур, обрабатывают IDL-компилятором, который генерирует заглушки для клиента и сервера.

Архитектура отдаленного вызова процедур показана на рис. 11.2.

Рис. 11.2 Отдаленный вызов процедур

Есть разные реализации IDL, которые воплощают общие принципы этого языка.

1. Процедуры на IDL объединяют в интерфейсы. В этом языке под интерфейсом понимают набор заглавий процедур и типов, связанных общим назначением. Интерфейс имеет имя и номер версии. Каждый интерфейс в результате обработки IDL-компилятором превращается в пару заглушек — клиентскую и серверную.

  1. IDL является декларативным языком, она предназначена исключительно для описания интерфейсов (фактически это сводится к описанию заглавий процедур и типов данных). Выполняемых операторов в ней нет.

  2. Для обеспечения связи между неоднородными системами в IDL должно быть зафиксирован набор базовых типов (например, может быть принято, что int всегда будет длиной 4 байта и тому подобное).

  3. Параметры процедур в IDL имеют режимы. Режим параметра определяет направление пересылки соответствующих данных. Для входных параметров данные передают от клиента серверу, для выходных — от сервера клиенту, для параметров смешанного режима — в обе стороны.