Может ли Кассандра вернуть непоследовательное значение? - PullRequest
1 голос
/ 11 июня 2019

Я очень новичок в Кассандре и мне интересно, возможно ли, чтобы Кассандра возвратила несовместимое значение?

Например, скажем, у нас есть шесть узлов кластера.

LOCAL_QUORUM = (replication_factor / 2) + 1

Это даст нам локальный кворум, равный 4. Таким образом, для простой записи четыре из шести узлов должны ответить, что означает, что четыре узла будут иметь самое последнее значение.

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

Если так, что происходит, если клиент читает с одного из двух узлов, которые не были обновляется до появления протокола? Они рискуют получить устаревшую ценность?

Как чтение ремонта влияет на все это?

* Также краткое примечание. Не то, чтобы вы когда-либо делали это, но если вы установите коэффициент репликации равным уровню согласованности, будет ли он по существу работать так же, как 2PC (двухфазное принятие) на оборотной стороне?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Добро пожаловать в мир Кассандры

Возможно ли, чтобы Кассандра возвратила несоответствующее значение?

Да, у Кассандры по своей природе есть подход "в конечном итоге непротиворечивый", поэтому, если вы устанавливаете уровень согласованности для чтения с помощью ЛЮБОЙ или ОДИН , риск получить несогласованное возвращаемое значение возрастает. Вы можете увеличить этот параметр до ALL, чтобы обеспечить согласованность информации, но вы жертвуете производительностью и отказоустойчивостью. Уровни, используемые в приложении, будут зависеть от вашего варианта использования.

Например, скажем, у нас есть шесть узлов кластера.

LOCAL_QUORUM = (replication_factor / 2) + 1

Коэффициент репликации не зависит от количества узлов в кластере, правило состоит в том, что коэффициент репликации не должен быть больше количества узлов.

Предполагается, что вы используете коэффициент репликации 6 в кластере из 6 узлов:

Это даст нам Локальный Кворум, равный 4. Так что для простой записи, четыре из шесть узлов должны ответить, что означает, что четыре узла будут иметь последнее значение.

Насколько я понимаю, два узла, которые не были обновлены в конце концов получать обновления через протокол Gossip.

Механизм, обеспечивающий выполнение коэффициента репликации, заключается в подсказках хэндовера ; протокол сплетен используется узлами для сообщения о состоянии узла (от себя и от других узлов), некоторые из этих состояний "вверх", "вниз", "исправен", "присоединяется" , "уход" и т. д.

Если так, что произойдет, если клиент читает с одного из двух узлов, которые не обновлялись до появления протокола? Есть ли у них риск получить устаревшее значение?

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

1 голос
/ 11 июня 2019

Возможно ли, чтобы Кассандра возвратила несогласованное значение?

Ответ: Да, это так.

Это зависит от того, как вы собираетесь установить уровень согласованности чтения / записи.

Если так, что произойдет, если клиент прочитает данные с одного из двух узлов, которые не были обновлены до появления протокола? Они рискуют получить устаревшую стоимость?

Если вы установите уровень согласованности операций чтения на ONE или TWO , тогда все еще существует вероятность / риск получения устаревшего значения. Почему? : потому что Кассандра вернет значение клиенту, если получит ответ от указанного количества узлов.

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

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

R + W> N

где R - уровень согласованности операций чтения

W - уровень согласованности операций записи

N - количество реплик

Чтобы лучше понять, как оформить заказ: согласованные операции чтения и записи

Как чтение ремонта влияет на все это?

При восстановлении чтения Cassandra отправляет запрос дайджеста каждой реплике не напрямую участвует в чтении. Кассандра сравнивает все реплики и пишет самые последние версия для любого узла реплики, который не имеет его. Если согласованность запроса уровень выше ОДНОГО, Кассандра выполняет этот процесс на всех узлах реплики в передний план до того, как данные будут возвращены клиенту. Читать ремонт, ремонт любого узла запрашивается прочитанным. Это означает, что для уровня согласованности ОДНОГО данные не отремонтирован, потому что сравнение не проводится. Для QUORUM только узлы, которые исправлены запросы, не все узлы.

Проверьте эту ссылку для более подробной информации:

  1. Восстановление чтения: восстановление во время пути чтения

  2. Ремонт узлов

...