Что такое Partition Tolerance (устойчивость к разделению) в CAP-теореме?

«Что такое Partition Tolerance (устойчивость к разделению) в CAP-теореме?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Partition Tolerance (P) — это свойство распределённой системы продолжать функционировать и обрабатывать запросы, несмотря на произошедший сетевой раздел (network partition), то есть потерю связи между некоторыми её узлами.

Контекст CAP-теоремы: Система может гарантировать только два из трёх свойств одновременно:

  • C (Consistency) — согласованность: все узлы видят одни и те же данные в один момент времени.
  • A (Availability) — доступность: каждый запрос получает ответ (успешный или ошибочный).
  • P (Partition Tolerance) — устойчивость к разделению.

Практический выбор при разделе:

  1. CP-система (Consistency + Partition Tolerance): Жертвует доступностью (A). При разделе узлы, не способные гарантировать согласованность, перестают отвечать на запросы.
    • Пример: ZooKeeper, etcd, традиционные RDBMS с репликацией.
  2. AP-система (Availability + Partition Tolerance): Жертвует строгой согласованностью (C). При разделе все узлы остаются доступными, но данные в разных сегментах могут расходиться (eventual consistency).
    • Пример: Cassandra, DynamoDB, Riak.

Пример AP-подхода (Cassandra):

// Запись в Cassandra продолжится даже при сетевом разделе,
// но данные могут временно быть несогласованными между узлами.
session.execute(
    "INSERT INTO users (user_id, name) VALUES (?, ?)",
    userId, userName
);

Важно: На практике P считается обязательным в распределённых системах, поэтому выбор сводится к CP vs AP.