Непротиворечивость чтения Cassandra при сбое пути записи - PullRequest
0 голосов
/ 08 января 2020

Я новичок в Кассандре и пытаюсь выяснить, как Кассандра обеспечивает последовательность в случае неудачных записей. Рассмотрим следующий сценарий, где CL равен QUORUM, и в этом случае 2 из 3 реплик должны ответить. Запрос на запись будет go на все 3 реплики, как обычно, если запись на 2 реплики завершится неудачно и будет выполнена успешно на 1 реплике, cassandra вернет Failed. Поскольку Кассандра не выполняет откат, запись будет продолжать существовать при успешной реплике. Теперь, когда чтение приходит с CL = QUORUM, запрос на чтение будет перенаправлен на 2 узла реплики, и если один из узлов реплики является ранее успешным, то Cassandra вернет новые записи, так как у него будет последняя отметка времени. Но с точки зрения клиента эта запись вообще не была написана, поскольку Кассандра вернула ошибку во время записи. Если это так, то Кассандра никогда не будет последовательной в этом сценарии. Как справиться с таким сценарием Пожалуйста, дайте мне знать, если это понимание верно.

1 Ответ

0 голосов
/ 08 января 2020

Ваше понимание верно. Клиент в этом случае должен получить UnavailableException, но должен понимать, что запись в конечном итоге будет распространяться на другие реплики (если узлы живы или оживают), и что это не неудачная запись.

Для получения более подробной информации см. Следующие статьи:

...