Добро пожаловать в мир Кассандры
Возможно ли, чтобы Кассандра возвратила несоответствующее значение?
Да, у Кассандры по своей природе есть подход "в конечном итоге непротиворечивый", поэтому, если вы устанавливаете уровень согласованности для чтения с помощью ЛЮБОЙ или ОДИН , риск получить несогласованное возвращаемое значение возрастает. Вы можете увеличить этот параметр до ALL
, чтобы обеспечить согласованность информации, но вы жертвуете производительностью и отказоустойчивостью. Уровни, используемые в приложении, будут зависеть от вашего варианта использования.
Например, скажем, у нас есть шесть узлов кластера.
LOCAL_QUORUM = (replication_factor / 2) + 1
Коэффициент репликации не зависит от количества узлов в кластере, правило состоит в том, что коэффициент репликации не должен быть больше количества узлов.
Предполагается, что вы используете коэффициент репликации 6 в кластере из 6 узлов:
Это даст нам Локальный Кворум, равный 4. Так что для простой записи, четыре из
шесть узлов должны ответить, что означает, что четыре узла будут иметь
последнее значение.
Насколько я понимаю, два узла, которые не были обновлены в конце концов
получать обновления через протокол Gossip.
Механизм, обеспечивающий выполнение коэффициента репликации, заключается в подсказках хэндовера ; протокол сплетен используется узлами для сообщения о состоянии узла (от себя и от других узлов), некоторые из этих состояний "вверх", "вниз", "исправен", "присоединяется" , "уход" и т. д.
Если так, что произойдет, если клиент читает с одного из двух узлов, которые
не обновлялись до появления протокола? Есть ли у них риск
получить устаревшее значение?
Вы захотите прочитать о пути чтения Кассандры ; как т. д., это будет зависеть от коэффициента репликации, а также от уровня согласованности для операции чтения. Вы также сможете снизить риск получения неточных данных, жертвуя отказоустойчивостью и производительностью.