Net і c #, мережа p2p 1

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

У Microsoft теж не обійшли стороною поява технології P2P і стали розробляти власні інструменти і засоби для її застосування. Так з'явилася платформа Microsoft Windows Peer-to-Peer Networking. виконуюча роль свого роду каркаса для комунікацій в додатках P2P. До складу цієї платформи входять такі важливі компоненти, як PNRP (Peer Name Resolution Protocol - протокол перетворення імен членів) і PNM (People Near Me - сусідні користувачі).

Крім того, в версію .NET Framework 3.5 було включено новий простір імен System.Net.PeerToPeer і кілька нових типів і засобів, що дозволяють створювати додатки P2P з мінімальними зусиллями.

Огляд технології P2P

Технологія P2P є альтернативний підхід до організації мережевих комунікацій. Для того щоб зрозуміти, чим P2P відрізняється від "стандартного" підходу до забезпечення комунікацій, не завадить зробити крок назад і згадати, що собою являє зв'язок типу "клієнт-сервер". Комунікації такого типу дуже часто застосовується в сучасних мережевих додатках.

Архітектура типу "клієнт-сервер"

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

На малюнку нижче показаний простий варіант архітектури типу "клієнт-сервер":

Net і c #, мережа p2p 1

Нічого по суті неправильного в такій архітектурі немає, і насправді в багатьох випадках вона буде надаватися саме тим, що потрібно. Однак їй властива проблема з масштабністю. На наступному малюнку показано, як вона буде масштабироваться при додаванні додаткових клієнтів:

Net і c #, мережа p2p 1

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

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

Архітектура типу P2P

Спеціальний робочий (peer-to-peer) підхід повністю відрізняється від підходу з масштабуванням "вгору" або "вшир". У разі застосування P2P замість того, щоб зосередити зусилля на спробах поліпшити комунікації між сервером і його клієнтами, вся увага приділяється пошуку способів, якими клієнти можуть взаємодіяти між собою.

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

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

Net і c #, мережа p2p 1

Особливості архітектури P2P

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

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

виявляти інших клієнтів;

підключатися до інших клієнтів;

взаємодіяти з іншими клієнтами.

У тому, що стосується здатності виявляти інших клієнтів, можливі два очевидних рішення: підтримка списку клієнтів на сервері, щоб клієнти могли отримувати його і зв'язуватися з іншими клієнтами (званими peers- рівноправними учасниками), або використання інфраструктури (наприклад, PNRP), яка дозволяє клієнтам виявляти один одного напряму. У більшості файлообмінних систем застосовується рішення з підтримкою списку на сервері і використовуються сервери, звані "трекера" (trackers).

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

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

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

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

Термінологія P2

У попередніх розділах вже було представлено поняття рівноправного учасника (peer) - саме так називають клієнтів в мережі P2P. Слово "клієнт" в мережі P2P не має ніякого сенсу, тому що тут немає обов'язкового сервера, клієнтом якого потрібно бути.

Групи рівноправних учасників, які з'єднуються один з одним, називаються осередками (meshes). хмарами (clouds) або графами (graphs). Кожна окрема група вважається добре з'єднаної, якщо дотримано хоча б якесь одне з наступних умов:

Між кожною парою рівноправних учасників існує шлях з'єднання, що дозволяє кожному учаснику підключатися до іншого рівноправного учасника потрібним чином.

Між кожною парою рівноправних учасників існує відносно невелика кількість з'єднань, за якими вони можуть зв'язуватися.

Видалення одного рівноправного учасника з групи не позбавляє інших рівноправних учасників можливості взаємодії один з одним.

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

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

Також допускається створювати і структуровані мережі P2P з чітко визначеними шляхами, за якими має відбуватися поширення запитів і даних серед рівноправних учасників.

рішення P2P

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

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

додатки, призначені для спільної роботи, такі як додатки, що дозволяють відкривати загальний доступ до робочого столу і "білій дошці" (whiteboard);

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

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

додатки Web 2.0, які об'єднують в собі деякі або всі перераховані вище програми та перетворюють їх в динамічні веб-додатки наступного покоління.

Схожі статті