SobesLab логотип SobesLab

Ответ

CAP-теорема гласит, что в распределённой системе, хранящей данные, из трёх свойств — Consistency (согласованность), Availability (доступность) и Partition Tolerance (устойчивость к разделению сети) — одновременно на все 100% можно обеспечить только два. Расшифровка: Consistency — все узлы видят одни и те же данные в одно время (строгая консистентность данных между репликами); Availability — система всегда отвечает на запрос (каждый запрос к неперекрывшемуся узлу получает ответ, даже если некоторые другие узлы упали); Partition Tolerance — система продолжает работать при разделении сети (когда узлы потеряли связь друг с другом). Согласно CAP, при сетевом разделении (а его нельзя избежать в реальных сетях) разработчикам приходится делать выбор: либо пожертвовать строгой консистентностью (разрешить разным узлам иметь рассинхрон временно, но система останется доступной — это категория AP, например, Cassandra, которая отдаёт возможно устаревшие данные, но всегда отвечает), либо пожертвовать доступностью (система остановит обслуживание части запросов, но не вернёт неконсистентных данных — категория CP, например, MongoDB в режиме с подтверждениями: при проблемах с сетью остановит запись на части узлов для консистентности). Полностью CAP-совместимой быть нельзя: либо CP, либо AP (CA в распределённой системе невозможно, так как P всегда нужно учитывать). CAP теорема помогает понять компромиссы при проектировании систем хранения данных.