Когда согласованность данных не является проблемой? - PullRequest
0 голосов
/ 12 мая 2019

Я новичок в изучении распределенных систем, и я прочитал о теореме CAP, мне интересна система AP, такая как Cassandra.

Мой вопрос: в каких случаях вы действительно можете пожертвовать согласованностью?По сути, то, что я говорю, - пожертвовать согласованностью - значит обслуживать неточные данные. В каких случаях вы фактически использовали бы хранилище данных AP, такое как Cassandra?Я не могу вспомнить ни одного случая, когда бы я не хотел, чтобы мои чтения были последовательными.

Ответы [ 4 ]

3 голосов
/ 12 мая 2019

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

Представьте, что вы разрабатываете социальную сеть, где у пользователей есть друзья и собственные новостные ленты.Неважно, имеет ли лента конкретного пользователя временную задержку в пять минут (его список каналов имеет возможную согласованность).В этом сценарии пропущено 2/3 самых последних обновлений в новостной ленте, если эти фиды в конечном итоге появятся.И на самом деле, Facebook создал свою новостную ленту с использованием Cassandra.

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

2 голосов
/ 12 мая 2019

Мой вопрос: в каких случаях вы можете пожертвовать последовательностью?

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

Например: если я добавлю фигурку Rey Star Wars в свою корзину покупок, базовый механизм рекомендаций запускает запрос аналогичных итоговых шаблонов закупок на основе других, которые также приобрели фигурку Rey. Запрос возвращает 5 лучших результатов продукта и размещает их внизу страницы.

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

tl; dr; Реальный вопрос, который нужно задать; Является ли получение 1015 * несколько точных списка из 5 рекомендаций по продукту менее чем за 10 мс, лучше, чем получение 100% точного списка из 5 рекомендаций по продукту за 100 мс?

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

1 голос
/ 14 мая 2019

'C' в CAP относится к линеаризуемости, которая является очень сильной формой согласованности, которая вам не нужна большую часть времени.

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

  1. Лидер выборов
  2. Разрешение конечным пользователям создавать свой уникальный идентификатор пользователя
  3. Распределенная блокировка и т. Д.

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

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

Кассандра, как говорят, имеет настраиваемую последовательность. Вы можете записывать клики пользователей или действия для анализа. Вы в порядке, если некоторые данные будут потеряны, но вы не можете пойти на компромисс с производительностью. Вы, вероятно, использовали бы уровень согласованности записи ЛЮБОЙ с включенными подсказками (небрежный кворум).

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

Cassandra особенно полезна в тех случаях, когда у вас не будет много одновременных обновлений для одних и тех же данных. Причина в том, что, в отличие от динамо-архитектуры, она не использует векторные часы для разрешения конфликтов между репликами. Вместо этого он использует Last Write Wins (LWW) на основе метки времени. Если временные метки совпадают, используется лексикографический порядок. Поскольку время на узлах не может быть точным даже при наличии NTPD, существует вероятность потери данных, хотя Кассандра предприняла некоторые шаги, чтобы этого избежать - например, временная метка на стороне клиента вместо временной метки на стороне сервера.

0 голосов
/ 12 июня 2019

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

Вы что-то ответили на SO, но ответ не появляется, когда вы посещаете страницу?Можно терпеть.ТАК быть внизу?Не может бытьКритические финансовые системы скорее будут иметь сильную согласованность, чем доступность.Время от времени серверы моего банка отключаются, когда я пытаюсь произвести платеж.

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

...