Ответ
В теореме CAP (Consistency, Availability, Partition tolerance) буква P означает Partition tolerance — устойчивость к разделению (partition) сети.
Это свойство распределённой системы продолжать функционировать, несмотря на произошедший сетевой сбой, который приводит к потере сообщений между узлами или разделению сети на изолированные сегменты.
Ключевые аспекты:
- P считается неизбежной в реальных распределённых системах, так как сетевые сбои — это вопрос времени, а не возможности.
- Теорема CAP утверждает, что в условиях разделения сети (P) система может гарантировать либо C (консистентность), либо A (доступность), но не оба свойства одновременно.
- На практике системы часто выбирают компромисс, например, модель PACELC, которая расширяет CAP, учитывая поведение и при отсутствии разделения.
Пример выбора при разделении:
// Упрощённая логика узла при обнаружении сетевого раздела
if (isNetworkPartitioned()) {
// Выбор стратегии в зависимости от конфигурации системы:
// 1. Гарантировать консистентность (C) — отклонить запрос или вернуть ошибку.
// 2. Гарантировать доступность (A) — обслужить запрос, используя локальные (возможно, устаревшие) данные.
return systemPolicy == Policy.CONSISTENCY ? throw new ConsistencyException() : serveLocalData();
}
Вывод: P — это фундаментальное ограничение среды, которое заставляет архитекторов делать осознанный выбор между консистентностью и доступностью.