Какое значение имеет R + W> N для кластеров Кассандры? - PullRequest
22 голосов
/ 19 октября 2011

Это введение в Cassandra Replication and Consistency (слайды 14-15) смело утверждает:

R+W>N гарантирует перекрытие кворумов чтения и записи.

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

Я понимаю, что сумма чтения и записи Уровни согласованности (R + W) больше, чем Коэффициент репликации (N) - хорошая идея ... но какая большая дело

Каковы последствия и как R + W> N сравнивается с альтернативами?

  • R + W
  • R + W = N
  • R + W >> N

Ответы [ 2 ]

29 голосов
/ 19 октября 2011

Основная проблема, которую мы пытаемся решить, такова:

Может ли возникнуть ситуация, при которой чтение не возвращает наиболее актуальное значение?

Очевидно, что по возможности этого лучше избегать!

Если R + W <= N, то такая ситуация может возникнуть. </strong>

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

Если R + W> N, тогда эта ситуация гарантированно не произойдет.

Есть N узлов, которые могут содержать значение.A записывать контакты не менее чем на W узлах - наклеить на каждый из них наклейку "write" .Последующее чтение контактов по крайней мере на R узлах - поместите наклейку «read» на каждый из них.Есть наклейки R + W, но только N узлов, поэтому как минимум один узел должен иметь обе наклейки.То есть, по крайней мере, один узел участвует как в чтении, так и в записи, поэтому он может вернуть последнюю запись в операцию чтения.

R + W >> N невозможно.

Максимальное количество узлов, с которых вы можете читать или записывать, равно N (коэффициент репликации по определению).Таким образом, самое большее, что мы можем иметь, это R = N и W = N, то есть R + W = 2N.Это соответствует чтению и письму на ConsistencyLevel ALL.То есть вы просто пишете на все узлы и читаете со всех узлов, ничего сложного не происходит.

4 голосов
/ 20 октября 2017

Запись кворума и чтение кворума позволяют обнаруживать устаревшие значения в системе репликации без лидера.

Например, у нас есть 3 репликатора A, B, C (N = 3).C не работает во время обновления пользователя.Обновление принимается как для A, так и для B (запись = 2).

Когда пользователь читает значение, C возвращается.Можно прочитать устаревшее значение в C. Чтобы обнаружить устаревшее значение, пользователь также будет читать из B (Read = 2).

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

В этом сценарии, где Write =2, Read = 2, N = 3, R + W> 3, мы уверены, что любое устаревшее значение может быть обнаружено.

Для R + W = 3 можно записать в A и B,но только чтение из C. В этом случае мы не можем обнаружить устаревшее значение.

...