Слайд 1Вызовы удаленных процедур
Судаков А.А.
“Параллельные и распределенные вычисления” Лекция 5
Слайд 2План
Что такое RPC?
SUN RPC
XML RPC
Распределенные объектные системы (CORBA, COM)
Слайд 3RPC
Вызов удаленных процедур – программный интерфейс, который позволяет вызывать подпрограммы
на удаленных машинах в сети
сеть
Машина 1
Вызов функции
proc(int a, char*
b)
Машина 2
Выполнение функции
proc(int a, char* b)
Слайд 4Для чего нужно?
Не всегда есть возможность запускать программу на другой
машине
Работа в режиме ядра
Запуск программы может оказаться очень медленной операцией
Синхронизация
содержимого файла
Необходим стандартный подход для создания распределенных приложений
Независимо созданные программы должны работать друг с другом
Слайд 5Промежуточное программное обеспечение
RPC использует middleware для того, чтобы скрыть детали
реализации от пользователя
Программа-клиент
Программа-клиент
Программа-клиент
middleware
Машина 1
Машина 2
Машина 3
middleware
middleware
сервер
сервер
сервер
Слайд 6RPC middleware
RPC middleware является надстройкой над клиент- серверной платформой
Программа, которая
вызывает удаленную функцию является клиентом
Сервера, которые выполняют функции работают прозрачно
для клиентов
Существуют вспомогательные сервера
Слайд 7Преимущества
Преимущества
Упрощение интерфейса и разработки
Стандартизация
Параллелизм на уровне процедур
Недостатки
Сложность программного обеспечения
Слайд 8Где используются?
Основной механизм для создания распределенных операционных систем
Основной механизм для
создания распределенных файловых систем
Часто используется для прикладных распределенных программ
Слайд 9Какие существуют реализации?
SUN RPC
XML RPC
Microsoft RPC
Слайд 10SUN RPC
Начало 1980-х годов Open Network Computing (ONC) фирмы SUN
(http://www.ietf.org/html.charters/oncrpc-charter.html )
Создание распределенного программного обеспечения
Протоколы
Библиотеки, вспомогательные утилиты и инструменты
Слайд 11Основные определения
Процедура характеризуется
номером программы
номером версии
номером функции
Клиент – программа, которая
вызывает удаленную функцию
Сервер – программа, которая выполняет запрос клиента
Определитель транспорта
– сервер, который ставит в соответствие номеру программы и номеру версии порт транспортного протокола
Слайд 12Схема запроса
Машина 1 (клиент)
Машина 2 (сервер)
Вызов функции 1 программы 1,
версии 1 на машине 2
Обращение к машине 2 порт 1234.
Вызов функции 1 и получение результата
Portmap порт 111
Запрос на сервер какой номер порта у программы 1 версии 1?
Ответ порт 1234
Сервер 1,1 слушает порт 1234
Обращение к библиотеке
Выполнение функции 1 и возврат результата
Слайд 13Вызов удаленной процедуры клиентом
Сериализация агрументов
XDR – extended data representation
XDR_int(a), XDR_string(b)
Int r =proc(int a, char* b)
Определение порта и транспортного протокола
сервера (udp/1234)
Передача аргументов не сервер
Ожидание результата
Прием результата от сервера
Десериализация результата
XDR – extended data representation
XDR_int(r)
Использование результата
Передача номера процедуры
Авторизация
Слайд 14Выполнение процедуры сервером
Ожидание запросов (udp/1234)
Регистрация в определителе транспорта и получение
номера порта (udp/1234)
авторизация
Прием номера процедуры
Прием аргументов
Десериализация аргументов
XDR_int, XDR_string
Выполнение процедуры
Int
proc(int a, char* c)
Сериализация результата
XDR_int
Передача результата
Слайд 15Синхронное и асинхронное выполнение
Вызов процедуры
Синхронный
Ожидание результатов
Получение результатов
Продолжение работы
Асинхронный
Вызов процедуры
Продолжение работы
Прерывание
работы
Получение результатов
Продолжение работы
Слайд 16Синхронное выполнение
Преимущества
Простота реализации программы
Недостатки
Затрачивается время на ожидание
Слайд 17Асинхронное выполнение
Преимущества
Эффективное использование процессорного времени
Недостатки
Сложность реализации программ
Слайд 18Обратный вызов
Клиент вызывает функцию на сервере и продолжает работу
Сервер после
выполнения функции вызывает функцию на клиенте
И сервер и клиент являются
агентами
Слайд 19Авторизация
AUTH_NONE отсутствует
AUTH_SYS по идентификатору пользователя
AUTH_DES по зашифрованному имени машины
Слайд 21Разработка RPC программ
Для разработки распределенных программ достаточно знать только интерфейсы
(типы аргументов и возвращаемые значения)
Можно ввести специальный язык описания интерфейсов
(rpcgen -> C/C++)
Возможности программ можно наращивать постепенно добавляя новые удаленные процедуры на разных серверах
Слайд 22Язык описания интерфейсов (rpcgen)
program MYPROG {
version MYVER {
int MYPROC (string)
= 1;
} = 1;
} = 0x2000000;
Все интерфейсы взаимодействия создаются автоматически
На
сервере пользователь должен определить функцию
int* myproc_1 (char**) {…}
На клиенте вызов выполняется
char* str = “Привет!”;
CLIENT* cl=clnt_create(…);
res = myproc_1(&str, cl)
Слайд 23Другие недостатки SUN RPC
Нет прозрачности расположения
Нужно явно указывать, где находится
сервер
Нет простой системы имен для нахождения серверов по их функциям
Только
процедурная ориентированность
Не рассчитано на объектно-ориентрованные программы (нет наследования, полиморфизма)
Единственный стандартный сервер – portmap
Для распределенных приложений часто нужно выполнять синхронизацию, блокировки, транзакции
Слабая система безопасности
Слайд 24CORBA – common object relations broker architecture
Слайд 25Объектно-ориентированный подход
Объект
структура данных (свойств)
имеет уникальное имя
определены операции (методы),
которые с этим (для этого) объекта можно выполнять
Инкапсуляция – вся
сложность объекта скрыта от внешнего мира, внешнему миру доступны только имя и интерфейсы (методы)
Классификация – объекты с одинаковой структурой и методами принадлежат к одному классу
Наследование – усложнение классов путем добавления новых свойств и методов
Полиморфизм – в зависимости от контекста методы с одинаковыми именами могут выполнять разные действия
Слайд 26Распределенные объектные системы
Объекты существуют в разных программах или даже на
разных машинах
Объект из одной программы может вызывать методы объекта, который
существует в другой программе
сеть
Машина 1
Вызов функции
Remote.proc(int a, char* b)
Машина 2
Обект remote
Выполнение функции
Remote.proc(int a, char* b)
Слайд 27CORBA
Стандарт для разработки распределенных объектно-ориентированных программ
Независим от аппаратной и программной
платформы
Разработано Object Management Group (OMG) http://www.omg.org
CORBA 1.0, 2.0, 3.0
Слайд 28Преимущества
Стандарт
Рассчитан на гетерогенность
Совместим со многими языками программирования
Обеспечивается безопасность и надежность
Прозрачность
расположения, конкуренции, параллелизма, миграции
Объектно-ориентирован
Параллелизм на уровне объектов
Слайд 29Реализации
MICO http://www.mico.org/
DCOM http://www.microsoft.com
Orbacus
OmniORB
TAO (The ACE ORB)
ORBit
Слайд 30Структура
ORB – object relations broker middleware
Клиентский
объект
Клиентский
объект
Серверный
объект
Серверный
объект
Служба
имен
Маклерская
служба
Служба
блокировок
Стандартные
интерфейсы
Стандартные
реализации
Слайд 31ORB – object relations broker
Выполняет все функции взаимодействия между объектами
Скрывает
детали передачи данных (сетевое программирование, сериализация, вызовы удаленных процедур )
Выполняет
поиск объектов
Слайд 32
Взаимодействие между объектами
Клиент (x86, Windows, Java)
Сервер (ia64, UNIX, C++)
Клиентский объект
вызывает
метод
серверного объекта
Прокси (дескриптор)
серверного объекта
Серверный объект
Выполняет метод,
вызванный
клиентом
Адаптор серверного объекта
ORB
ORB
Inernet Inter-ORB protocol
(IIOP)
СТАНДАРТИЗИРОВАНО И НЕ ЗАСИСИТ
ОТ АППАРАТНЫХ И ПРГРАММНЫХ ПЛАТФОРМ
Слайд 33Прокси и адаптор
Прокси – интерфейс к удаленному объекту, который создается
на локальной машине
Адаптор – адаптирует особенности реализации серверного объекта к
стандарту
Клиент и сервер взаимодействуют через прокси и адапторы
Прокси и адаптеры выполняют сериализацию и десериализацию, вызовы удаленных процедур, обработку ошибок – скрывают сложности протокола
Слайд 34Взаимодействие между объектами (клиент)
Клиент – обращение к удаленному объекту
Получение IOR
– Interoparable object reference
(дескриптор, объектная ссылка, прокси) удаленного объекта
Приведение
IOR к типу удаленного объекта
(создание локального представителя)
Вызов метода удаленного объекта через локальный прокси
Получение результата
Обращение к ORB для поиска объекта
по какой-либо информации
Обращение к ORB для передачи аргументов удаленному объект
ORB возвращает результат
Обращение к ORB для активизации удаленного объекта
Инициализация брокера (ORB)
Слайд 35Объектная ссылка (IOR)
Содержит следующую информацию
местоположение объекта
сетевое имя машины
номер
порта транспортного протокола
Ключ объекта (значение, которое однозначно дает возможность «воссоздать»
интерфейс удаленного объекта)
Дополнительная информация
Авторизация
Слайд 36Взаимодействие между объектами (сервер)
Сервер – ожидание и выполнение вызовов
Инициализация брокера
(ORB)
Создание POA - Portable object adaptor (Транслятор особенностей реализации объекта
в стандартный протокол обмена данными)
Регистрация объекта в
распределенной системе
Выполнение вызовов клиентов
Обращение к ORB
Обращение к ORB
Обращение к ORB
Слайд 37Службы
Служба имен – нахождение серверных объектов по именам (преобразование имени
объекта в объектную ссылку)
Маклерская служба – нахождение серверных объектов по
описаниям и интерфейсам (объектная ссылка возвращается в соответствии с возможностями объектов)
Слайд 38Поиск объектов
Прямая передача объектной ссылки
Серверный объект публикует свою объектную ссылку
(www, ftp, NFS)
Клиент должен «знать» как ее получить
Поиск в службе
имен
Серверный объект регистрируется в службе имен (объектной ссылке взаимнооднозначно соответствует имя)
Клиент запрашивает службу имен для получения объектной ссылки по имени
Поиск по экспортируемым интерфейсам
Серверный объект «рекламирует» свои возможности в маклерской службе (объектной ссылке соответствуют несколько интерфейсов)
Клиент получает объектную ссылку в соответствии с необходимым интерфейсом
Слайд 39Служба имен
Хранятся пары имя-значение
Иерархическая структура
Слайд 40Поиск в службе имен
Получаем ссылку на имя группы
Последовательно получаем ссылки
на элементы более низкого уровня
Слайд 41Хранилища реализаций и интерфейсов
Базы данных, которые содержат информацию, достаточную для
запуска серверных приложений (когда не доступен IOR)
Хранилище реализаций – полный
путь к программе, которую нужно запустить для создания нужного объекта (сервер)
Хранилище интерфейсов – информация о том для какого интерфейса к какому серверу обращаться (клиент)
Необходимо лишь указать, на какой машине и каком порту работает хранилище реализаций и служба имен
Слайд 44Компонентная модель
Машина 1
Компонент 1
Машина 1
Компонент 2
Машина 2
Компонент 3
Машина 3
Распределенное приложение
(программа), которое при необходимости выполнения некоторых действий обращается к разным
своим компонентам, работающим на разных машинах
Пользователь
Слайд 45Пример запуска CORBA объекта
CORBA
Click
Слайд 46Язык описания интерфейса
Для разработки распределенных программ достаточно знать только интерфейсы
(имена объектов и прототипы функций, которые необходимо для них вызывать)
Существует
специальный язык для описания интерфейсов – IDL (interface description language)
При компиляции файла описания интерфейса создаются файлы с каркасными реализациями на нужном языке программирования (Java, C, C++, Ada…)
Пользователь использует каркасные классы для встраивания в них логической части
Слайд 47IDL -> C++
IDL
interface adding_machine{
void add(in unsigned long X);
void subtract(in unsigned
long X);
long result();
};
Компиляция
idl adding_machine.idl
Создаются каркасные классы
class adding_machine : virtual public
CORBA::Object{…}
class adding_machine_stub : virtual public adding_machine{…}
class adding_machine_skel : virtual public adding_machine{…}
Пользователь определяет реализацию, как производные классы от какркасных
class adding_machine_impl : virtual public adding_machine_skel{
void add(in unsigned long X){…}
}
Слайд 48Особенности
Стандарт определяет большинство особенностей, но все же некоторые вещи остаются
на усмотрения разработчиков
Хотя созданные приложения и будут взаимодействовать корректно, особенности
запуска, инсталляции и др. может существенным образом отличаться
Слайд 49Примеры
Десктоп-системы (GNOME, KDE, MS Windows DCOM)
Java приложения (сервлеты, Java Beans,
Java RMI)
Системы банк-клиент