Добре, давайте уявимо, що у вас є розподілена база даних. Скажімо, у вас є вузол в Орегоні та один у Каліфорнії. Теорія CAP говорить, що у вас виникнуть проблеми при створенні цього типу баз даних.
Наприклад, якщо ви запитуєте дані з однієї бази даних, вони повинні бути такими ж, як дані в іншій базі даних. Це гарантує, що будь-яке значення, яке ви маєте в одній базі даних, гарантовано знаходиться в іншій ( Узгодженість теорії CAP). Це дозволяє оновлювати дані в одній базі даних та запитувати їх в іншій, отримуючи однакові результати.
Коли ми оновлюємо дані у вузлі Орегон, вони надсилаються в вузол Каліфорнії, щоб бази даних були узгодженими. Щоб по-справжньому зберегти узгодженість, ми маємо гарантувати, що обидві бази отримують оновлення до того, як дозволяється по-справжньому зберігати дані (двофазна фіксація з використанням розподілених транзакцій). Іншими словами, якщо база даних у Каліфорнії не може зберегти дані з якихось причин (наприклад, поломка жорсткого диска), то база даних в Орегоні не збереже дані і не виконає транзакцію.
Проблема з розподіленими транзакціями на зразок вище, виникає, коли ми хочемо мати високу доступність. У цьому вище сценарії процес спроби синхронізувати обидві бази даних є дуже-дуже повільним процесом. . часи високого попиту. (Це доступність теореми CAP.)
Зазвичай для забезпечення високої доступності ми використовуємо реплікацію замість розподілених транзакцій. Тож замість того, щоб гарантувати, що Каліфорнія може прийняти дані, ми просто продовжуємо і зберігаємо їх у вузлі штату Орегон, а потім надсилаємо дані до Каліфорнії, коли ми їх обходимо. Це гарантує, що ми завжди можемо зберігати дані, незалежно від того, готовий він зберігати дані в Каліфорнії чи ні.
Це покращує доступність, але ціною послідовності. Дивіться, якщо хтось оновлює дані в Орегоні, а потім хтось (одночасно) читає дані в Каліфорнії, вони не отримують нових даних - бази даних більше не відповідають. Насправді вони не будуть послідовними, поки Орегон не надсилатиме дані до Каліфорнії!
Отже, це доступність -vs- компромісність.
Толерантність розділів є третім аспектом теорії CAP. У цьому контексті розділення - це думка про те, що база даних (або інша розподілена система) може розбиватися на окремі розділи і все ще функціонувати правильно.
Постає питання, що станеться, коли обидві бази даних працюють правильно, але зв’язок від Орегона до Каліфорнії розірвано?
Якщо ми оновлюємо базу даних в Орегоні, нам потрібно так чи інакше доставити дані до Каліфорнії (розподілена транзакція чи реплікація). Однак якщо зв’язок між ними розірваний, система стала розділеною і бази даних більше не пов’язані між собою.
Коли це станеться, ваш вибір полягає у припиненні дозволу оновлень (для підтримання послідовності) ціною доступності або дозволу оновлень (для підтримки доступності) ціною послідовності.
Як бачите, толерантність до розділів створює прямі компроміси між послідовністю та доступністю.
Очевидно, це більше, ніж це, але це кілька прикладів того, як ці три основні аспекти розподілених систем працюють один за одного і проти. Пояснення Джуліана Брауна теорії CAP - прекрасне місце, щоб дізнатися більше.