Мережа P2P
P2P (Peer-to-peer) - архітектура систем, в основі якої лежить мережа рівноправних вузлів. Фраза «peer-to-peer» була вперше використана у 1984 році Парбауелом Йохнухуйтсманом (Parbawell Yohnuhuitsman) при розробці архітектури Advanced Peer to Peer Networking фірми IBM.
Даний тип мережі побудований на принципі рівноправності учасників і характеризуються тим, що їх елементи можуть зв'язуватися між собою, на відміну від традиційної архітектури, коли лише окрема категорія учасників, яка називається серверами може надавати певні сервіси іншим.
В P2P мережі не існує поняття клієнтів або серверів, лише рівні вузли, які одночасно функціонують як клієнти та сервери по відношенню до інших вузлів мережі. Така організація дозволяє зберігати працездатність мережі при будь-якій конфігурації доступних її учасників. Проте практикується використання P2P мереж які все ж таки мають сервери. Автономні вузли взаємодіють з іншими автономними вузлами. Вузли є автономними в тому сенсі, що не існує загальної влади, яка може контролювати їх. В результаті автономії вузлів, вони не можуть довіряти один одному та покладатися на поведінку інших вузлів, тому проблеми масштабування та надмірності стають більш важливими ніж у випадку традиційної архітектури.
Сучасні P2P-мережи набули розвитку завдяки ідеям, пов'язаними з обміном інформацією, які формувалися у руслі того, кожен вузол може надавати та отримувати ресурси які надаються будь-якими іншими учасниками.
== Історія ==
Сама технологія Р2Р існує з часів виникнення USENET та FidoNet.
USENET (1979 р.) — це розподілена мережа, яка забезпечує спілкування у групах новин. Обмін файлами відбувався за допомогою телефонних ліній, зазвичай протягом ночі, тому що це було дешевше. Таким чином не було ефективного способу централізувати такий сервіс як USENET.
FidoNet, як і USENET, — це децентралізована, розподілена мережа для обміну повідомленнями. FidoNet був створений у 1984 році Томом Дженнінгсом як засіб для обміну повідомленнями між користувачами різних BBS.
Перше покоління P2P мереж
Популяризація і поточна ера peer-to-peer почалась із створення мережі Napster. Napster почав стикатися із проблемами з законом. Мережа мала виділений центральний сервер і, як стверджувалося, хоча сама система безпосередньо не є порушенням законодавства, проте її існування сприяє цьому. У травні 1999 Napster надав кінцевим користувачам можливість роздавати та обмінюватись їх улюбленою музикою безпосередньо з іншими кінцевими користувачами. Мережа використовувала центральний сервер, зокрема для пошукових цілей. Кількість користувачів Napster в лютому 2001 складала 26.4 мільйона. У цей час з'явилося багато клонів Napster. Всі мали однакову архітектуру: один центральний сервер з великою кількістю клієнтів. Центральний сервер полегшував зв'язки клієнта та пошук. Як тільки бажана пісня була знайдена, сервер забезпечував прямий зв'язок між двома клієнтами, так вони могли передавати файли.
Після появи Napster було створено мережу EDonkey2000. Перевага eDonkey над Napster полягала у тому, що мережа дозволяла проводити зкачування різних частин одного файлу, одночасно із різних учасників мережі, які його надають. Іншою перевагою eDonkey було те, що згодом, серверне забезпечення набуло функціональності міжсерверного зв'язку, що дозволило виконувати пошук інформації на учасниках мережі що були під'єднані до різних серверів. Незважаючи на названі переваги, через використання серверів, ця мережа не була чистою peer-to-peer мережою.
Друге покоління P2P мереж
Друге покоління пірінгових мереж характеризується відсутністю центральних серверів та, при цьому, принциповою можливістю пошуку серед учасників мережі. Проте алгоритми пошуку у мережах другого покоління мали характер «хвильового» розповсюдження запитів та були не дуже ефективними.
Джастін Франкел вирішив створити мережу без центрального індексного сервера - Gnutella. Найкращими прикладами є Gnutella, Kazaa або Emule з Kademlia, серед яких лише Kazaa ще має центральний сервер для реєстрації. eDonkey2000/Overnet, Gnutella, FastTrack і Ares Galaxy мають приблизно 10.3 мільйонів користувачів (на квітень 2006 року, згідно зі slyck.com).
Третє покоління P2P мереж
Третє покоління P2P мереж характеризується децентралізованою структурою, та принципово новими алгоритмами пошуку, які базуються на ключовому понятті розподіленої хеш-таблиці (Distributed hash table), що допомагають вирішувати проблему масштабування, обираючи різні вузли, щоб індексувати певні значення хеш-функції (які використовуються, щоб ідентифікувати файли), дозволяючи швидкий та ефективний пошук будь-якого файлу у мережі.
Починаючи з версії 4.2.0 офіційного BitTorrent клієнта, в ньому реалізована функція безтрекерної роботи, яка базується на протоколі Kademlia. У таких системах трекер доступний децентрально, на клієнтах-учасниках мережі, у формі розподіленої хеш-таблиці.
== Класифікація P2P систем ==
В залежності від того, як вузли з'єднуються один з одним можна поділити мережі на структуровані та неструктуровані:
- Неструктурована мережа P2P формується, коли з'єднання встановлюються довільно. Такі мережі можуть бути легко сконструйовані, оскільки новий вузол, який хоче приєднатися до мережі, може скопіювати існуючі з'єднання іншого вузла, а вже потім почати формувати свої власні. У неструктурованій мережі P2P, якщо вузол бажає знайти певні дані в мережі, запит доведеться передати майже через всю мережу, щоб охопити так багато вузлів, як можливо. Головним недоліком таких мереж є те, що запити, можливо, не завжди вирішуються.
- Структурована мережа P2P використовує єдиний алгоритм, щоб гарантувати, що будь-який вузол може ефективно передати запит іншому вузлу, який має бажаний файл, навіть якщо файл надзвичайно рідкісний. Така гарантія потребує структуровану систему з'єднань. На даний момент найбільш популярним типом структурованої мережі P2P є розподілені хеш-таблиці, в яких хешування використовується для встановлення зв'язку між даними та конкретним вузлом, який за них відповідає.
За функціями:
- Розподілені обчислення - обчислювальна проблема розподіляються на невеликі незалежні частини. Обробка кожної з частин робиться на індивідуальному ПК і результати збираються на центральному сервері. Цей центральний сервер відповідальний за розподілення елементів роботи серед окремих комп'ютерів в Інтернеті. Кожен із зареєстрованих користувачів має клієнтське програмне забезпечення. Воно користується періодами бездіяльності в ПК (часто це характеризується часами активації скрінсейверів), щоб виконувати деяке обчислення, надане сервером. Після того, як обчислення закінчене, результат посилається назад до сервера, і нова робота передається для клієнта.
- Файлообмін - це одна з областей, де технологія P2P була найуспішнішою. Мультимедійні дані, наприклад, вимагають великих файлів. Napster і Gnutella використовувались користувачами, щоб обійти обмеження пропускної спроможності, які роблять передачу великих файлів неприйнятними.
- Співпраця - структура технології P2P робить її добре придатною для забезпечення співпраці між користувачами. Це може бути обмін повідомленнями, онлайн ігри, сумісна робота над документами в бізнесі, освіті та дома.
За ступенем централізації:
- Чисті peer-to-peer системи - вузли є рівними, поєднуючи ролі серверу та клієнту. Не існує центрального сервера, що керує мережею. Прикладами таких систем є Gnutella та Freenet
- Гібридні peer-to-peer системи - мають центральний сервер, що зберігає інформацію про вузли та відповідає на запити відносно цієї інформації. Вузли займаються забезпеченням ресурсами (тому що центральний сервер їх не має), повідомленням сервера про наявність цих ресурсів надання ресурсів іншим вузлам, які бажають ними скористатися.
Переваги P2P
- Розподіл та зменшення вартості- архітектура P2P може допомогти розподілити вартість серед користувачів. Економія коштів, здійснюється за допомогою використання та об'єднання ресурсів, які в іншому випадку не використовуються.
- Об'єднання ресурсів - кожен вузол в системі P2P приносить певні ресурси як наприклад обчислювальна потужність або пам'ять. У програмах, які потребують величезну кількість цих ресурсів, як наприклад intensive моделювання або розподілені файлові системи, природно використовувати P2P, щоб залучити ці ресурси. Розподілені обчислювальні системи, як наприклад SETI@Home, distributed.net, і Endeavours — очевидні приклади цього підходу. Об'єднуючи ресурси тисяч вузлів, вони можуть виконувати важкі з точки зору кількості обчислень функції.
- Вдосконалена масштабованість(надійність) - З відсутністю сильної центральної влади по відношенню до автономних вузлів, важливою метою є покращення масштабованості і надійності. Масштабованість і надійність визначаються в традиційному для розподілених систем сенсі, як наприклад використання пропускної спроможності — скільки вузлів можуть бути досягнуті від одного вузла, скільки вузлів може підтримуватися, скільки користувачів може підтримуватися.
- автономія- системи P2P підтримують рівень автономії, тому що вони вимагають, щоб кожен вузол робив необхідну для нього частину праці.
- Конфіденційність - пов'язаним із автономією є поняття анонімності і конфіденційності.Використовуючи структуру P2P, в якій дії виконуються локально, користувачі можуть уникати необхідності передавати будь-яку інформацію про себе до кого-небудь іншого. FreeNet — яскравий приклад того, як анонімність може вбудуватися в додаток P2P. Він пересилає повідомлення через інші вузли, щоб забезпечити неможливість вистежування початкового автора. Це збільшує анонімність, використовуючи імовірнісні алгоритми таким чином, щоб походження не можливо було легко відстежити аналізуючи трафік у мережі.
- Динамічність - системи P2P припускають, що оточення надзвичайно динамічне. Тобто, ресурси, як наприклад вузли, з'являються та зникають із системи безперервно. У випадках комунікації, як наприклад мережі для обміну повідомленнями, використовуються так званий «список контактів», щоб інформувати користувачів, коли їхні друзі стають доступними. Без цього, потрібно було би, щоб користувачі «опитували» партнерів, посилаючи періодичні повідомлення. У випадку розподілених обчислень, як наприклад distributed.net і SETI@home, система повинна пристосуватись до заміни учасників. Тому вони повинні повторно видавати завдання для обчислення іншим учасникам, щоб гарантувати, що робота не втрачена, якщо попередні учасники відпадають від мережі, поки вони виконували крок обчислення.