Ответ
Partition Tolerance (P) — это свойство распределённой системы продолжать функционировать и обрабатывать запросы, несмотря на произошедший сетевой раздел (network partition), то есть потерю связи между некоторыми её узлами.
Контекст CAP-теоремы: Система может гарантировать только два из трёх свойств одновременно:
- C (Consistency) — согласованность: все узлы видят одни и те же данные в один момент времени.
- A (Availability) — доступность: каждый запрос получает ответ (успешный или ошибочный).
- P (Partition Tolerance) — устойчивость к разделению.
Практический выбор при разделе:
- CP-система (Consistency + Partition Tolerance): Жертвует доступностью (A). При разделе узлы, не способные гарантировать согласованность, перестают отвечать на запросы.
- Пример: ZooKeeper, etcd, традиционные RDBMS с репликацией.
- 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.