Э. Таненбаум, М. ван Стеен - Распределённые системы (принципы и парадигмы) (1162619), страница 26
Текст из файла (страница 26)
Примеры действий, при которых обычно нет необходимостив ожиданрш ответа: перечисление денег с одного банковского счета на другой, добавление записей в базу данных, запуск удаленной службы, пакетная обработкаи множество других.Для обработки подобных случаев системы RPC могут предоставлять средствадля так называемого асинхронного вызова RPC (asynchronous RPC). При помощиэтих средств клиент получает возможность продолжить свою работу сразу послевыполнения запроса RPC. При асинхронном вызове RPC сервер немедленно поприходу запроса отсылает клиенту ответ, после чего вызывает запрошеннуюпроцедуру. Ответ служит подтверждением того, что сервер приступил к обработке RFC.
Клиент продолжает работу, снимая блокировку, сразу после получения2.2. Удаленный вызов процедур105от сервера этого подтверждения. На рис. 2.12, а приведен стандартный алгоритмвзаимодействия «запрос-ответ», а на рис. 2.12, б — алгоритм взаимодействия клиента и сервера в случае асинхронного вызова RPC.КлиентВызов\удаленной \процедуры \ЗапросСерверОжиданиеКлиент получения запросаОжидание результата/ Завершение/вызова/ Ответ\ВызовудаленнойпроцедурыЗавершениевызоваЗапросВызов локальнойВремя процедуры и возвращениерезультатаСерверПолучение запросаВызов локальнойпроцедурыВремя-аРис.
2 . 1 2 . Взаимодействие между клиентом и сервером в RPC традиционной схемы (а).Взаимодействие с использованием асинхронного вызова RPC (б)Асинхронные вызовы RPC также могут быть полезны в тех случаях, когдаответ будет послан, но клиент не готов просто ждать его, ничего не делая. Например, клиент может пожелать заранее выбрать сетевые адреса из набора хостов, с которыми вскоре будет связываться. В то время, пока служба именованиясоберет эти адреса, клиент может заняться другими вещами. В подобных случаях имеет смысл организовать сообщение между клиентом и сервером через дваасинхронных вызова RPC, как это показано на рис.
2.13. Сначала клиент вызывает сервер, чтобы передать ему список имен хостов, который следует подготовить, и продолжает свою работу, когда сервер подтверждает получение этогосписка. Второй вызов делает сервер, который вызывает клиента, чтобы передатьему найденные адреса. Комбинация из двух асинхронных вызовов RPC иногданазывается также отлолсенным синхронным вызовом RPC {deferred synchronousRPC).КлиентОжиданиеполучения запросаВызовудаленнойпроцедурыЗапрос^®Р^®РПрерывание клиентаЗавершениевызова „Возвращение^результатаПолучение запросаПодтверждениеВызов локальнойЧВремя-^процедуры Обращение к клиентупутем одностороннеговызова RPCРис. 2.13. Взаимодействие клиента и серверапосредством двух асинхронных вызовов RPC106Глава 2.
СвязьСледует отдельно отметить вариант асинхронного вызова RPC, реализующегося в тех случаях, когда клиент продолжает работу немедленно после посылкизапроса на сервер. Другими словами, клиент не ожидает от сервера подтверждения в получении запроса. Мы будем называть такие вызовы одиостороппимивызовами RPC {one-way RPC). Проблема такого подхода состоит в том, что приотсутствии гарантий надежности клиент не может быть точно уверен, что его запрос будет выполнен. Мы вернемся к этому вопросу в главе 7.2.2.4.
Пример — DCE RPCМеханизм удаленных вызовов процедур был тщательно адаптирован для использованрш в качестве основы систем промежуточного уровня и вообще распределенных систем. В этом пункте мы рассмотрим одну из специальных систем RPC:среду распределенных вычислений {Distributed Computing Environment, DCE), разработанную организацией OSF (Open Software Foundation), которая сейчас переименована в Open Group.
Система DCE RPC не настолько популярна, какнекоторые другие системы RPC, например Sun RPC. Однако DCE RPC — прекрасный представитель систем RPC. Спецификация DCE RPC адаптирована ксистеме распределенных вычислений на базе решений Microsoft. Кроме того, какмы увидим в следующем пункте, DCE RPC вдобавок иллюстрирует отношения между системами RPC и распределенными объектами. Мы начнсхМ с краткого введения в DCE, за которым последует обсуждение принципов работы DCERPC.Знакомство с DCEDCE — настоящая система промежуточного уровня, разработанная, чтобы абстрагировать существующие (сетевые) операционные системы от распределенныхприложений. Изначально она была разработана под UNIX, однако в настояы^еевремя существуют версрш DCE для всех распространенных операционных систем, включая VMS и Windows NT, а также операционных систем настольныхкомпьютеров.
Идея состоит в том, что покупатель может взять набор компьютеров, поставить программное обеспечение DCE и начать запускать распределенные приложения, и все это без каких-либо неполадок в работе существующих(нераспределенных) приложений. Хотя большая часть пакета DCE работаетв пространстве пользователя, в некоторых конфигурациях часть (отвечающая зараспределенную файловую систему) может быть добавлена и к ядру. Сама посебе организация Open Group только продает исходные тексты, а поставщикивстраивают их в свои системы.Модель программирования, лежащая в основе всей системы DCE, — это модель клиент-сервер, широко обсуждавшаяся в предыдущей главе.
Процессыпользователей действуют как клиенты, вызывающие удаленные службы, предоставляемые серверными процессами. Некоторые из этих служб являются составными частями DCE, другие же принадлежат к приложениям и написаны прикладными программистами. Вся связь между клиентами и серверами осуществляетсяпосредством RPC.2.2. Удаленный вызов процедур107Существуют службы, которые сами по себе образуют часть DCE.
Служба распределеппьих файлов {distributed file service) представляет собой всемирную файловую систему, предоставляющую прозрачные методы доступа к любому файлусистемы одинаковым образом. Она может быть построена поверх базовых файловых систем хостов или работать независимо от них. Слулсба каталогов{directory service) используется для отслеживания местонахождения любого изресурсов системы. В число этих ресурсов входят машины, принтеры, серверы,данные и многое другое. Географически они могут быть распределены по всемумиру.
Служба каталогов позволяет процессу запрашивать ресурсы, не задумываясь о том, где они находятся, если это не необходимо для процесса. Служба защиты {security seivice) позволяет защищать ресурсы любого типа, кроме того, получение некоторых данных может быть открыто только тем, кому это разрешено.И наконец, служба распределеииого времени {distributed time seivice) позволяетподдерживать глобальную синхронизацию часов различных машин. Как мы увидим в следующей главе, существование некоторого представления о глобальномвремени сильно упрощает гарантию целостности при параллельной работе в распределенных системах.Задачи DCE RPCЗадачи систем DCE RPC вполне традиционны. Они позволяют клиенту получить доступ к удаленной службе простым вызовом локальной процедуры.
Этотинтерфейс дает возможность писать клиентские (то есть прикладные) программы простым, хорошо знакомым большинству программистов способом. Также онупрощает запуск в распределенной среде больших объемов существующего кода сминимальными изменениями или без них.Самое важное для системы RPC — это скрыть все возможные детали от клиента и до некоторой степени от сервера. Для начала система RPC может автоматически определить необходимый сервер и установить связь между клиентом исервером.
Обычно это называется привязкой {binding). Кроме того, она можетуправлять транспортировкой сообщений в обе стороны, а также, если в этом естьнеобходргмость, их дроблением и последующей сборкой, например, если один изпараметров сообщения является большим массивом. И наконец, система RFCможет автоматически отслеживать преобразование типов данных между клиентом и сервером, даже если они работают на системах с разной архитектурой, которые имеют различный порядок следования байт.В заключение скажем несколько слов о способности систем RFC скрыватьдетали. Клиент и сервер могут быть почти независимыми друг от друга. Клиентможет быть написан на Java, а сервер на С или наоборот.
Клиент и сервер могутработать на разных платформах и использовать различные операционные системы. Поддерживается также многообразие сетевых протоколов и представленийданных, все это — без какого-либо вмешательства в клиент или сервер.Написание клиента и сервераСистема DCE RFC состоит из множества компонентов.
В нее входят, в частности, языки, библиотеки, программы-демоны и утилиты. Все это делает возмож-108Глава 2. Связьным создание разнообразных клиентов и серверов. В этом пункте мы опргшемчасти этих программ и то, как они стыкуются друг с другом. Общий процесс написания и использования клиента и сервера суммирован на рис. 2.14.[Uuidgen ]Файл определенияинтерфейса(компилятор IDL)(Компилятор^(Компилятор с)Объектный файлклиентскойзаглушкиОбъектный файлсервернойзаглушкиОбъектныйфайл сервераБиблиотекавременивыполненияБиблиотекавременивыполнениякомпоновщик^(компилятор с)(Компилятор с)Объектныйфайл клиента(компоновщикИсполняемыйфайл клиентаИсполняемыйфайл сервераРис.