Розподілені системи
Зміст
Поняття розподільна система
У літературі можна знайти різні визначення розподілених систем, причому жодне з них не є задовільним і не узгоджується з іншими. Для викладення даної статті вистачить доволі простої характеристики.
Розподілена система — це набір незалежних комп'ютерів, що представляється їх користувачам єдиною об'єднаною системою.
У цьому визначенні обмовляються два моменти. Перший відноситься до апаратури: всі машини автономні. Другий стосується програмного забезпечення: користувачі думають, що мають справу з єдиною системою. Важливо обидва моменти. Можливо, замість того щоб розглядати визначення, розумніше буде зосередитися на важливих характеристиках розподілених систем. Перша з таких характеристик полягає в тому, що від користувачів приховані відмінності між комп'ютерами і способи зв'язку між ними. Те ж саме відноситься і до зовнішньої організації розподілених систем. Іншою важливою характеристикою розподілених систем є спосіб, за допомогою якого користувачі і додатки одноманітно працюють в розподілених системах, незалежно від того, де і коли відбувається їх взаємодія. Розподілені системи повинні також відносно легко піддаватися розширенню, або масштабуванню. Ця характеристика є прямим наслідком наявності незалежних комп'ютерів, але в той же час не указує, яким чином ці комп'ютери насправді об'єднуються в єдину систему. Розподілені системи зазвичай існують постійно, проте деякі їх частини можуть тимчасово виходити з ладу. Користувачі і додатки не повинні повідомлятися про те, що ці частини замінені або полагоджені або що додані нові частини для підтримки додаткових користувачів або додатків. Для того, щоб підтримати представлення різних комп'ютерів і мереж у вигляді єдиної системи, організація розподілених систем часто включає додатковий рівень програмного забезпечення, що знаходиться між верхнім рівнем, на якому знаходяться користувачі і додатки, і нижнім рівнем, що складається з операційних систем, як показано на рис. 1. Відповідно, така розподілена система зазвичай називається системою проміжного рівня (middleware).
Рис.1. Розподілена системо організована у вигляді служби проміжного рівня
Наведемо деякі приклади розподілених систем.
Як перший приклад розглянемо мережу робочих станцій в університеті або відділі компанії. Додатково до персональної робочої станції кожного з користувачів є пул процесорів машинного залу, не призначених наперед жодному з користувачів, але що динамічно виділяються їм при необхідності. Ця розподілена система може володіти єдиною файловою системою, в якій всі файли однаково доступні зі всіх машин з використанням постійного шляху доступу. Крім того, коли користувач набирає команду, система може знайти якнайкраще місце для виконання запрошуваної дії, можливо, на власній робочій станції користувача, можливо, на простоюючій робочій станції, що належить комусь іншому, а може бути, і на одному з вільних процесорів машинного залу. Якщо система в цілому виглядає і поводиться як класична однопроцесорна система з розділенням часу (тобто розрахована на багато користувачів), вона вважається розподіленою системою.
Як другий приклад розглянемо роботу інформаційної системи, яка підтримує автоматичну обробку замовлень. Зазвичай подібні системи використовуються співробітниками декількох відділів, можливо в різних місцях. Так, співробітники відділу продажів можуть бути розкидані по обширному регіону або навіть по всій країні. Замовлення передаються з переносних комп'ютерів, що сполучаються з системою за допомогою телефонної мережі, а можливо, і за допомогою стільникових телефонів. Замовлення, що приходять, автоматично передаються у відділ планування, перетворюючись там на внутрішні замовлення на постачання, які поступають у відділ доставки, і в заявки на оплату, що поступають в бухгалтерію. Система автоматично пересилає ці документи співробітникам, що є на місці, відповідають за їх обробку. Користувачі залишаються в повному невіданні про те, як замовлення насправді курсують усередині системи, для них все це представляється так, ніби вся робота відбувається в централізованій базі даних.
Як останній приклад розглянемо World Wide Web. Web надає просту, цілісну і одноманітну модель розподілених документів. Щоб побачити документ, користувачеві досить активізувати посилання. Після цього документ з'являється на екрані. У теорії (але безумовно не в поточній практиці) немає необхідності знати, з якого сервера доставляється документ, достатньо лише інформації про те, де він розташований. Публікація документа дуже проста: ви повинні тільки задати йому унікальне ім'я у формі уніфікованого покажчика ресурсу (Uniform Resource Locator, URL), яке посилається на локальний файл з вмістом документа. Якби Усесвітня павутина представлялася своїм користувачам гігантською централізованою системою документообігу, вона також могла б вважатися розподіленою системою. На жаль, цей момент ще не наступив. Так, користувачі усвідомлюють, що документи знаходяться в різних місцях і розподілені по різних серверах.
Концепції побудови розподілених систем
Апаратна побудова розподілених систем
Не дивлячись на те що всі розподілені системи містять по декілька процесорів, існують різні способи їх організації в систему. Особливо це відноситься до варіантів їх з'єднання і організації взаємного обміну. У цьому розділі ми стисло розглянемо апаратне забезпечення розподілених систем, зокрема варіанти з'єднання машин між собою. Предметом нашого обговорення в наступному розділі буде програмне забезпечення розподілених систем.
За минулі роки було запропоновано безліч різних схем класифікації комп'ютерних систем з декількома процесорами, але жодна з них не стала дійсно популярною і широко поширеною. Нас цікавлять виключно системи, побудовані з набору незалежних комп'ютерів. На мал. 1.4 ми підрозділяємо всі комп'ютери на дві групи. Системи, в яких комп'ютери використовують пам'ять спільно, зазвичай називаються мультипроцесорами (multiprocessors), а що працюють кожен з своєю пам'яттю — мульткомп'ютерами (multicomputer). Основна різниця між ними полягає в тому, що мультипроцесори мають єдиний адресний простір, спільно використовуваний всіма процесорами. Якщо один з процесорів записує, наприклад, значення 44 за адресою 1000, будь-який інший процесор, який після цього прочитає значення, лежаче за адресою 1000, отримає 44. Всі машини задіюють одну і ту ж пам'ять.
На відміну від таких машин в мультікомпиотерах кожна машина використовує свою власну пам'ять. Після того, як один процесор запише значення 44 за адресою 1000, інший процесор, прочитавши значення, лежаче за адресою 1000, набуде того значення, яке зберігалося там раніше. Запис за цією адресою значення 44 іншим процесором ніяк не позначиться на вмісті його пам'яті. Типовий приклад мультикомпьютера — декілька персональних комп'ютерів, об'єднаних в мережу.
Кожна з цих категорій може бути підрозділена на додаткові категорії на основі архітектури сполучаючої їх мережі. На мал.2 цю дві архітектуру позначено як шинна (bus) і комутована (switched). Під шиною розуміється одиночна мережа, плата, шина, кабель або інше середовище, що сполучає всі машини між собою. Подібну схему використовує кабельне телебачення: кабельна компанія протягує уздовж вулиці кабель, а всім підписчикам робляться відведення від основного кабелю до їх телевізорів.
Рис.2 Різні базові архітектури процесорів та пам'яті розподілених комп'ютерних систем
Комутаційні системи, на відміну від шинних, не мають єдиної магістралі, такий як у кабельного телебачення. Замість неї від машини до машини тягнуться окремі канали, виконані із застосуванням різних технологій зв'язку. Повідомлення передаються по каналах з ухваленням явного рішення про комутацію з конкретним вихідним каналом для кожного з них. Така організована глобальна телефонна мережа. Ми проведемо також розділення розподілених комп'ютерних систем на гомогенні (homogeneous) і гетерогенні (heterogeneous). Це розділення застосовується виключно до мультикомпьютерным систем. Для гомогенних муль-тікомпьютерних систем характерна одна сполучаюча комп'ютери мережа, що використовує єдину технологію. Однакові також і всі процесори, які в основному мають доступ до однакових об'ємів власної пам'яті. Гомогенні мультикомпьютерные системи нерідко використовуються як паралельні (що працюють з одним завданням), в точності як мультипроцесорні. На відміну від них гетерогенні мультикомпьютерные системи можуть містити цілу гамму незалежних комп'ютерів, сполучених різноманітними мережами. Так, наприклад, розподілена комп'ютерна система може бути побудована з декількох локальних комп'ютерних мереж, сполучених комутованою магістраллю FDDI або АТМ. У наступних трьох пунктах я стисло розгляну мультипроцесорні, а також гомогенні і гетерогенні мультикомп'ютерні системи. Не дивлячись на те, що ці питання не пов'язані безпосередньо з нашою основною темою, розподіленими системами, вони допомагають краще за її зрозуміти, оскільки організація розподілених систем часто залежить від вхідної в їх склад апаратури.
* Мультипроцесори * Гомогенні мультикомп'ютерні системи * Гетерогенні мультикомп'ютерні системи
Програмна побудова розподілених ситем
Апаратура важлива для розподілених систем, проте від програмного забезпечення значно сильніше залежить, як така система виглядатиме насправді. Розподілені системи дуже схожі на традиційні операційні системи. Перш за все, вони працюють як менеджери ресурсів (resource managers) існуючого апаратного забезпечення, які допомагають безлічі користувачів і додатків спільно використовувати такі ресурси, як процесори, пам'ять, периферійні пристрої, мережу і дані всіх видів. По-друге, що, ймовірно, більш важливо, розподілена система приховує складність і гетерогенну природу апаратного забезпечення, на базі якого вона побудована, надаючи віртуальну машину для виконання додатків. Щоб зрозуміти природу розподіленої системи, розглянемо спочатку операційні системи з погляду розподіленості. Операційні системи для розподілених комп'ютерів можна начорно розділити на дві категорії — сильно зв'язані і слабо зв'язані системи. У сильно зв'язаних системах операційна система в основному прагне працювати з одним, глобальним представленням ресурсів, якими вона управляє. Слабо зв'язані системи можуть представлятися нетямущій людині набором операційних систем, кожна з яких працює на власному комп'ютері. Проте ці операційні системи функціонують спільно, роблячи власні служби доступними іншим. Це ділення на сильно і слабо зв'язані системи пов'язано з класифікацією апаратного забезпечення. Сильно зв'язані операційні системи зазвичай називаються розподіленими операційними системами (Distributed Operating System, DOS) і використовуються для управління мультипроцесорними і гомогенними мультикомпьютерными системами. Як і у традиційних однопроцесорних операційних систем, основна мета розподіленої операційної системи полягає в захованні тонкощів управління апаратним забезпеченням, яке одночасно використовується безліччю процесів. Слабо зв'язані мережеві операційні системи (Network Operating Systems, NOS) використовуються для управління гетерогенними мультикомпьютерными системами. Хоча управління апаратним забезпеченням і є основним завданням мережевих операційних систем, вони відрізняються від традиційних. Ця відмінність витікає з того факту, що локальні служби повинні бути доступними для видалених клієнтів. У наступних пунктах ми розглянемо в першому наближенні ті та інші. Щоб дійсно скласти розподілену систему, служб мережевої операційної системи недостатньо. Необхідно додати до них додаткові компоненти, щоб організувати кращу підтримку прозорості розподілу. Цими додатковими компонентами будуть засоби, відомі як системи проміжного рівня (middleware), які і лежать в основі сучасних розподілених систем. Засоби проміжного рівня також обговорюються в цьому розділі. У табл.1 представлені основні дані по розподілених і мережевих операційним системам, а також засобам проміжного рівня.
Система | Опис | Основне призначення |
---|---|---|
Розподілені операційні системи | Сильно зв'язані операційні системи для мультипроцесорів і гомогенних мультикомпьютерных систем | Заховання і управління апаратним забезпеченням |
Мережеві операційні системи | Слабо зв'язані операційні системи для гетерогенних мультикомпьютерных систем (локальних або глобальних мереж) | Надання локальних служб віддаленим клієнтам |
Засоби проміжного рівня | Додатковий рівень поверх мережевих операційних систем, що реалізовує служби загального призначення | Забезпечення прозорості розподілу |
В даній статті ми докладніше зупинимося на мережевих операційних системах.
Комп'ютерні мережі, як частковий випадок розподілених систем
Комп'ютерні мережі належать до розподілених (або децентралізованих) обчислювальним систем. Оскільки основною ознакою розподіленої обчислювальної системи є наявність декількох центрів обробки даних, то поряд із комп'ютерними мережами до розподілених систем відносять також мультипроцесорні комп'ютери і багатомашинні обчислювальні комплекси.
Мультипроцесорні комп'ютери.
У мультипроцесорних комп'ютерах є декілька процесорів, кожен із який може відносно незалежно від інших виконувати свою програму. У мультипроцесорі існує загальна для всіх процесорів операційна система, що оперативно розподіляє обчислювальне навантаження між процесорами. Взаємодія між окремими процесорами організована найпростішим способом – через загальну оперативну пам'ять. Процесорний блок не є закінченим комп'ютером і тому не може виконувати програми без інших блоків мультипроцесорного комп'ютера – пам'яті і периферійних пристроїв. Всі периферійні пристрої є спільними для всіх процесорів мультипроцесорної системи. Територіальну розподіленість мультипроцесор не підтримує – усі його блоки розташовуються в одному або декількох близько розташованих конструктивах, як і в звичайному комп'ютері. Основна перевага мультипроцесора – його висока продуктивність, що досягається за рахунок паралельної роботи кількох процесорів. Завдяки існуванню спільної пам'яті взаємодія процесорів відбувається дуже швидко, мультипроцесори можуть ефективно виконувати навіть додатки з високим ступенем зв'язку за даними. Ще однією важливою властивістю мультипроцесорних систем є стійкість до відмов, тобто спроможність продовжувати роботу при відмові деяких елементів, наприклад процесорів або блоків пам'яті. При цьому продуктивність, природно, знижується, але не повністю, як у звичайних системах, у яких відсутня надмірність.
Багатомашинні системи.
Багатомашинна система – це обчислювальний комплекс, що включає в себе декілька комп'ютерів (кожен з яких працює під керуванням власної операційної системи), а також програмні й апаратні засоби зв'язку комп'ютерів, що забезпечують роботу всіх комп'ютерів комплексу як єдиного цілого.
Робота будь-якої багатомашинної системи визначається двома головними компонентами: високошвидкісним механізмом зв'язку процесорів і системним програмним забезпеченням, що надає користувачам і додаткам прозорий доступ до ресурсів усіх комп'ютерів, які входять у комплекс. До складу засобів зв'язку входять програмні модулі, функціональне призначення яких – розподіл обчислювального навантаження, синхронізація обчислень і реконфігурація системи. Якщо відбувається відмова одного з комп'ютерів комплексу, його завдання можуть бути автоматично перепризначені і виконані на іншому комп'ютері. Якщо до складу багатомашинної системи входять декілька контролерів зовнішніх пристроїв, то у випадку відмови одного з них, інші контролери автоматично підхоплюють його роботу. Таким чином, досягається висока відмовостійкість комплексу в цілому.
Крім підвищення відмовостійкості, багатомашинні системи дають змогу досягти високої продуктивності за рахунок організації розподілених обчислень. У порівнянні з мультипроцесорними системами можливості паралельної обробки в багатомашинних системах обмежені: ефективність розпаралелення різко знижуєтьсяу тому випадку, коли завдання, що виконуються паралельно тісно пов'язані між собою даними. Це пояснюється тим, що зв'язок між комп'ютерами багатомашинної системи менш тісний, ніж між процесорами в мультипроцесорній системі, тому що основний обмін даними здійснюється через спільні багатовходові периферійні пристрої. Помічено, що, на відміну від мультипроцесорів, де використовуються сильні програмні й апаратні зв'язки, у багатомашинних системах апаратні і програмні зв'язки між пристроями для обробки є більш слабкими.
Ідея об'єднати декілька розрізнених комп'ютерів у єдиний обчислювальний організм не нова. Але потрібно не тільки об'єднати, але і збалансовано завантажити всі робочі станції. Так і з’явився кластер – система з декількох комп'ютерів, що спільно працюють над однією загальною прикладною задачею.
Класичне визначення кластера, дав Грегорі Пфістер [2]:
«Кластер – це різновид паралельної або розподіленої системи, що:
1. складається з декількох зв'язаних між собою комп'ютерів;
2. використовується як єдиний, уніфікований комп'ютерний ресурс».
Можна виділити три типи кластерів [3]:
Серверні кластери, які використовуються для запровадження мережевих сервісів. Головним завданням таких систем є розподілення та забезпечення балансу завантаження вузлів.
Системи високої готовності. Такі системи у першу чергу створюються для забезпечення відмовостійкості серверів.
Обчислювальні кластери – використовуються для значних обчислень (наукові цілі, задачі візуалізації і ін.) і використовують специфічне програмне забезпечення, таке як Message Passing Interface (MPI) та Parallel Virtual Machine (PVM). Такі системи успішно конкурують із занадто дорогими для освітніх та науково-дослідних закладів масово-паралельним та векторним комерційним суперкомп’ютерами.
Кластери будуються на тих системах, що однозначно орієнтовані на багатозадачне використання. Сьогодні вони, в основному, використовують середовище ОС LINUX – найбільш популярного представника систем такого роду. Утім, і з класичних ПК якщо на них встановити ОС LINUX чи Windows NT Advanced Server, можна створити кластер.
Зазвичай перед кластерами ставилися два завдання: обчислення великого обсягу та підтримка розподілених баз даних, особливо таких, для яких потрібна підвищена надійність. Привабливість кластера визначається насамперед можливістю побудувати унікальну архітектуру, що має достатню продуктивність, стійкість до відмов апаратури та програмного забезпечення і при цьому таку архітектуру можна легко нарощувати, модернізувати – універсальними засобами, зі стандартних компонентів і за помірну ціну (незрівнянно меншу, ніж ціна унікального відмовостійкого комп'ютера чи системи з масовим паралелізмом).
Як влаштовано кластер.
Отже, кластер поєднує кілька серверів, з'єднаних між собою спеціальним комунікаційним каналом, часто його називають також системною мережею. Невід'ємною частиною кластера є спеціальне програмне забезпечення, що, власне, і розв’язує проблему відновлення вузла у випадку збою, а також вирішує інші задачі, наприклад, змінює IP-адреси сервера додатків, якщо він вийшов з ладу і виконання перекладено на інший вузол. Кластерне ПЗ звичайно має декілька заздалегідь заданих сценаріїв відновлення працездатності системи, а також може надавати адміністратору можливості настройки таких сценаріїв. Відновлення після збоїв може підтримуватися як для вузла в цілому, так і для окремих його компонентів: додатків, дискових томів і т.д. Ця функція автоматично ініціюється у випадку системного збою, а також може бути запущена адміністратором, якщо йому, наприклад, необхідно відключити один з вузлів для реконфігурації.
Кластери можуть мати поділювану пам'ять на зовнішніх дисках, як правило, на дисковому масиві RAID. Координація роботи вузлів реалізується за допомогою спеціального механізму – диспетчера розподілених блокувань (Distributed Lock Manager, DLM), що закриває доступ до пристрою для усіх вузлів, крім одного, додаток якого в даний момент модифікує дані цього пристрою. Подібний механізм використовується, зокрема, в кластерах OpenVMS, але не реалізований в існуючих на сьогоднішній день кластерних рішеннях для NT. У цих системах додатки не можуть паралельно працювати з тими самими даними і загальною дисковою пам'яттю, якщо така є, вона призначена одному з вузлів у даний момент часу.
Таким чином, у кластерах, що не підтримують одночасного доступу до зовнішньої пам'яті, усі вузли є цілком автономними серверами. У випадку використання двох вузлів доступ до загальної пам'яті на дисках здійснюється за допомогою розділеної шини введення/виведення: для кожного вузла шина закінчується в дисковому масиві. У кожен момент часу тільки один вузол володіє загальною файловою системою. Якщо один із серверів вийде з ладу, контроль над шиною і поділюваними дисками переходить до іншого вузла. Замість поділюваної зовнішньої пам'яті, у кластерах може реалізовуватися принцип дзеркалювання інформації, коли дані одного вузла тиражуються на дискові-накопичувачі іншого.
Вузли кластера контролюють працездатність один одного й обмінюються специфічною кластерною інформацією, наприклад, про конфігурацію кластера, а також можуть передавати дані між поділюваними накопичувачами і координувати використання їх. Контроль працездатності здійснюється за допомогою спеціального сигналу (heartbeat – серцебиття), що вузли кластера передають один одному, для того щоб підтвердити своє нормальне функціонування. Припинення серцебиття одного з вузлів сигналізує кластерному програмному забезпеченню про збій, що відбувся, і необхідність перерозподілити навантаження на вузли, що залишилися.
Як комунікаційний канал можуть використовуватися звичайні мережеві технології (Ethernet, Token Ring, FDDI, АТМ), поділювані шини введення/виведення (SCSI чи PCI), високошвидкісний інтерфейс Fibre Channel чи спеціалізовані технології (DSSI, CI, Memory Channel). Вимоги, що ставляться до швидкодії комунікаційного каналу, залежать від ступеня інтеграції вузлів кластера і характеру роботи додатків. Скажімо, якщо додатки в різних вузлах не взаємодіють один з одним і не здійснюють одночасний доступ до дискових накопичувачів, то вузли обмінюються між собою тільки контрольними повідомленнями, що підтверджують їхню працездатність, а також інформацією про зміну конфігурації кластера, тобто додавання нових вузлів, перерозподіл дискових томів і т.д. Такий тип обміну не потребує значних комунікаційних ресурсів і цілком може задовольнитися простим 10-мегабітним Ethernet.
Високошвидкісний комунікаційний канал потрібен, якщо додатки в різних вузлах кластера будуть працювати з одними даними. Реалізація механізму DLM припускає інтенсивний обмін повідомленнями між вузлами. А отже, потребує високої продуктивності комунікацій.
Як приклад різних варіантів кластерних рішень можна привести запропоноване ветераном у цій області, компанією Digital, що стала частиною компанії Compaq, сімейство програмних продуктів TruCluster для об'єднання в кластер серверів AlphaServer з ОС Digital Unix (тепер Tru64 Unix). Один із представників цього сімейства, TruCluster Production Server підтримує паралельне виконання додатка на усіх вузлах кластера за допомогою механізму DLM і орієнтований на використання таких програмних рішень, як, наприклад, СУБД Oracle Parallel Server.
TruCluster Production Server підтримує постійне функціонування додатків у всіх вузлах кластера, ліквідуючи тим самим затримки, пов'язані з перезапуском додатка у випадку збою одного з вузлів. Крім того, це рішення забезпечує масштабованість системи, підвищуючи продуктивність додатка за умови включення нових вузлів у кластер. Однак, для того щоб домогтися такої масштабованості й ефективно реалізувати механізм DLM, необхідно високопродуктивне з'єднання між вузлами. Тому разом з TruCluster Production Server використовується спеціальна високоефективна комунікаційна технологія Memory Channel, що забезпечує високошвидкісний (до 100 Мбайт/с) обмін повідомленнями між серверами в кластері.
Обчислювальні мережі
У обчислювальних мережах програмні й апаратні зв'язки є ще слабшими, а автономність обробних блоків простежується найбільшою мірою – основними елементами мережі є стандартні комп'ютери, що не мають ні спільних блоків пам'яті, ні спільних периферійних пристроїв. Зв'язок між комп'ютерами здійснюється за допомогою спеціальних периферійних пристроїв – мережевих адаптерів, сполучених відносно протяжними каналами зв'язку. Кожний комп'ютер працює під керуванням власної операційної системи, а якась «спільна» операційна система, що розподіляє роботу між комп'ютерами мережі, відсутня. Взаємодія між комп'ютерами мережі відбувається за рахунок передачі повідомлень через мережеві адаптери і канали зв'язку. За допомогою цих повідомлень один комп'ютер звичайно запитує доступ до локальних ресурсів іншого комп'ютера. Такими ресурсами можуть бути як дані, що зберігаються на диску, так і різноманітні периферійні пристрої – принтери, модеми, факси-апарати і т.д. Поділ локальних ресурсів кожного комп'ютера між усіма користувачами мережі – основна мета створення обчислювальної мережі. На тих комп'ютерах, ресурси яких повинні бути доступні всім користувачам мережі, необхідно встановити модулі, що постійно будуть знаходитися в режимі чекання запитів, які надходять мережею від інших комп'ютерів. Зазвичай такі модулі називаються програмними серверами (server), тому що їхнє головне завдання – обслуговувати (serve) запити на доступ до ресурсів свого комп'ютера. На комп'ютерах, користувачі яких хочуть одержувати доступ до ресурсів інших комп'ютерів, також потрібно додати до операційної системи деякі спеціальні програмні модулі, що повинні виробляти запити на доступ до віддалених ресурсів і передавати їх мережею на потрібний комп'ютер. Такі модулі звичайно називають програмними клієнтами (client). Власне ж мережеві адаптери і канали зв'язку вирішують у мережі достатньо просте завдання – вони передають повідомлення з запитами і відповідями від одного комп'ютера до іншого, а основну роботу з організації спільного використання ресурсів виконують клієнтські і серверні частини операційних систем. Пара модулів «клієнт – сервер» забезпечує спільний доступ користувачів до визначеного типу ресурсів, наприклад до файлів. У цьому випадку говорять, що користувач має справу з файловою службою (service). Звичайно мережева операційна система підтримує декілька видів мережевих служб для своїх користувачів – файлову службу, службу друку, службу електронної пошти, службу віддаленого доступу і т.п. У технічній літературі англомовний термін «service» звичайно перекладається як «служба», «сервіс». Часто ці терміни використовуються як синоніми. Водночас, деякі спеціалісти розрізняють термін «служба», з одного боку, і терміни «сервіс» і «послуга», з іншого. Під «службою» розуміється мережевий компонент, що реалізує деякий набір послуг, а «сервісом» називають опис того набору послуг, що надається даною службою. Таким чином, сервіс – це інтерфейс між споживачем послуг і постачальником послуг (службою). Терміни «клієнт» і «сервер» використовуються не тільки для позначення програмних модулів, але і комп'ютерів, підключених до мережі. Якщо комп'ютер надає свої ресурси іншим комп'ютерам мережі, то він називається сервером, а якщо він їх споживає – клієнтом. Іноді один комп'ютер може одночасно виступати і в ролі сервера, і в ролі клієнта. Мережеві служби завжди є розподіленими програмами. Розподілена програма – це програма, що складається з декількох частин, які взаємодіють, причому кожна частина, як правило, реалізується на окремому комп'ютері мережі. В мережі можуть виконуватися і розподілені користувацькі програми. Розподілений додаток також складається з декількох частин, кожна з яких виконує якусь визначену закінчену роботу з розв’язання прикладного завдання. Наприклад, одна частина додатку, що виконується на комп'ютері користувача, може підтримувати спеціалізований графічний інтерфейс, друга – працювати на потужному виділеному комп'ютері і займатися статистичною обробкою введених користувачем даних, а третя – заносити отримані результати в базу даних на комп'ютер із встановленою стандартною СУБД. Розподілені додатки повною мірою використовують потенційні можливості розподіленої обробки, надані обчислювальною мережею, і тому часто називаються мережевими додатками. Варто підкреслити, що не кожен додаток, що виконується у мережі, є мережевим. Існує велика кількість популярних додатків, що не є розподіленими і повністю виконуються на одному комп'ютері мережі. Проте і такі додатки можуть використовувати переваги мережі за рахунок умонтованих в операційну систему мережевих служб. Більшість додатків, які виконувалися у локальних мережах у середині 80-х років, були звичайними, нерозподіленими додатками. І це зрозуміло – вони були написані для автономних комп'ютерів, а потім – просто перенесені в мережеве середовище. Створення ж розподілених додатків, хоч і мало багато переваг (зменшення мережевого трафіка, спеціалізація комп'ютерів) виявилося справою зовсім не простою. Потрібно було розв'язувати безліч додаткових проблем – на скільки частин розбити додаток, які функції покласти на кожну частину, як організувати взаємодію цих частин, щоб у випадку збоїв і відмов частини, що залишилися, вони коректно завершували роботу, і т. д, і т п. Тому дотепер тільки невелика частина додатків є розподіленими, хоча очевидно, що саме за цим класом додатків майбутнє, тому що вони повною мірою можуть використовувати потенційні можливості мереж з розпаралелення обчислень.