Теорема CAP

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Теорема CAP (також відома як теорема Брюера, на честь науковця Еріка Брюера[en]) — твердження, що для будь-якої розподіленої комп'ютерної системи неможливо одночасно забезпечити виконання більше двох з наступних властивостей:

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

Акронім CAP утворений з перших букв англомовних іменувань цих трьох властивостей (Consistency, Availability, Partition tolerance).[1][2]

Історія[ред.ред. код]

Згідно Еріком Брюером теорема вперше виникла восени 1998, а опублікована під назвою «CAP-правило» в 1999.

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

Згодом, в 2002 Сет Джилберт та Ненсі Лінч із Масачусетського технологічного інституту опублікували формальне доведення цієї теореми.[3]

Наслідки[ред.ред. код]

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

CA[ред.ред. код]

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

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

AP[ред.ред. код]

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

Звісно такі системи з'явилися значно раніше формулювання CAP теореми, як то наприклад DNS, але ріст популярності збігається з розповсюдженням даного принципу (зокрема деякі NoSQL системи не гарантують цілісність результату, посилаючись на дану теорему).

CP[ред.ред. код]

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

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

Примітки[ред.ред. код]

Див. також[ред.ред. код]