В теории баз данных теорема CAP , также называемая теоремой Брюэра в честь ученого-компьютерщика Эрика Брюэра , утверждает, что любое распределенное хранилище данных может предоставить только две из следующих трех гарантий: [1] [2] [3]
При возникновении сбоя в работе сетевого раздела необходимо решить, следует ли выполнить одно из следующих действий:
Таким образом, если сеть разделена, приходится выбирать между согласованностью и доступностью.
Ни одна распределенная система не застрахована от сетевых сбоев, поэтому сетевое разделение, как правило, приходится мириться. [7] [8] При наличии раздела остается два варианта: согласованность или доступность . При выборе согласованности вместо доступности система вернет ошибку или тайм-аут, если нельзя гарантировать актуальность определенной информации из-за сетевого разделения. При выборе доступности вместо согласованности система всегда будет обрабатывать запрос и пытаться вернуть самую последнюю доступную версию информации, даже если она не может гарантировать ее актуальность из-за сетевого разделения.
При отсутствии раздела могут быть удовлетворены как доступность, так и согласованность. [9]
Системы баз данных, разработанные с учетом традиционных гарантий ACID , такие как СУРБД, выбирают согласованность вместо доступности, тогда как системы, разработанные на основе философии BASE , распространенной, например, в движении NoSQL , выбирают доступность вместо согласованности. [10]
По словам Эрика Брюэра, специалиста по информатике из Калифорнийского университета в Беркли , теорема впервые появилась осенью 1998 года. [10] Она была опубликована как принцип CAP в 1999 году [11] и представлена Брюэром в качестве гипотезы на Симпозиуме по принципам распределенных вычислений (PODC) 2000 года. [12] В 2002 году Сет Гилберт и Нэнси Линч из Массачусетского технологического института опубликовали формальное доказательство гипотезы Брюэра, сделав ее теоремой . [1]
В 2012 году Брюэр разъяснил некоторые из своих позиций, включая то, почему часто используемая концепция «два из трех» может быть несколько вводящей в заблуждение, поскольку разработчикам систем нужно жертвовать согласованностью или доступностью только при наличии разделов; существуют методы управления разделами и восстановления. Брюэр также отметил различное определение согласованности, используемое в теореме CAP, относительно определения, используемого в ACID . [10] [13]
Похожая теорема, устанавливающая компромисс между согласованностью и доступностью в распределенных системах, была опубликована Бирманом и Фридманом в 1996 году. [14] Результат Бирмана и Фридмана ограничил эту нижнюю границу некоммутирующими операциями.
Теорема PACELC , представленная в 2010 году, [9] основывается на CAP, утверждая, что даже при отсутствии разделения существует другой компромисс между задержкой и согласованностью. PACELC означает, что если происходит разделение (P), то компромисс заключается между доступностью (A) и согласованностью (C); в противном случае (E), то компромисс заключается между задержкой (L) и согласованностью (C). Некоторые эксперты, такие как Марк Брукер, утверждают, что теорема CAP особенно актуальна в периодически подключаемых средах, таких как те, которые связаны с Интернетом вещей (IoT) и мобильными приложениями . В этих контекстах устройства могут стать разделенными из-за сложных физических условий, таких как отключение электроэнергии или при входе в замкнутые пространства, такие как лифты. Для распределенных систем , таких как облачные приложения , более целесообразно использовать теорему PACELC , которая является более всеобъемлющей и учитывает компромиссы, такие как задержка и согласованность, даже при отсутствии сетевых разделов. [15]
В феврале 2012 года Эрик Брюэр представил обновленную точку зрения на свою теорему CAP ... Брюэр теперь описывает аксиому "2 из 3" как несколько вводящую в заблуждение. Он отмечает, что проектировщикам нужно жертвовать согласованностью или доступностью только при наличии разделов, и что достижения в методах восстановления разделов позволили проектировщикам достичь высоких уровней как согласованности, так и доступности.