Re[24]: Выбор NoSQL
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.06.16 11:19
Оценка:
Здравствуйте, chaotic-kotik, Вы писали:

CK>CAP определяет availability как liveness, формально, определение не очень строгое и под него действительно можно подвести все что ты перечислил, но понимается под этим именно liveness. Consistency из CAP определяется как safety (agreement & validity).

То есть ты согласен, что это совсем не тот availability о котом говорят в контексте HA?
И разу следующий вопрос — в чем ценность свойства liveness? Какие гарантии или преимущества оно дает? На практике никаких.



G>>То есть в грубом приближении AP система это /dev/null.

CK>Можно представить AP систему, работающую как /dev/null, но это не значит, что нельзя создать AP систему, имеющую полезные свойства.
Можно, нужны будут дополнительные гарантии из области Consistency, которые приведут к противоречию с теоремой.

CK>Еще раз, мы обсуждаем NoSQL, можно себе представить (легко) систему, которая полностью работоспособна, никаких ошибок нет и в помине, при этом система может быть недоступной в терминах CAP и запрос на запись у тебя будет отваливаться по таймауту иногда. При этом даунтайма нет, каждый хост пингуется, каждый endpoint принимает входящие подключения и отвечает на запросы.

И? С точки зрения клиента клиента все равно недоступна система или не может выполнить запрос. С точки зрения cap это разные явления

CK>Вот представь себе веб-приложение — интернет магазин. Ты жмешь кнопку — "добавить в корзину", страница берет и зависает. Даунтайма нет, все работает, просто на хост, на котором крутится БД, пришло очень много запросов и он немного тупит, из-за чего отвечает на запросы с задержкой, из-за чего консенсус долго работает и иногда вообще отваливается. Но если бы система была AP, то запрос на запись пошел бы сразу на несколько хостов и success вернулся бы сразу, как только один из них вернул бы success.

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

Для любых данных, которые нельзя терять или искажать такой подход не работает.

G>>Availability в CAP — бесполезное на практике свойство и его потеря по факту может не значить вообще ничего.

G>>Partition tolerance кстати тоже. В большинстве случаев partition tolerant системы не могут сохранить согласованность данных даже через любое длительное время.
CK>Wat?
Твои примеры ниже прекрасно иллюстрируют что я говорю.

CK>Статья написана академиками (а не практикующими инженерами) в 2002-м году. В 2014-м году никто в академическом сообществе так больше никто не считал. Рекомендую ознакомиться со статьей Network Is Reliable. Пара цитат:


По-моему из этого всего можно сделать вывод, что ни availability, ни partition tolerance в реальном мире не помогают строить надежные системы.
Единственный живой вариант — делать CA системы, то есть кворумы с node majority.
Только при наличии существенных ограничений на функциональность системы можно где-то ослаблять consistency.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.