- •Лекція 2. Стратегії інтеграції програмного забезпечення
- •2.1. Модульна організація програмних систем
- •2.1.1. Принципи модульності
- •2.1.2. Модульна декомпозиція системи
- •2.2. Специфікація інтерфейсу як контракту
- •2.3. Стратегії інтеграції компонентів
- •2.3.1. Концепції взаємодії компонентів
- •Обмін повідомленнями
- •2.3.2. Виклик віддалених об'єктів. Маршалінг і серіалізація
- •Віддалений виклик процедур
- •2.3.3. Підходи до інтеграції компонентів інформаційних систем
Віддалений виклик процедур
Ідея віддаленого виклику процедур (remote procedure call, RPC) з'явилася в середині 80-х років і полягала в тому, що функцію на віддаленому комп'ютері можна викликати так само, як і функцію на локальному комп'ютері. Аби віддалений виклик відбувався прозоро з точки зору застосунку, необхідно надати процедуру-перехідник (заглушку, stub), яка викликатиметься клієнтським застосунком. Після виклику процедури-перехідника проміжне середовище перетворить передані нею аргументи у вигляд, придатний для передачі по транспортному протоколу, і передасть їх на віддалений комп'ютер з функцією, що викликається. На віддаленому комп'ютері параметри витягуються проміжним середовищем з повідомлення транспортного рівня і передаються функції, що викликається. Аналогічним чином на клієнтську машину передається результат виконання викликаної функції (рис. 12.1).
Рис. 2.1. Віддалений виклик процедур
Сама ідея віддаленого виклику проста, але не проста в реалізації, оскільки процес і процедура знаходяться на різних машинах в різних адресних просторах. Є проблеми і при передачі параметрів.
Існує три можливі варіанти віддаленого виклику процедур.
1. Синхронний виклик: клієнт чекає завершення процедури сервером і при необхідності отримує від нього результат виконання віддаленої функції;
2. Однонаправлений асинхронний виклик: клієнт продовжує своє виконання, отримання відповіді від сервера або відсутнє, або його реалізація покладена на розробника;
3. Асинхронний виклик: клієнт продовжує своє виконання, при завершенні сервером виконання процедури він отримує повідомлення і результат її виконання, наприклад через callback-функцію, що викликається проміжним середовищем при отриманні результату від сервера.
Віддалений виклик процедур (Remote Procedure Call, RPC) - це один з ранніх методів організації зв'язку, який лежить в основі багатьох сучасних технологій розподілених систем.
Сучасні моделі інтеграції, розроблені з використанням об'єктно-орієнтованого підходу, використовують виклик віддалених об'єктів.
2.3.2. Виклик віддалених об'єктів. Маршалінг і серіалізація
Технологія RMI (Remote Method Invocation) – це розвиток RPC (його об'єктна реалізація).
Віддалений об'єкт є деякими даними, сукупність яких визначає його стан. Цей стан можна змінювати шляхом виклику його методів. Зазвичай можливий прямий доступ до даних віддаленого об'єкту, при цьому відбувається неявний віддалений виклик, необхідний для передачі значення поля даних об'єкту між процесами. Методи і поля об'єкту, які можуть використовуватися через віддалені виклики, доступні через деякий зовнішній інтерфейс класу об'єкту. Зовнішній інтерфейс компонента зазвичай збігається із зовнішнім інтерфейсом одного з класів компоненту.
Як і в RPC, коли клієнт починає використовувати віддалений об'єкт, на стороні клієнта створюється клієнтська заглушка, яка називається посередником (proxy). Посередник реалізує той самий інтерфейс, що і віддалений об'єкт. Викликаючий процес використовує методи посередника, який перетворює (маршалізує) їх параметри для передачі по мережі, і передає їх по мережі серверу. Проміжне середовище на стороні сервера десериалізує параметри і передає їх заглушці на стороні сервера, яку називають каркасом (skeleton) або, як і у віддаленому виклику процедур, заглушкою. Каркас зв'язується з деяким екземпляром віддаленого об'єкту. Це може бути як новий, так і існуючий екземпляр об'єкту, залежно від моделі використання віддалених об'єктів.
Весь описаний процес називається маршалінгом віддаленого об'єкту за посиланням (marshal by reference). На відміну від маршалінгу за значенням, екземпляр об'єкту знаходиться в процесі сервера і не покидає його, а для доступу до об'єкту клієнти використовують посередників. При маршалінгу ж за значенням саме значення об'єкту серіализується в набір байтів для його передачі між процесами, після чого слідує створення його копії в іншому процесі. На теперішній час частіше використовується XML-сериалізація.
Рис. 2.2 Використання віддалених об'єктів
Таким чином, дамо визначення понять маршалінг та серіалізація.
Визначення 1 (Вікипедія)
Маршалінг (від англ. Marshal — упорядковувати) — процес перетворення представлення об'єкту в пам'яті у формат даних, придатний для зберігання або передачі. Зазвичай застосовується коли дані необхідно передавати між різними частинами однієї програми або від однієї програми до іншої.
Протилежний процес називається демаршалінгом.
Серіалізация — процес перетворення якої-небудь структури даних в послідовність бітів. Зворотною до операції серіалізації є операція десеріалізації — відновлення початкового стану структури даних з бітової послідовності.
Рис. 2.3. Передача віддаленому методу посилання на об'єкт, який маршалізується за посиланням
