Удаленный вызов процедур/методов
oRemote procedure call (RPC)/Remote method invocation (RMI)
Подготовка
•Интерфейс для удаленного вызова описывается специальным образом (помечается специальными аннотациями)
•На основе интерфейса генерируются клиентская и серверная заглушки
(client stub, server stub)
•Клиентская заглушка предназначена работать в рамках процесса клиента и получать обращения от клиента, передавая их дальше в виде сообщений процессу сервера, получая от него результат и возвращая его клиенту
•Серверная заглушка предназначена работать в рамках процесса сервера, получая сообщения от клиентской заглушки и преобразуя их в вызовы сервера, затем передавая результат обратно клиентской заглушке
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
11 |
Удаленный вызов процедур/методов
Выполнение вызова
•Вызов клиентской заглушки
•Клиентская заглушка
•Привязка (binding) Определение адреса сервера
•Маршалинг аргументов Упаковка в структуру
•Сериализация аргументов Упаковка в поток байтов
•Передача сообщения с вызовом
•Серверная заглушка
•Десериализация аргументов
•Демаршалинг аргументов
•Вызов сервера
•Получение результата
•Маршалинг результата
•Сериализация результата
•Передача сообщения с результатом
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
12 |
Особенности вызова методов RMI
•Серверная заглушка обычно называется каркасом (skeleton)
•Один объект сервер может обслуживать много операций
•Нужна поддержка передачи аргументов-объектов между процессами
•Если объект – значение (например, строка), он сериализуется
•Если важна идентичность объекта (например, сервер может вызвать в нем метод), создается и передается вне-процессная ссылка на него Например, в рамках Java, передается байт-код клиентской заглушки этого объекта
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
13 |
Асинхронные обращения
•Чаще всего реализуются с помощью очередей сообщений
•Обращение соответствует помещению сообщения, содержащего аргументы обращения, во входную очередь сервера
•Если нужно получить результат, он часто обертывается в объект Future<T>
•boolean isReady() – возвращает true, когда результат получен
•T getResult() – возвращает результат, после того, как он получен
•Очереди могут поддерживать дополнительные возможности
•Приоритезация сообщений
•Сохранность сообщений
•Надежность доставки
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
14 |
Именование
•Присваивание идентификаторов ресурсам в распределенной среде
•Организация поиска ресурсов по именам и наборам характеристик (для привязки)
•Служба именования (naming service)
•Служба каталогов/директорий (directory service)
•Организация поиска мобильных ресурсов
•Сборка мусора – корректное удаление ссылок на отключенные ресурсы
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
15 |
Целостность
•Поддержка консистентности данных, несмотря на параллельно вносимые изменения многими процессами
•Определение и поддержка модели непротиворечивости
•Строгая непротиворечивость (strict consistency)
Все действия над данными совершаются строго последовательно [Нужно абсолютное время]
•Линеарнизуемость (linearizability)
Все действия над данными выполняются в некотором линейном порядке, расширяющим порядок действий в каждом процессе
•Последовательная непротиворечивость (sequential consistency) Каждый отдельный процесс видит порядок действий как линейный, расширяющий порядок действий в нем
•Транзакции
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
16 |
Транзакции
•Группы действий, обладающие свойствами
•A – atomicity, атомарность – либо все выполняются, либо ни одно не выполняется
•C – consistency, непротиворечивость – сохраняют инварианты целостности данных
•I – isolation, изолированность – результаты отдельных действий внутри транзакции не доступны снаружи, доступен только общий итог
•D – durability, долговечность – после успешного завершения результаты становятся неотменяемыми
•На самом деле важнее всего атомарность
•Непротиворечивость выводится из нее, если операции внутри транзакции корректны
•Бывают длинные транзакции, промежуточные результаты которых доступны для чтения
•Отменить можно с помощью другой транзакции с обратными действиями
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
17 |
Распределенные транзакции
•Реализация распределенных транзакций опирается на реализацию транзакций на каждом узле
•Необходим общий координатор распределенной транзакции
•Этот компонент поддерживает реестр процессов-участников транзакции
•Осуществляет действия, нацеленные на отмену или подтверждение транзакции, отправляя участникам приказы подтвердить/откатить ее локально
•Может изменяться или перемещаться в ходе выполнения транзакции, если корректно поддерживает нужные данные для ее совершения
•Протокол завершения
•2PC – two-phase-commit – с неизменным координатором
•3PC – three-phase-commit – с выбором нового координатора при сбое имеющегося
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
18 |
Реализация распределенной транзакции
Кулямин В.В. ФКН ВШЭ, ПИ / ВМК МГУ |
Основы инженерии программного обеспечения |
19 |
Конец
