Теорема CAP (Consistency, Availability, Partition tolerance) — это концептуальный фреймворк, который описывает основные ограничения, связанные с проектированием распределенных систем. Эта теорема была предложена в 2000 году Эриком Брюэром (Eric Brewer) и формализована Сетом Гилбертом (Seth Gilbert) и Нэнси Линч (Nancy Lynch) в 2002 году.
Согласно теореме CAP, в распределенной системе невозможно одновременно достичь полной согласованности данных (Consistency), полной доступности (Availability) и отказоустойчивости при разделении сети (Partition tolerance). Это означает, что в случае разделения сети (например, из-за сбоя в сети или других сбоев) система должна выбрать между согласованностью данных и доступностью.
Более подробно о каждом компоненте теоремы CAP:
- Consistency (Согласованность): Это требование о том, что все узлы в распределенной системе видят одни и те же данные одновременно. То есть, если данные были изменены в одном узле, то все остальные узлы должны увидеть эти изменения перед выполнением новых операций.
- Availability (Доступность): Это требование о том, что каждый запрос к распределенной системе должен получать ответ (успешное завершение) независимо от возникновения отказов в системе. Другими словами, система должна быть всегда доступна для обработки запросов.
- Partition tolerance (Отказоустойчивость при разделении сети): Это требование о том, как система должна обрабатывать ситуации разделения сети. Разделение сети происходит, когда узлы системы не могут общаться напрямую друг с другом, но продолжают работать независимо. Отказоустойчивая система должна продолжать функционировать и обеспечивать доступность и согласованность данных даже в случае разделения сети.
При проектировании распределенных систем разработчики должны выбрать два из трех свойств CAP, которые наиболее важны для их конкретных потребностей. Этот выбор зависит от конкретного приложения и его требований к данным и доступности.