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

Это введение в репликацию и согласованность Кассандры (слайды 14-15) смело утверждает:

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

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

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

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

  • R + W < N
  • R + W = N
  • R + W → N

Ответы

Ответ 1

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

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

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

Если R + W <= N, то эта ситуация может произойти.

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

Если R + W > N, тогда такая ситуация не будет выполняться.

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

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

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

Ответ 2

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

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

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

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

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

При R + W = 3 возможно записать в и B, считанные из C. Мы не можем обнаружить статированное значение.