TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #134 3.28K
CAP-теорема простыми словами

«Быстро, качественно, дёшево» — выберите любые два.


Теорема CAP звучит почти так же. В CAP говорится, что в распределенной системе можно выбрать только 2 из 3-х свойств:

🔤 (consistency) — согласованность. Каждое чтение даст вам самую последнюю запись.

🔤 (availability) — доступность. Каждый живой узел всегда успешно выполняет запросы (на чтение и запись).

🔤 (partition tolerance) — устойчивость к разделению. Даже если между узлами нет связи, система продолжает работать.

Однако потеря связи между узлами — это не что-то, что мы можем «выбрать» или «не выбрать». Распределенная система на то и распределенная, что ее узлы связаны по сети, а сети ненадежны, могут возникать “разрывы”. Поэтому распределенная система по-умолчанию «выбирает» partition tolerance.

Пока сеть работает исправно, система может обеспечить и согласованность и доступность. Все узлы будут отвечать и содержать актуальные данные. Тип системы определяется тем, какое свойство она выберет при возникновении сбоя в сети: согласованность или доступность.

Представим, что у нас есть два узла, оба выступают как лидеры и могут принимать запросы как на чтение, так и на запись.
Как должна вести себя наша система, если между узлами пропадет связь?

Если в этом случае оба узла перестанут принимать запросы на запись, чтобы данные на них не разъехались в отсутствии связи, то это CP-система.
✔️ Мы сохранили согласованность: каждый запрос на чтение возвращает актуальные данные (мы же запретили их менять по-отдельности 🤪, значит они остаются актуальными на обоих узлах).
✖️ Но при этом отказались от доступности: запросы на запись мы не выполняем.

Подходит, например, для систем, связанных с деньгами. Условно чтобы не потратили баланс дважды — по разу с каждого узла 🤨

Если же в случае потери связи оба узла продолжат принимать запросы как на чтение, так и на запись, то это AP-система.
✖️ Согласованность мы потеряли: оба узла запишут новые данные, которые не смогут пока сообщить друг другу.
✔️ Но сохранили доступность: все запросы обрабатываются успешно.

Подходит, например, для соцсетей. Пользователи первого узла не увидят свежих новостей от пользователей второго узла, но приложение по-прежнему будет показывать пользователям каждого узла имеющиеся посты, позволит создавать новые посты и ставить лайки 😘

👀 PACELC-теорема

Ее можно назвать расширением CAP-теоремы. Звучит она так:

Если присутствует
🔤 Partition Tolerance, то выбираем между
🔤 Availability и
🔤 Consistency (это как в CAP)
🔤 Иначе (else), когда нет сетевого сбоя, выбираем между
🔤 Latency (скорость ответа) и
🔤 Consistency.

😱 Google сломал CAP-теорему

В 2017 году Google выпустили в публичный доступ на своей платформе базу данных Google Spanner. Как они сами писали, в терминах CAP Spanner обеспечивает и согласованность и доступность, хотя является географически распределенной.

Секрет в том, что Spanner использует не этот наш ненадежный интернет, а внутреннюю сеть Гугла, в которой Гугл обещает отсутствие проблем. С оговоркой, что кабели всё же могут перерезать.

Если кабель перережут, то Spanner выберет согласованность, то есть технически это CP система.

Еще в Spanner интересно реализована синхронизация времени операций с помощью доверительных интервалов, но об этом в другой раз.
  • 👍 26
  • 🔥 17
  • ❤ 6
More from @jane_yanchenko
  1. Sep 25, 2026В прошлой жизни, когда я была менеджером проектов, одним из первых мест работы у меня был…
  2. Sep 23, 2026Куда пропало обращение - развязка В прошлом посте у нас загадочно пропало обращение 58122.…
  3. Sep 23, 2026Куда пропало обращение Однажды от руководителя техподдержки пришло письмо, суть которого с…
  4. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  5. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  6. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →