Является ли теорема CAP красной селедкой?

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

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

  • Интернет-маршрутизация удивительно надежна.
  • Теорема CAP применима только к сетевым разделам, в которых две группы живых машин не могут общаться.
  • Почти все реальные сетевые разделы состоят из катастрофических сбоев или случаев, когда один из разделов очень мал, а другой очень большой, а маленький может просто закрыться.
  • Ошибки машины сами по себе не являются сетевым разделом.

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

Исправления? Комментарии? Flames?


Литература:
  • Обзор теоремы CAP см. в этой статье Джулиана Брауна здесь
  • Теорема CAP на wikipedia

Ответ 1

Теорема CAP доказана Нэнси Линч и др. в лабораториях MIT.

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

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

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

Что касается ваших пунктов:

  • Интернет-маршрутизация удивительно надежна.

Плавно надежно.

  • Теорема CAP применима только к сетевым разделам, в которых две группы живых машин не могут общаться.

Теорема CAP применяется к любой распределенной системе.

Остальные два момента действительно не имеют особого смысла.

Есть и другие профессора, которые утверждают, что CAP является неполным и что для него есть больше, например, латентность. Но теорема CAP имеет смысл.

Существует также теорема "BASE" (в основном доступная, мягкое состояние и конечная консистенция). Многие базы данных NoSQL поддерживают эту теорему.

Посмотрите мой блог на теорема CAP и NoSQL.

Ответ 2

Я рекомендую вам прочитать эту статью: Конкуренция пивоваров и возможность согласованного, доступного, разрешимого по разделам Web Services.pdf

После прочтения я понял две вещи.

Во-первых, гипотеза Брюера касается любой веб-службы, а не только о распределении. Затем в этом контексте имеет смысл выбрать два из трех свойств. Например, пусть игнорировать толерантность к разделам. С моей точки зрения, в этом случае у вас есть 2 варианта:

  • Использовать одну машину:. Тогда нет сети, тогда я не беспокоюсь о переносимости разделов, но доступность всей системы зависит от того, что одна машина должна быть в сети.
  • Использовать несколько машин, но без репликации: Просто используйте каждую машину для обработки/хранения данных, которые не имеют сильных функциональных отношений. Если какая-либо машина выходит из строя, остальные данные доступны и согласованы.

Возможно, вы можете подумать, что есть третий вариант: использовать несколько машин и репликации и не заботьтесь о совместимости с разделами. Пусть это так! В этом случае, если какая-либо машина или соединение между машинами вылетают из строя, нет способа гарантировать согласованность или доступность, потому что у системы не будет процессов для восстановления своего правильного состояния данных. Здесь обратите внимание, что добавление значений репликации для повышения устойчивости к томам.

Тогда второе, что понято:

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

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