Вопрос

http://en.wikipedia.org/wiki/cap_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/podc-keynote.pdf

Я думаю, это не очень просто, почему только два из

  1. Последовательность
  2. Доступность
  3. Терпимость перегородки

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

Я не ищу доказательства, просто хороший способ понять, почему эта теорема может иметь смысл. Что такое рассуждения?

Это было полезно?

Решение

Хорошо, давайте представим, что у вас есть распределенная база данных. Допустим, у вас есть узел в Орегоне и один в Калифорнии. Теория CAP говорит, что вы столкнетесь с проблемами при настройке этого типа базы данных.

Например, если вы запросите данные из одной базы данных, он должен быть таким же, как и данные в другой базе данных. Это гарантирует, что любое значение, которое вы имеете в одной базе данных, будет в другой (Последовательность теории кепки). Это позволяет вам обновить данные в одной базе данных и запросить их от другой, получая те же результаты.

A computer updating data in Oregon, transfers the data to California

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

Проблема с распределенными транзакциями, такими как приведенные выше, возникает, когда мы хотим иметь высокую доступность. В этом сценарии выше процесс попытки получить обе базы данных в синхронизации является очень, очень медленным процессом. (Представьте себе, мы должны отправить данные из Орегона в Калифорнию, убедиться, что они туда попадают, убедитесь, что обе базы данных имеют блокировки данных и т. Д.) Это вызывает серьезные проблемы, когда мы хотим, чтобы система была быстрой и отзывчивой даже во время времена высокого спроса. (Это Доступность теоремы Кэпа.)

Обычно то, что мы делаем, чтобы обеспечить высокую доступность, так это то, что мы используем репликацию вместо распределенных транзакций. Таким образом, вместо того, чтобы гарантировать, что Калифорния может принять данные, мы просто продолжаем и сохраняем их в узле Орегона, а затем отправляем данные в Калифорнию, когда мы добираемся до него. Это гарантирует, что мы всегда можем хранить данные, независимо от того, готова ли Калифорния хранить данные или нет.

The Oregon node updates the data while California reads the data.  Later, the data is moved to California

Это улучшает доступность, но за счет согласованности. Видите, если кто-то обновляет данные в Орегоне, а затем кто-то (в то же время) читает данные в Калифорнии, он не получает новые данные-базы данных больше не согласованы. На самом деле, они не будут последовательными, пока Орегон не отправит данные в Калифорнию!

Итак, это наличие-VS- согласованность компромисс.

Терпимость перегородки является третьим аспектом теории Кэпа. Разделение, в этом контексте, является идеей о том, что база данных (или другая распределенная система) может разорвать в отдельных разделах и все еще функционировать правильно.

Вопрос возникает, что происходит, когда обе базы данных работают правильно, но ссылка из Орегона и Калифорнии разорвана?

Oregon is being updated while the California node is being read.  The network between the nodes is severed.

Если мы обновим базу данных в Орегоне, нам нужно так или иначе доставить данные в Калифорнию (распределенная транзакция или репликация). Однако, если связь между ними разорвана, то система стала разделенной, и базы данных больше не связаны вместе.

Когда это произойдет, ваш выбор должен прекратить разрешение обновлений (для поддержания согласованности) за счет доступности или позволить обновлениям (для поддержания доступности) за счет согласованности.

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


Очевидно, что это больше, чем это, но это пара примеров того, как эти три основных аспекта распределенных систем работают друг от друга и против друг друга. Джулиан Браун Объяснение теории CAP - отличное место, чтобы узнать больше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top