
- •Л.С. Глоба
- •Розподілені системи
- •Історична довідка
- •Базові терміни та визначення
- •Комп'ютерні мережі, як частковий випадок розподілених систем
- •Модель клієнт-сервер.
- •Особливості розподілених систем
- •Переваги розподілених систем
- •Недоліки розподілених систем
- •Класифікація розподілених систем
- •Характеристики розподілених систем
- •Висновки
- •Питання для самоконтролю
- •Поняття розподіленого середовища
- •Концепції апаратних рішень
- •Архітектура багатопроцесорних систем
- •Системи із спільною пам'яттю
- •Системи з роздільною пам'яттю
- •Представники систем з роздільною пам'яттю
- •Топології багатопроцесорних систем
- •Концепції програмних рішень
- •Таблиця 2.1. Короткий опис розподілених і мережних операційних систем, а також засобів проміжного рівня
- •Операційні системи й розподіленість
- •Проміжне середовище
- •Поняття розподіленого середовища
- •Розподіл прикладних програм по рівнях
- •Варіанти архітектури клієнт-сервер
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Програмні компоненти розподілених систем
- •Основи мережної взаємодії
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Взаємодія компонент розподіленої системи
- •Концепції взаємодії компонент розподіленої системи
- •Обмін повідомленнями
- •Віддалений виклик процедур
- •Використання віддалених об'єктів
- •Розподілені події
- •Розподілені транзакції
- •Безпека в розподілених системах
- •Опис інтерфейсу програмної компоненти
- •Мова xml і схеми xml
- •Soap: мова повідомлень розподіленої системи
- •Wsdl: опис інтерфейсу програмної компоненти
- •Серіалізація об'єктів
- •Базові технології представлення інформації в розподілених системах
- •Вимоги до прикладних програм серверної сторони
- •Огляд базових технологій
- •Таблиця 2.1 Основні оціночні характеристики платформ
- •Технологія ria
- •Таблиця 2.2 Порівняння даних профілізації традиційної веб-прикладної програма і ria
- •Таблиця 2.4 Порівняння технологій створення ria -прикладних програм
- •Дескриптор розгортання web-прикладних програм та компонент
- •Висновки
- •Питання для самоконтролю
- •Зв'язок
- •Рівні протоколів
- •Низькорівневі протоколи
- •Транспортні протоколи
- •Протоколи верхнього рівня
- •Віддалений виклик процедур
- •Звертання до віддалених об'єктів
- •Розподілені об'єкти
- •Прив'язка клієнта до об'єкта
- •Статичне й динамічне віддалене звернення до методів
- •Invoke(fobject, id(append). Int).
- •Передача параметрів
- •Зв’язок на основі потоків даних
- •Підтримка безперервних середовищ
- •Потоки даних й якість обслуговування
- •Таблиця 3.1 Характеристики технологій якості обслуговування
- •Синхронізація потоків даних
- •Протоколи проміжного рівня
- •Протокол soap
- •Родина протоколів xmpp
- •Протокол umsp
- •Висновки
- •Питання для самоконтролю
- •Процеси
- •Поняття процесу. Визначення та структура
- •Потоки виконання. Визначення та структура
- •Стан процесів та потоків виконання
- •Реалізація потоків виконання
- •Потоки виконання в нерозподілених системах
- •Потоки виконання в розподілених системах
- •Багатопотокові клієнти
- •Багатопотокові сервери
- •Таблиця 4.1 Три способи побудови сервера
- •Клієнти
- •Інтерфейси користувача
- •Клієнтське програмне забезпечення, яке забезпечує прозорість розподілу
- •Сервери
- •Загальні питання розробки серверів прикладного програмного забезпечення
- •Сервери об'єктів
- •Перенесення коду
- •Підходи до перенесення коду
- •Моделі перенесення коду
- •Перенесення і локальні ресурси
- •Перенесення коду в гетерогенних системах
- •Огляд перенесення коду в d'Agent
- •Питання реалізації
- •Програмні агенти
- •Програмні агенти в розподілених системах
- •Таблиця 4.2 Деякі важливі властивості агентів
- •Технологія агентів
- •Мови взаємодії агентів
- •Висновки
- •Питання для самоконтролю
- •Іменування
- •Іменовані сутності
- •Імена, ідентифікатори й адреси
- •Простір імен
- •Реалізація просторів імен
- •Покращене керування даними.
- •Допомагає організувати потоковий процес роботи.
- •Єдиний репозиторій і пошукової механізм для прикладного програмного забезпезпечення і сервісів.
- •Розміщення мобільних сутностей
- •Іменування й локалізація сутностей
- •Прості рішення
- •Підходи на основі базової точки
- •Ієрархічні підходи
- •Видалення сутностей, на які немає посилань
- •Проблема об'єктів, на які немає посилань
- •Підрахунок посилань
- •Організація списку посилань
- •Ідентифікація сутностей, на які немає посилань
- •Висновки
- •Фізичні годинники
- •Алгоритми синхронізації часу
- •Використання синхронізованих годин
- •Логічні годинники
- •Оцінка часу Лампорта (відмітки часу)
- •Векторна оцінка часу
- •Глобальний стан
- •Між записом свого стану й одержанням маркера процесQне приймав повідомлень по жодному зі своїх вхідних каналів.
- •Алгоритми голосування
- •Алгоритм «забіяки»
- •Кільцевий алгоритм
- •Взаємне виключення
- •Централізований алгоритм
- •Розподілений алгоритм
- •Алгоритм маркерного кільця
- •Порівняння трьох алгоритмів
- •Розподілені транзакції
- •Модель транзакцій
- •Таблиця 6.1 Деякі примітиви, використовувані в транзакціях
- •Класифікація транзакцій
- •Рівні ізольованості транзакцій
- •Таблиця 6.2 Рівні ізольованості та проблеми, які вони допускають
- •Реалізація розподілених транзакцій
- •Керування паралельним виконанням транзакцій
- •Компоненти розподілених транзакцій
- •Висновки
- •Список літератури
Перенесення коду
До цих пір в основному обговорювались розподілені системи, в яких взаємодія обмежувалася передачею даних. Проте існують ситуації, колипередача програм, інколи навіть під час їх виконання, дозволяє спростити розробку розподілених систем. Окремою складною проблемою єперенесення кодув гетерогенних системах. Типовою широко розповсюдженою реалізацією є система D'Agents для мобільних агентів.
Підходи до перенесення коду
Традиційно перенесення кодув розподілених системах відбувається у форміперенесення процесів (process migration), в разі яких процес цілком переноситься з однієї машини на іншу. Перенесення працюючого процесу на іншу машину – дороге і складне завдання, і для її виконання має бути вагома причина. Такою причиною завжди була продуктивність. Основна ідея полягає в тому, що продуктивність може зрости при перенесенні процесів з сильно завантаженої на слабо завантажену машину.Завантаженнязазвичай виражається в поняттяхдовжини черги до процесораабозавантаження процесора,використовуються також і інші індикатори продуктивності.
Алгоритм розподілу завантаження, на базі якого приймаються рішення, що включає розподіл і перерозподіл завдань відповідно до наявного набору процесорів, грає важливу роль в системах інтенсивних обчислень. Проте в багатьох сучасних розподілених системах оптимізація обчислювальної потужності– менш важливе завдання порівняно, наприклад,із зниженням комунікаційного трафіку. Більш того, враховуючи гетерогенність базових платформ і комп'ютерних мереж, підвищення продуктивності шляхом перенесення коду іноді ґрунтується в значній мірі на якісних міркуваннях, а не на математичних моделях.
Приклад.
Розглянемо систему клієнт-сервер, в якій сервер управляє великою базою даних. Якщо клієнтське програмне забезпечення збирається виконувати ряд операцій з базою даних, використовуючи великі об'єми даних, може бути краще перенести частину клієнтського програмного забезпечення на сервер, а по мережі передавати лише результати. Інакше мережа може бути переобтяжена даними, які передаються з сервера на клієнт. В цьому випадку перенесення коду засноване на міркуванні про те, що зазвичай має сенс обробляти дані поблизу від того місця, де вони знаходяться.
Схожа причина може бути використана і при перенесенні частини сервера на комп’ютер клієнта. В багатьох інтерактивних прикладних програмах баз даних клієнт повинен заповнювати форму, яка потім буде перетворена в серію операцій бази даних. Обробка форми на стороні клієнта з пересилкою на сервер лише заповненої форми не зрідка дозволяє уникнути пересилки по мережі значної кількості невеликих повідомлень. В результаті клієнт покаже кращу продуктивність, а сервер витратить менше часу на обробку форми і взаємодію.
Підтримка перенесення коду може також допомогти підвищити продуктивність на основі паралелізму, але без звичайних складнощів, пов'язаних з паралельним програмуванням.
Приклад.
Типовим прикладом може бути пошук інформації в Web. Відносно нескладно реалізувати пошуковий запит у вигляді невеликої мобільної програми, що переноситься з сайту на сайт. Створивши декілька копій цієї програми і розіславши їх по різних сайтах, можна добитися лінійного зростання швидкості пошуку в порівнянні з єдиним екземпляром програми.
Окрім підвищення продуктивності існують і інші причини підтримки перенесення коду. Найбільш важлива з них – це гнучкість. Традиційний підхід до побудови розподілених програмних засобів полягає в розбитті прикладної програми на частини з подальшим визначенням, де яка частина виконуватиметься.
Проте, якщо код переносити з машини на машину, виникає можливість конфігурувати розподілені системи динамічно.
Приклад.
Розглянемо сервер, який реалізовує стандартизований інтерфейс до файлової системи. Аби надати віддаленому клієнтові доступ до файлової системи, сервер використовує спеціальний протокол. У звичайному варіанті клієнтська реалізація інтерфейсу з файловою системою, заснована на цьому протоколі, має бути скомпонована з прикладною програмою клієнта. Цей підхід передбачає, що подібне програмне забезпечення для клієнта має бути доступне вже тоді, коли створюється клієнтське програмне забезпечення.
Рис. 4.13 Принцип динамічної конфігурації клієнта для зв'язку з сервером
Важлива перевага подібної моделі динамічного дозавантаження клієнтського програмного забезпечення полягає в тому, що клієнтові для спілкування з сервером немає необхідності мати повний комплект заздалегідь встановлюваного програмного забезпечення. Замість цього при необхідності програми можуть бути перенесені на клієнта і так само видалені, коли необхідність в них зникне.
Іншою перевагою буде те, що оскільки інтерфейси стандартизовані, то можна змінювати протокол взаємодії клієнт-сервер і його реалізацію так часто, як побажаємо. Зміни не зроблять впливу на існуючі клієнтські програмні засоби, пов'язані з сервером. Існують, зрозуміло, і недоліки. Сліпо вірити в те, що код, який завантажується, реалізує лише оголошені інтерфейси доступу до вашого незахищеного жорсткого диска і не відправляє найцікавіші фрагменти невідомо кому, – не завжди виправдано.