Короткий ответ
При сетевом партиционировании система должна выбрать между продолжением обслуживания запросов с риском несогласованных данных (AP) или отказом части запросов ради гарантии согласованности (CP) — выбор принимается для конкретной операции и бизнес-контекста, и разные операции одной системы могут выбирать по-разному.
Как это работает подробнее
CAP-теорема утверждает, что при реальном разрыве сети между узлами нельзя одновременно гарантировать полную согласованность и полную доступность для всех операций — нужно выбрать, какую ослабить именно в момент партиционирования.
Выбор CP означает отказ обслуживания части запросов во время партиционирования, что бьёт по доступности, но исключает несогласованные данные; выбор AP сохраняет видимую доступность, но требует продуманного механизма разрешения конфликтов после восстановления связи, что само по себе источник сложности. Критерий выбора — для каждой конкретной операции нужно явно оценить, что хуже для бизнеса: отказ или несогласованность.
Пример кода
Сценарий: сеть разделила кластер БД на две группы узлов (partition).
CP-выбор для операции перевода денег: узлы без кворума отклоняют запрос на запись (503),
пока партиционирование не устранено.
AP-выбор для операции "добавить лайк": узел без кворума принимает запись локально,
синхронизация и разрешение конфликтов происходит после восстановления связи.Что использовать на практике
- Практика. Для операций, где показ неверных данных дороже отказа (подтверждение перевода), выбирают CP; для операций, где отказ дороже временной неточности (лента новостей), выбирают AP с последующим сведением.
Подводные камни
- Риск. Трактовать CAP как выбор «раз и навсегда» для всей системы, хотя разные операции могут выбирать по-разному; оправдывать постоянно слабую согласованность там, где партиций нет вообще.