Представь себе распределённую систему, например, базу данных, которая работает на нескольких серверах в разных местах.
Когда один из серверов выходит из строя или между ними нарушается связь (например, из-за проблем в сети), то система оказывается в трудной ситуации.
Теорема CAP говорит:
Когда что-то ломается, ты можешь выбрать только два из трёх:
- Согласованность (Consistency) —
Все видят одни и те же данные. Если ты записал что-то, все другие сразу это увидят. - Доступность (Availability) —
Система всегда отвечает на запросы, даже если есть проблемы. - Устойчивость к разделению (Partition tolerance) —
Система продолжает работать, даже если связь между серверами прервалась.
Простой пример:
Представь, что у тебя есть банкоматы в разных городах, и они подключены к общей системе. Вдруг интернет между ними пропал (это разделение сети).
Теперь:
- Если ты выберешь доступность и устойчивость к разделению (AP) — банкоматы будут работать, но может быть, что один покажет, что у тебя есть деньги, хотя другой уже показал снятие. Данные могут временно отличаться (нет согласованности).
- Если ты выберешь согласованность и устойчивость к разделению (CP) — банкоматы будут показывать только правильные данные, но, возможно, ты не сможешь снять деньги, пока сеть не восстановится (нет доступности).
Вывод:
Нельзя получить всё сразу. При сбоях ты должен пожертвовать либо точностью, либо доступом.