Тема 1

Розподілені системи

 

1.1 Історична довідка

Швидкість підвищення продуктивності, що спостерігалася в комп’ютерних технологіях в останні півстоліття, – значна. Розвиток пройшов від машин, що коштували 100 млн. дол. та виконували одну команду за секунду, до машин, які коштують 1 тис. дол. і виконують 10 млн. команд за секунду. Різниця у співвідношенні ціна/продуктивність досягла порядку 1012. Темпи збільшення продуктивності розподілених систем і технології, за допомогою яких це було досягнуто, показано на рисунку 1

 

Рисунок 1 – Підвищення продуктивності в комп’ютерних мережах

 

Загальна тенденція відмови від централізації почала виникати із середини вісімдесятих років, коли американська фірма «Intel» запропонувала замість інтегрального модуля із твердою логікою розробити стандартний логічний блок, конкретне призначення якого можна сформулювати після його виготовлення, тобто створити програмовану інтегральну схему. Так з’явився мікро-процесор – багатофункціональний цифровий мікроелектронний модуль з програмованою логікою, який став революційним кроком в електроніці й техніці обробки інформації.

Важливим є й факт винаходу високошвидкісних комп’ютерних мереж. Локальні мережі (Local-Area Networks, LAN) стали з’єднувати сотні комп’ютерів, дозволяти їм обмінюватися невеликими порціями інформації за кілька мікросекунд. Великі масиви даних почали передаватися з машини на машину зі швидкістю від 10 до 1000 Мбіт/с.

В останні десятиліття XX століття продуктивність мікропроцесорів стрімко подвоїлася, а потужність керувальних чипів збільшувалася в чотири рази кожні три роки. Безупинно зростаюча продуктивність за умови зменшення цін і габаритів утворювала основу для того, що все більше комп’ютерів могли працювати зі складнішим програмним забезпеченням.

Локальні мережі даних стали економічною передумовою для того, щоб поєднати персональні комп’ютери. Впровадження Ethernet-технології в сімдесяті роки можна розглядати як першу технологію, яка дозволила побудувати розподілену систему, що працює під керуванням програмного забезпечення, яке надавало можливість доступу до різних апаратних і програмних ресурсів.

Слід звернути увагу на суттєвий прогрес в останні десятиліття у сфері програмних технологій. Введення в мовах програмування таких концепцій, як процедура, модуль та інтерфейс стало передумовою для створення основ-них механізмів розподілених систем, результатом чого було розроблено технології віддаленого виклику прикладних програм RPC (Remote Procedure Call) і об’єктно-орієнтоване проектування розподілених систем.

Швидке проникнення інформаційних технологій у комерцію, банківську справу, освіту, зв'язок і сферу послуг разом з потужністю комп’ютерів і об’ємом пристроїв зберігання даних, які постійно зростають, висуває суворі вимоги до мереж зв’язку.

Локальні мережі вже сформували глобальні мережі (Wide-Area Networks, WAN), які дозволяють мільйонам машин у всьому світі обмінюватися інформацією зі швидкостями, що варіюються від 64 кбіт/с до декількох гігабіт за секунду.

У результаті розвитку мережних технологій можна побудувати систему, що складається з низки комп’ютерів й інших пристроїв, з’єднаних високошвидкісною мережею, яку називають інформаційною або розподіленою системою (distributed system), на відміну від попередніх централізованих (centralized systems) або однопроцесорних (single-processor systems) систем, тобто систем, які складалися з одного комп’ютера, його периферії й, можливо, декількох віддалених терміналів.

Досить багато підходів, характерних для розподілених інформаційних систем, є аналогічними для побудови апаратного забезпечення звичайних персональних комп’ютерів. Особливо це стосується багатопроцесорних материнських плат, багатоядерних процесорів і, найбільше, сучасних відео-карт. У відеокартах використання одного потужного спеціалізованого процесора виявилося значно дорожчим рішенням, ніж поєднання раніше створених, більш простих спеціалізованих процесорів. Використання групи спеціалізованих процесорів дозволило підвищити надійність апаратури, полегшити тепловідведення.

 

1.2 Базові терміни та визначення

 

Поняття «розподілена система» в літературних джерелах визначають по-різному. Історично у процесі розвитку апаратної та програмної складових розподілених систем формувалися різні розуміння їх як систем, що відобра-жалося на їх визначеннях. Розуміння того, як має визначатися розподілена система, постійно уточнюється.

1.  Розподіленою системою називають низку з’єднаних центральних процесорів (CPU), що працюють разом.

2.  Розподіленою системою називають низку машин з нерозділеною пам’яттю.

Надалі розподілені системи потрібно розглядати в найбільш загальній формі. До них належать усі різновиди клієнт-серверних систем, а також мультипроцесорні системи, тобто такі, які складаються з вузлів та можуть бути однопроцесорними або мультипроцесорними.

3.Розподіленою називають систему з просторово розподіленими ком-понентами, які не використовують ніякої спільної пам’яті й не підлягають децентралізованому адмініструванню. Для реалізації спільних цілей можлива кооперація компонентів. Якщо цими компонентами пропонуються послуги або використовуються запропоновані послуги, то виникає клієнт-серверна система, а у разі додаткового центрального службового посередництва – «торговельна» система (Trading-система).

Часто, визначаючи розподілену систему, на перше місце ставлять поділ її функцій між декількома комп’ютерами. За такого підходу розподіленою є будь-яка обчислювальна система, де обробку даних розділено між двома й більше комп’ютерами.

Розподілена система – це набір незалежних комп’ютерів, які користувач сприймає як єдину об’єднану систему.

У цьому визначенні є два однаково важливі моменти: стосовно апаратури – всі машини автономні; стосовно програмного забезпечення – користувачам надається у користування єдина система.

Основними завданнями розподіленої системи є організація ефективного доступу користувачів до інформаційних і програмних ресурсів та ефективна взаємодія як користувачів з ресурсами, так і різних видів ресурсів між собою.

 

1.2.1  Телекомунікаційні мережі, як елемент розподілених систем

 

Основною транспортною інфраструктурою розподілених систем є телекомунікаційна мережа, яка дозволяє виконувати інформаційний обмін в глобальному середовищі. Однією з важливих складових телекомунікаційної мережі є комп’ютерна мережа.

Комп’ютерні мережі належать до розподілених (або децентралізованих) обчислювальних систем. В обчислювальних мережах програмні й апаратні зв’язки є слабшими, а автономність розрахункових блоків простежується найбільшою мірою – основними елементами мережі є стандартні комп’ютери, що не мають ні спільних блоків пам’яті, ні спільних периферійних пристроїв. Зв’язок між комп’ютерами здійснюється за допомогою спеціальних периферійних пристроїв – мережних адаптерів, сполучених каналами зв’язку, які мають порівняно велику протяжність. Кожний комп'ютер працює під керуванням власної операційної системи, а деякої «спільної» операційної системи, яка розподіляє роботу між комп’ютерами мережі, немає. Взаємодія між комп’ютерами мережі відбувається за рахунок передачі повідомлень через мережні адаптери і канали зв’язку. За допомогою цих повідомлень один комп’ютер запитує дозвіл на доступ до локальних ресурсів іншого комп’ютера. Такими ресурсами можуть бути як дані, що зберігаються на диску, так і різноманітні периферійні пристрої – принтери, модеми, факсимільні апарати та ін. Поділ локальних ресурсів кожного комп’ютера між усіма користувачами мережі є основною метою створення обчислювальної мережі.

На комп’ютерах, ресурси яких мають бути доступними всім користувачам мережі, необхідно встановити модулі, що постійно перебуватимуть у режимі очікування запитів, які надходять мережею від інших комп’ютерів. Зазвичай такі модулі називають програмними серверами (server), тому що їх головне завдання – обслуговувати (to serve) запити на доступ до ресурсів свого комп’ютера. На комп’ютерах, користувачі яких хочуть отримувати до-ступ до ресурсів інших комп’ютерів, також потрібно додати до операційної системи деякі спеціальні програмні модулі, що мають виконувати запити на доступ до віддалених ресурсів і передавати їх мережею на потрібний комп’ютер. Такі модулі зазвичай називають програмними клієнтами (client). Власне мережні адаптери й канали зв’язку вирішують у мережі достатньо просте завдання: передають повідомлення із запитами і відповідями від одного комп’ютера до другого, а основну роботу з організації спільного використання ресурсів виконують клієнтські й серверні частини операційних систем. Пара модулів клієнт–сервер забезпечує спільний доступ користувачів до визначено-го типу ресурсів, наприклад до файлів, у цьому разі вважають, що користувач застосовує файлову службу. Зазвичай мережна операційна система підтримує декілька видів мережних служб для своїх користувачів: файлову службу, службу друку, службу електронної пошти, службу віддаленого доступу та ін.

У технічній літературі англомовний термін «service» зазвичай перекладають як «служба», «сервіс» і використовують як синоніми. Водночас, деякі спеціалісти розрізняють термін «служба», з одного боку, й терміни «сервіс» і «послуга», з другого. Під службою розуміють мережний компонент, що реалізує деякий набір послуг, а під сервісом – перелік послуг, який надає ця служба. Таким чином, сервіс – це інтерфейс між споживачем послуг і їх постачальником (службою).

Терміни «клієнт» і «сервер» використовують для позначення не тільки програмних модулів, але й комп’ютерів або пристроїв, під’єднаних до мережі. Якщо комп’ютер надає свої ресурси іншим комп’ютерам мережі, то його на-зивають сервером, а якщо він їх споживає – клієнтом. Іноді один комп’ютер може одночасно перебувати і в ролі сервера, і в ролі клієнта. Мережні служ-би завжди є розподіленими програмами загальносистемного призначення, які складаються з декількох частин, що взаємодіють, причому кожна частина пе-реважно реалізується на окремому комп’ютері мережі, за допомогою її мо-жуть виконуватися і розподілені програми користувачів. Розподілена прик-ладна програма також містить декілька частин, кожна з яких виконує якусь визначену закінчену роботу з вирішення прикладного завдання. Наприклад, одна частина прикладної програми, яку користувач виконує на власному комп’ютері, може підтримувати спеціалізований графічний інтерфейс; друга – працювати на потужному віддаленому комп’ютері й виконувати статистичну обробку введених користувачем даних; а третя – заносити отримані результати в базу даних на комп’ютер з установленою стандартною СУБД.

Розподілені прикладні програми повною мірою використовують потенційні можливості розподіленої обробки, надані обчислювальною мережею, тому їх називають мережними прикладними програмами.

Варто відзначити, що не кожна прикладна програма, яка виконується у мережі, є мережною. Велика кількість популярних прикладних програм не є розподіленими і повністю виконуються на одному комп’ютері в мережі. Проте й такі прикладні програми можуть використовувати переваги мережі за рахунок вмонтованих в операційну систему мережних служб.

Більшість прикладних програм, які використовувалися у локальних мережах у середині 80-х років, були звичайними, нерозподіленими приклад-ними програмами, бо їх було написано для автономних комп’ютерів, а потім просто перенесено в мережне середовище. Створення розподілених приклад-них програм, хоч і мало багато переваг (зменшення мережного трафіка, спеціалізація комп’ютерів), виявилося справою зовсім не простою. Потрібно було розв’язувати безліч додаткових проблем: на скільки частин розбити прикладну програму; які функції покласти на кожну частину; як організувати взаємодію цих частин, щоб у разі збоїв і відмов якихось частин, ті частини, які є працездатними, коректно завершували роботу та інших. З огляду на це дотепер тільки невелика частина прикладних програм є розподіленими, хоча очевидно, що саме за цим класом прикладних програм майбутнє, тому що вони повною мірою можуть використовувати потенційні можливості телекомунікаційних мереж з розпаралелюванням обчислень.

1.2.2 Модель клієнт-сервер

У базовій моделі клієнт-сервер усі процеси в розподілених системах поділяють на дві групи. Процеси, які прямо реалізують деяку службу, напри-клад службу файлової системи або бази даних, є серверами (servers). Процеси, які вимагають служби у серверів через надсилання запиту і подальшого очікування відповіді від сервера, – клієнти (clients). Взаємодію між клієнтом та сервером називають режимом запит-відповідь (request-reply behavior).

Модель клієнт-сервер була приводом для багатьох дебатів і суперечок, у яких одне з основних питань полягало в тому, як розподілити частини програмного забезпечення між клієнтом і сервером. Зрозуміло, що зазвичай чіткого розуміння немає. Наприклад, сервер розподіленої бази даних може постійно бути клієнтом, який передає запити на різноманітні файлові сервери, відповідальні за реалізацію таблиць цієї бази даних. У такому разі сервер баз даних сам не робить нічого, крім обробки запитів.

Проте, розглядаючи велику кількість прикладних програм типу клієнт-сервер, передбачених для організації доступу користувачів до баз даних, часто рекомендують поділяти їх на три рівні:

- рівень інтерфейсу користувача; - рівень обробки; - рівень даних.

Рівень користувацького інтерфейсу містить усе необхідне для безпосереднього спілкування з користувачем, наприклад, для керування дисплеєм. До рівня обробки належить прикладне програмне забезпечення, а до рівня даних –дані, з якими доводиться працювати.

 

1.3 Особливості розподілених систем

 

1.3.1  Переваги розподілених систем

Розрізняють низку причин, які зумовлюють заміну централізованих систем розподіленими:

·       розподілені системи легко масштабуються, тобто нові вимоги до інформаційної системи у разі розширення підприємства можуть бути легко реалізованими;

·       наявні рішення інтегруються, тобто такі системи можуть використовуватися системними компонентами, що приєдналися, без розробки по-новому системи з новою функціональністю;

·       поступове системне розширення мінімізує ризик перевантаження окремих системних компонентів;

·       організаційне керування потужністю розподіленої системи зумовлює ефективну, з погляду вартості, реалізацію, при цьому система гнучка й легко адаптується;

·       власник ресурсу має можливість самостійно керувати цим компонентом та вільно втручатися й реконфігурувати систему в своїх інтересах;

·       окремі складові частини розподіленої системи повністю автономні, тобто

·       у разі помилки або навіть випадання одного з компонентів системи інші елементи можуть, не перериваючись, продовжувати роботу й, за потреби, розв’язувати проблеми, що виникають;

·       розподілені системи дають можливість спільно використовувати дані та пристрої, одночасно утворюючи ілюзію безпосереднього під’єднання цих ресурсів до комп’ютера кожного користувача, тобто гнучко розподілити ро-боти в усій системі;

·       розподілені системи забезпечують користувачам оперативний доступ до великої кількості корпоративної інформації незалежно від місця їх перебування.

Переваги розподілених апаратних рішень, які використовуються в сучасному обчислювальному обладнанні, такі:

·       більш прості модулі, поєднання яких забезпечує необхідний ресурс, їх сумарна дешевизна порівняно з єдиним, більш складним, модулем;

·       підвищення надійності, оскільки вихід з ладу одного модуля не призведе до необхідності ремонту чи заміни обладнання, його функції розподіляться між іншими, в результаті чого зменшиться лише продуктивність загальної схеми;

·       для збільшення продуктивності загальної системи не потрібно розробляти нових апаратних елементів;

·       полегшене тепловідведення – блоки «розкидано» на опорній платі;

·       зменшується диференціація температурних зон і абсолютні значення температур.

1.3.2  Недоліки розподілених систем

 

Поряд із цими (й багатьма іншими) перевагами розподілені системи мають також і недоліки, які передусім зумовлені організацією ефективної взаємодії окремих частин розподіленої системи.

По-перше, це труднощі зумовлені програмним забезпеченням – операційними системами і прикладним програмним забезпеченням. Програмування для розподілених систем суттєво відрізняється від програмування для централізованих систем. Так, мережна операційна система, виконуючи в загальному випадку всі функції керування локальними ресурсами комп’ютера, ще й вирішує численні завдання щодо надання доступу до мережних служб. Розробка мережного прикладного програмного забезпечення ускладнюється через необхідність організувати спільну роботу його частин, які виконуються на різних машинах.

По-друге, багато проблем виникає через транспортування повідомлень каналами зв’язку між комп’ютерами, при цьому основним завданням є забезпечення надійності (щоб передані дані не губилися і не спотворювалися) та продуктивності (щоб обмін даними відбувався з прийнятними затримками). У структурі загальних витрат на обчислювальну мережу витрати на вирішення «транспортних питань» становлять велику частину, в той час як у централізованих системах таких проблем не виникає.

По-третє, проблемними є питання, зумовлені необхідністю гарантування безпеки інформації, яка циркулює в мережі, що набагато складніше вирішувати в обчислювальній мережі, ніж у централізованій системі.

Недоліки розподілених апаратних рішень, які використовують у сучасному обчислювальному обладнанні, такі:

·       необхідність розробки і введення модулів синхронізації;

·       необхідність розробки й реалізації алгоритмів перехоплення функцій блоків, які вийшли з ладу, ідентифікування та ізоляції некоректно працюючих блоків;

·       збільшення розмірів опорних плат разом з підвищенням сумарної по-тужності, оскільки зростає кількість модулів.