Закон дірявих абстракцій

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук

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

TCP - спосіб пересилання даних, який вважається надійним. Щоденно ми всі користуємося TCP для повсякденних потреб. Як зазначалося раніше цей спосіб переселання даних вважається надійним - таким надійним, дозволяє кожному Остапу Бендеру зі Східної Африки розсилати по всьому світу спам найвищої якості.

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

Для ілюстрації чарівництва, розглянемо аналогічний, хоча і не цілком звичайний, сценарій з реального життя.

Припустимо, якась дама відправляла підводами з Петербурга в Москву диван, чемодан, саквояж. Тут сталося таке, що частина підвод зламалася і до Москви не доїхала. Частина підвод перекинулася на шляху, розбивши картину і дзеркала. Підводи добиралися до Москви не в тому порядку, в якому виїжджали з Петербурга, оскільки деяких затримали страшні лісові розбійники, і плюс до всього візники вибирали різні маршрути. А тепер уявімо, що дамі пропонується нова послуга: Червона Стріла, яка гарантує, що багаж прибуде на місце в цілості і в потрібному порядку. Але чарівним чином Червона Стріла не використовує, як ви подумали, залізної дороги, а наймає тих самих візників з підводами. Червона Стріла організовує роботу візників наступним чином. Стан багажу кожної підводи ретельно перевіряється. У разі пошкодження диван, чемодан та інші. замінюються зі складу точно такими ж. Підводи шикуються в правильному порядку. Якщо страшні лісові розбійники зуміли захопити шлях і перерізали дорогу, то Червона Стріла перенаправляє підводи іншим шляхом, і пані нічого не підозрює. Їй просто здається, що багаж прибуває трохи повільніше, ніж звичайно; а про жахливі події в Бологому дамі знати необов'язково.

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

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

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

Закон Дырявых Абстракций