Является ли теорема 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, примененная к распределенным системам, наиболее известна следующим образом: В отношении устойчивости к томам невозможно гарантировать согласованность и доступность в то же время.