Организация работы сервера

advertisement
Лекция № 3. Связь
УЧЕБНЫЕ ВОПРСЫ
1. Удаленный вызов процедур
2. Обращение к удаленным объектам
3. Связь посредством сообщений
Удаленный вызов процедур (Remote Procedure Call,
RPC) – это метод в котором процесс, запущенный на
машине А, вызывает процедуру с машины В,
вызывающий процесс на машине А
приостанавливается, а выполнение вызванной
процедуры происходит на машине В.
Информация может быть передана от вызывающего
процесса к вызываемой процедуре через параметры
и возвращена процессу в виде результата
выполнения процедуры.
Рис. 1. Процесс удаленных вычислений с использованием RPC
При RPC происходят следующие действия:
1. Процедура клиента обычным образом вызывает
специальную функцию - клиентскую заглушку - по
формату аналогичную функции, расположенной на
удаленном сервере.
2. Клиентская заглушка создает сообщение и вызывает
локальную операционную систему.
3.Операционная система клиента пересылает
сообщение удаленной операционной системе.
4.Удаленная операционная система передает
сообщение серверной заглушке - это фрагмент кода,
который преобразует приходящие по сети запросы в
вызовы локальных процедур.
При RPC происходят следующие действия:
5.Серверная заглушка извлекает из сообщения
параметры и вызывает сервер.
6.Сервер выполняет вызов и возвращает результаты
заглушке.
7.Серверная заглушка запаковывает результаты в
сообщение и вызывает свою локальную операционную
систему.
8.Операционная система сервера пересылает
сообщение операционной системе клиента.
9.Операционная система клиента принимает сообщение
и передает его клиентской заглушке.
10. Заглушка извлекает результаты из сообщения и
передает их клиенту.
Упаковка параметров в сообщение носит название
маршалинга параметров (parameter marshaling).
Передача параметров в системах RPCможет
осуществляться двумя способами:
1. Передача параметров по значению
2. Передача параметров по ссылке
Передача параметров по значению
Клиентская заглушка извлекает параметры процедуры
и упаковывает их в сообщение. Она также помещает
туда имя или номер вызываемой в сообщении
процедуры, поскольку сервер может поддерживать
несколько разных процедур и ему следует указать, какая
из них потребовалась в данном случае.
Однако в больших распределенных системах обычно
присутствуют машины разных типов и необходимо
указывать дополнительную информацию о типах
параметров (например, целое или строка).
Передача параметров по ссылке
(копирование/восстановление)
Метод подразумевает необходимость копировать
объект (например, буфер), находящийся в памяти, в
сообщение и передать его на сервер. Серверная
заглушка может после этого вызвать сервер, передав
ему указатель на этот объект. Когда сервер закончит
работу, оригинальное сообщение будет отослано назад,
клиентской заглушке, которая скопирует объект клиенту.
Спецификация параметров и генерация заглушек
осуществляется с использованием языка определения
интерфейсов (Interface Definition Language, IDL).
Интерфейс, определенный IDL, компилируется затем в
заглушки клиента и сервера, а также в соответствующие
интерфейсы времени компиляции и времени
выполнения.
Рис. 2. Взаимодействие между клиентом и сервером в RPC традиционной схемы
(а). Взаимодействие с использованием асинхронного вызова RPC (б)
Вопрос №2
Ключевая особенность объекта состоит в том, что он
инкапсулирует данные, называемые состоянием
(state), и операции над этими данными, называемые
методами (methods).
Доступ к методам можно получить через интерфейс.
Объект может реализовывать множество интерфейсов.
Точно так же для данного описания интерфейса может
существовать несколько объектов, предоставляющих его
реализацию.
Четкое разделение позволяет помещать интерфейс на
одну машину при том, что сам объект находится на
другой.
Вопрос №2
Рис. 3. Обобщенная организация удаленных объектов с использованием
заместителя клиента
Вопрос №2
Алгоритм работы
1. Клиент выполняет привязку к распределенному
объекту, в адресное пространство клиента
загружается реализация интерфейса объекта,
называемая заместителем (рroху).
2. Заместитель выполняет маршалинг параметров в
сообщениях при обращении к методам и
демаршалинг данных из ответных сообщений,
содержащих результаты обращения к методам,
передавая их клиенту.
Вопрос №2
Алгоритм работы
3. Сами объекты находятся на сервере и предоставляют
необходимые клиентской машине интерфейсы.
Входящий запрос на обращение к методу сначала
попадает на серверную заглушку, называемую
скелетоном (skeleton).
4. Скелетон преобразует его в правильное обращение к
методу через интерфейс объекта, находящегося на
сервере. Серверная заглушка также отвечает за
маршалинг параметров в ответных сообщениях и их
пересылку заместителю клиента.
Вопрос №2
Объекты в распределенных системах существуют в
различных формах:
1. Объекты времени компиляции
2. Объекты времени выполнения
Вопрос №2
Объекты времени компиляции соответствуют
объектам выбранного языка программирования,
например Java, C++ или другого объектноориентированного языка, и являются экземплярами
класса. Класс — это описание абстрактного типа в виде
модуля, содержащего элементы данных и операций над
этими данными.
Достоинства – простота реализации.
Недостаток – зависимость от языка программирования.
Вопрос №2
Объекты времени выполнения
При работе с объектами времени исполнения тот
способ реализации обычно остается открытым.
Традиционный способ состоит в том, чтобы
использовать адаптер объектов (object adapter),
который послужит оболочкой (wrapper) реализации.
Реализация интерфейса регистрируется в адаптере,
который, в свою очередь, создает интерфейс для
удаленных обращений. Адаптер будет принимать
приходящие обращения и создавать для клиентов образ
удаленного объекта.
Вопрос №2
Сохранный объект (persistent object) — это объект,
который продолжает существовать, даже не находясь
постоянно в адресном пространстве серверного
процесса.
Нерезидентный объект (transient object) — это объект,
который существует, только пока сервер управляет им.
Когда сервер завершает работу, этот объект прекращает
существовать.
Вопрос №2
Системы, поддерживающими распределенные объекты,
предоставляют ссылки на объекты, уникальные в
пределах системы.
Клиент хранит ссылку на объект и перед обращением к
любому из методов объекта должен выполнить
привязку к этому объекту. Результатом привязки будет
заместитель, размещаемый в адресном пространстве
процесса и реализующий интерфейс с методами, к
которым обращается процесс.
Вопрос №2
При неявной привязке (implicit binding) клиенту
предоставляется простой механизм, позволяющий
напрямую запрашивать методы, используя только
ссылку на объект.
В случае явной привязке (explicit binding) клиент
должен до обращения к методам вызвать специальную
функцию для привязки к объекту.
Вопрос №2
Реализация ссылок на объекты заключается в
использовании сервера локализации (location server),
следящего за постоянной работой серверов, на которых
расположены объекты.
Ссылка на объект в результате должна содержать
сетевой адрес сервера локализации, а также
действующий в системе идентификатор сервера.
Вопрос №2
Существует статическое и динамическое удаленное
обращение к методам.
Статическое обращение требует, чтобы интерфейсы
объекта при разработке клиентского приложения были
известны. Также оно предполагает, что при изменении
интерфейса клиентское приложение перед
использованием новых интерфейсов будет
перекомпилировано.
Динамическое обращение означает, что во время
выполнения приложение выбирает, какой метод
удаленного объекта будет вызван.
Вопрос №3
Существует ряд способов организации взаимодействия
в РС:
1. сохранная связь (persistent communication)
2. нерезидентная связь (transient communication)
И та и другая может быть синхронной и асинхронной
Вопрос №3
При сохранной связи сообщение, предназначенное для
отсылки, хранится в коммуникационной системе до тех
пор, пока его не удастся передать получателю.
При нерезидентной связи сообщение хранится в
системе только в течение времени работы приложений,
которые отправляют и принимают это сообщение, т.е.
коммуникационный сервер, не имея возможности
передать сообщение следующему серверу или
получателю, просто уничтожает его.
Вопрос №3
Характерной чертой асинхронной связи (asynchronous
communication) является немедленное после отправки
письма продолжение работы отправителя.
В случае синхронной связи (synchronous communication)
отправитель блокируется до того момента, пока его
сообщение не будет сохранено в локальном буфере
принимающего хоста или доставлено реальному
получателю.
Вопрос №3
Рис. 4. Сохранная асинхронная связь (а), сохранная синхронная связь (б),
Вопрос №3
Рис. 4. нерезидентная асинхронная связь (в), нерезидентная синхронная
связь с синхронизацией по приему (г)
Вопрос №3
Рис. 4. нерезидентная синхронная связь с синхронизацией по доставке (д) и
нерезидентная синхронная связь с синхронизацией по ответу (е)
Вопрос №3
Примером нерезидентной связи на основе сообщений –
является интерфейс сокетов, введенный в UNIX,
разработанной в университете Беркли (Berkeley UNIX).
Концептуально сокет (socket) — это конечная точка
коммуникации. В эту точку приложение может
записывать данные, которые следует переслать по
базовой сети, и из этой точки оно может читать
приходящие данные.
Сокеты образуют абстракцию, лежащую поверх
реальной конечной точки сети, которая работает с
локальной операционной системой по некоторому
транспортному протоколу.
Вопрос №3
Примитивы сокетов для TCP/IP
Socket - Создать новую конечную точку коммуникации
Bind - Назначить сокету локальный адрес
Listen - Обозначить готовность к установке соединения
Accept - Заблокировать вызывающую сторону до
прибытия запроса о соединении
Connect - Совершить попытку установить соединение
Send - Послать через соединение некоторые данные
Receive - Принять из соединения некоторые данные
Close - Разорвать соединение
Вопрос №3
Рис. 5. Общая схема ориентированного на соединение
взаимодействия с использованием сокетов
Вопрос №2
Организация работы сервера
При вызове примитива socket вызывающий
процесс создает новую конечную точку для
некоторого транспортного протокола. Изнутри
создание конечной точки коммуникации
означает, что локальная операционная система
резервирует ресурсы для размещения
приходящих и отправляемых по некоторому
протоколу сообщений.
Вопрос №2
Организация работы сервера
Примитив bind выполняет привязку локального
адреса к только что созданному сокету. Привязка
сообщает операционной системе, что сервер
намерен получать сообщения только на
указанные адрес и порт.
Вопрос №2
Организация работы сервера
Примитив listen применяется только для
коммуникаций, ориентированных на
соединение. Это неблокирующий вызов,
требующий от локальной операционной системы
зарезервировать буфер для определенного
максимального количества соединений, которое
вызывающий процесс намерен поддерживать.
Вопрос №2
Организация работы сервера
Вызов примитива accept блокирует вызывающий
процесс до прихода запроса на соединение.
Когда этот запрос придет, локальная
операционная система создаст новый сокет с
теми же свойствами, что и у базового, и
возвратит его вызывающему процессу. Такой
подход позволяет серверу, например, разветвить
процесс, который впоследствии будет
поддерживать связь через новое соединение.
Сервер в это время может вернуться в состояние
ожидания следующего запроса на соединение с
базовым сокетом.
Вопрос №2
Организация работы клиента
Начинается с создания сокета при помощи
примитива socket, однако в явной привязке
сокета к локальному адресу нет необходимости,
поскольку операционная система может
динамически выделить порт при установлении
соединения.
Вопрос №2
Организация работы клиента
Примитив connect требует, чтобы вызывающий
процесс указал адрес транспортного уровня, на
который будет отправлен запрос на соединение.
Клиент блокируется до тех пор, пока соединение
не будет установлено.
Вопрос №2
После установления соединения стороны
начинают обмениваться информацией при
помощи примитивов write и read,
предназначенных для посылки и приема данных
соответственно. Наконец, закрытие соединения
при использовании сокетов симметрично и
может быть осуществлено как клиентом, так и
сервером путем вызова примитива close.
Вопрос №3
Сохранная связь на основе сообщений - реализуется как
системы очередей сообщений (message- queuing
systems), или ориентированный на сообщения
промежуточный уровень (Message-Oriented
Middleware, MOM).
Системы очередей сообщений создают расширенную
поддержку асинхронной сохранной связи.
Смысл этих систем заключается в том, что они
предоставляют возможность промежуточного хранения
сообщений, не требуя активности во время передачи
сообщений ни от отправителя, ни от получателя.
Вопрос №3
Модель очередей сообщений
Приложения общаются между собой путем помещения
сообщений в специальные очереди.
Эти сообщения передаются по цепочке
коммуникационных серверов и в конце концов
достигают места назначения, даже в том случае, если
получатель в момент отправки сообщения был
неактивен.
Каждое приложение имеет собственную очередь, в
которую могут посылать сообщения другие приложения.
Очередь может быть прочитана только связанным с ней
приложением, при этом несколько приложений могут
совместно использовать одну очередь.
Вопрос №3
Модель очередей сообщений
Отправитель может гарантировать только попадание
сообщения — рано или поздно — в очередь получателя.
Никакие гарантии относительно того, будет ли
сообщение действительно прочитано, невозможны, это
полностью определяется поведением получателя.
Подобная семантика определяет слабосвязанное
взаимодействие.
Вопрос №3
Базовый интерфейс очереди в системе очередей
сообщений
Put - Добавить сообщение в соответствующую очередь
Get - Приостановить работу до тех пор, пока в
соответствующей очереди не появятся сообщения,
затем извлечь первое сообщение
Poll - Проверить наличие сообщений в соответствующей
очереди, затем извлечь первое из них. Ничего не
блокировать
Notify - Вставить дескриптор функции (функции
обратного вызова (callback function), которая будет
вызвана при помещении сообщения в соответствующую
очередь
Download