Cassandra WRITE = ALL и READ = ОДНА применимость - PullRequest
0 голосов
/ 06 февраля 2019

Учитывая, что у нас есть установка узлов 2x5 (через 2 DC) и коэффициент репликации 3, и тот факт, что мы создаем представления асинхронно (чтобы мы могли безопасно повторить неудачные операции), имеет ли смысл использование WRITE = ALL и READ = ONE?

Если одна реплика выходит из строя, как мы можем узнать время восстановления и узнать, как правильно выбрать интервал повторных попыток и время ожидания?

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Комбинация WRITE = ALL и READ = ONE является правильной в смысле согласованности - после того, как вы записали все реплики, вы действительно можете прочитать любую и ожидать последних данных.Однако это плохо для высокой доступности - если какая-либо из 6 реплик в обоих контроллерах домена не работает, запись не может быть завершена.Если один из узлов не работает в течение часа, вы не можете выполнить запись в течение часа.В некоторых установках пакетной обработки это может иметь смысл, но обычно это неприемлемое поведение для интерактивных рабочих нагрузок, где первостепенное значение имеет высокая доступность.

Если вы действительно не заботитесь о высокой доступности и просто хотитенапишите, когда все узлы подняты, тогда я думаю, WRITE = ALL может работать.Вы можете сказать, когда все узлы работают, например, с помощью "nodetool".Или просто периодически повторяйте запись.

0 голосов
/ 07 февраля 2019

Любая из приведенных ниже комбинаций должна давать вам правильные данные:

  1. ЗАПИСЬ = ВСЕ ЧИТАТЬ = ОДИН
  2. ЗАПИСАТЬ = ОДИН ЧИТАТЬ = ВСЕ
  3. ЗАПИСАТЬ = LOCAL_QUORUMREAD = LOCAL_QUORUM

Вы можете настроить уровень согласованности в вашем приложении в соответствии с загрузкой приложения.

По моему мнению, номер 3 LOCAL_QUORUM должен работать лучше, поскольку иногда узел можетбыть под высокой нагрузкой или, возможно, не работает.Ваше приложение не будет затронуто.

В случае, если у вас больше записей, чем READ; WRITE CL = ALL замедлит работу вашего приложения.

...