Теорема CAP неверна?

#sql #database #database-design #nosql

#sql #База данных #проектирование базы данных #nosql

Вопрос:

Определение теоремы CAP взято из Википедии: https://en.wikipedia.org/wiki/CAP_theorem

Распределенная компьютерная система не может одновременно предоставлять все три из следующих гарантий:

  • Согласованность (при каждом чтении получает самую последнюю запись или ошибку)
  • Доступность (каждый запрос получает ответ без гарантии, что он содержит самую последнюю версию информации)
  • Допуск к разделению (система продолжает работать, несмотря на произвольное разделение из-за сбоев сети)

Моя мысль:

Для любой системы с CA они могут нормально работать без разделения. Когда раздел существует, система может вернуться к CP или AP, которые могут продолжать работать. Поскольку система может продолжать работать, она также выполняет P. Следовательно, любая система CA также является системой CAP. Таким образом, утверждение о невозможности сосуществования всех CAP в системе неверно.

Комментарии:

1. Не уверен, что не так с этим вопросом? В целом верная, хотя и ложная, теория.

Ответ №1:

C и A означают, что система предоставляет эти гарантии перед лицом разделов. Таким образом, отказ от этих свойств во время разделения приводит к тому, что свойство не сохраняется.

Компромисс CA уместен только во время разделения (потому что без разделов мы можем отказаться от P и получить CA). Затем вам нужно решить.

Практически релевантными вариантами являются CP против AP, поскольку разделы всегда могут произойти.

Комментарии:

1. Спасибо за ваш ответ. Вы имеете в виду, что CAP — это состояние, поскольку вы сказали «без разделов мы можем отказаться от P и получить CA»?

2. CAP — это свойство системы, и для сохранения одного свойства оно должно сохраняться постоянно. Лучшей формулировкой было бы «Если мы предположим, что разделов нет, мы должны построить систему, которая является CA, потому что нам не нужно свойство P.»

3. Итак, теорема CAP на самом деле касается выбора 1 из CA, а не 2 из CAP. Если CAP — это свойство, которое должно выполняться всегда, то при наличии разделов система CA не смогла бы сохранить свои гарантии. Спасибо, что прояснили мое замешательство.

4. @netok Это все еще два варианта из трех. Читать infoq.com/articles/… которая цитируется в статье Википедии. «Разрешение хотя бы одному узлу обновлять состояние приведет к тому, что узлы станут несогласованными, что приведет к потере C. Аналогично, если выбор заключается в сохранении согласованности, одна сторона раздела должна действовать так, как будто она недоступна, тем самым теряя A. Только когда узлы обмениваются данными, возможно сохранить как согласованность, так и доступность, тем самым теряя P. Общее мнение заключается в том, что для систем большой площади разработчики не могут отказаться от P … »

5. Или другая формулировка: «Предполагая, что разделов нет, мы получаем более сильный результат, который равен всем 3 из CAP».

Ответ №2:

Во-первых, о ваших предположениях.

На самом деле CA и CP идентичны, так как то, что произойдет, если CA система получит сетевой раздел, она потеряет Availiability . Итак, рано или поздно это произойдет, поскольку вероятность того, что какой-либо из ваших узлов выйдет из строя, возрастает exponentially по мере увеличения числа узлов.

Вам нужно знать, что если вы пренебрегаете опцией в CAP Theorem как выбрать CA и пренебрегаете или оставляете P , это будет сохраняться в течение всего жизненного цикла вашей распределенной системы. И, таким образом, мы не можем достичь CA практически, хотя эффективно мы можем достичь этого, как с базой данных Google Cloud Spanner Database, в которой указано, что она 99.999% доступна, поэтому это не гарантирует, что будет 100% доступность, но гарантирует, что она будет настолько мала, что ею можно пренебречь для бизнеса.

Кроме того, база данных Postgresql может эффективно работать CA с помощью репликации.

Все вышеперечисленные базы данных пытаются поддерживать CA , сохраняя определенную степень согласованности и доступности.

Во-вторых, теорема CAP неверна?

Есть некоторые критические замечания по CAP Theorem :

  1. Единственная ошибка, рассматриваемая CAP Theorem , — это сетевой раздел, такого рода ошибки абсолютно случаются, но это не единственный случай, который может пойти не так, поскольку узлы могут аварийно завершать работу, вы можете столкнуться с ошибкой в программном обеспечении, поэтому нам нужно рассмотреть гораздо более широкий спектр компромиссов.
  2. CAP Theorem ничего не говорит о latency , о чем люди, как правило, заботятся больше, чем о доступности. Фактически, CAP Theorem доступным системам разрешается отвечать сколь угодно медленно, и их все равно можно назвать доступными. пользователи не будут вызывать нашу систему Available , если загрузка страницы занимает 2 минуты.
  3. Системы, которые склонны отказываться Consistency от Availability того, что есть partition , также склонны отказываться от Consistency того latency , что есть no Partition .
  4. C и A в CAP Theorem так и есть Asymmetric , поскольку системы, которые жертвуют собой Consistency (AP-системы), как правило, делают это постоянно, а не только при наличии сетевого раздела. Кроме того, то же самое для систем, которые жертвуют Availability (CP-системы), имеет тенденцию делать это постоянно, а не только при наличии сетевого раздела. Это означает, что это происходит не Consistent все время или не Available постоянно. В предыдущих двух случаях они являются недоступными бесполезными системами, поскольку CAP Theorem не дают нам представления о том, что произойдет, когда система будет работать нормально.