CAP and PACELC
CAP Теорема
CAP теорема, предложенная Эриком Брювером, гласит, что в любой распределённой системе невозможно одновременно гарантировать выполнение всех трёх свойств:
- Consistency (Согласованность):
• Все узлы системы возвращают одно и то же актуальное значение данных.
- Availability (Доступность):
• Каждый запрос получает ответ, даже если некоторые узлы системы недоступны.
- Partition Tolerance (Устойчивость к разделению сети):
• Система продолжает работать, даже если между узлами возникает потеря связи (сеть разрывается или сообщения теряются).
CAP теорема утверждает, что из трёх свойств вы можете выбрать только два:
• CP (Consistency + Partition Tolerance):
• Система поддерживает согласованность данных и устойчива к сетевым разделениям, но может жертвовать доступностью. Пример: большинство реляционных баз данных с распределённой репликацией.
• AP (Availability + Partition Tolerance):
• Система остаётся доступной и устойчива к разделениям сети, но может допускать временные нарушения согласованности данных. Пример: NoSQL базы данных, такие как Cassandra и DynamoDB.
• CA (Consistency + Availability):
• Такие системы теоретически существуют, но только в условиях отсутствия разделения сети (что практически невозможно в распределённых системах).
PACELC Теорема
PACELC теорема расширяет CAP теорему, добавляя элемент времени. Она утверждает, что в распределённой системе, кроме момента, когда возникает Partition (разделение сети), нужно также учитывать поведение системы в нормальном состоянии, когда нет разделения сети.
Расшифровка PACELC:
• Partition, Availability, Consistency:
• Как и в CAP, при сетевом разделении вы должны выбрать между доступностью (A) и согласованностью (C).
• Else, Latency, Consistency:
• В условиях нормальной работы системы (без разделения сети), вам нужно выбрать между задержкой (L) и согласованностью (C). Более строгая согласованность часто приводит к увеличению задержки.
Пример выбора по PACELC
• PA/EL (Partition-Availability, Else-Latency):
• Системы, такие как DynamoDB или Cassandra, предпочитают доступность в случае разделения сети, а также стараются минимизировать задержки в условиях нормальной работы.
• PC/EC (Partition-Consistency, Else-Consistency):
• Реляционные базы данных и такие системы, как HBase, жертвуют доступностью при разделении сети, но поддерживают строгую согласованность как в условиях разделения, так и без него.
Важные моменты
• ACID подходит для систем, где важна строгая согласованность и надёжность транзакций (например, банковские системы).
• BASE применяется в распределённых системах, где нужно обеспечить высокую доступность и масштабируемость, даже если это приводит к временной несогласованности данных.
• CAP теорема утверждает, что в условиях сетевых разделений невозможно одновременно обеспечить согласованность, доступность и устойчивость к разделению, поэтому системы должны выбирать два свойства из трёх.
• PACELC теорема добавляет к CAP дополнительный аспект выбора между задержкой и согласованностью в условиях нормальной работы системы.