Каковы последствия 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. Мы не можем обнаружить статированное значение.