Что произойдет, если узел в базе данных Cassandra выйдет из строя при передаче данных клиенту? - PullRequest
0 голосов
/ 14 мая 2018

Допустим, у нас есть кластер Cassandra из 6 узлов и RF = 3.Таким образом, если мы сделаем запрос на извлечение данных из определенного узла и во время обработки или передачи данных, узел потерпит неудачу.Каковы возможные результаты для следующего сценария?

  1. Допустим, он обрабатывает необходимые данные с диска, и узел умирает в процессе, будет ли координатор (узел, получивший наш запрос)) повторно отправить запрос одному из реплицированных узлов или просто вернуть ошибку клиенту?

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

В любом случае, как программист, мы должныЯвно закодируйте любые условия, чтобы сообщить серверу Cassandra, или это все внутреннее?

Заранее спасибо.

PS: Мне жаль, если подобный вопрос уже задавался ранее.Я попытался найти, но не смог найти.

1 Ответ

0 голосов
/ 14 мая 2018

Одним из наиболее важных понятий, которые нужно понять в Кассандре, является ее переменная «Уровень согласованности», или CL.Возможно, наиболее распространенным параметром является CL = QUORUM, что означает, что при RF = 3 (каждый фрагмент данных реплицируется на 3 узла), Cassandra потребует двух успешных ответов из двух реплик, прежде чем возвращать результат вclient.

При запросе определенного раздела координатор начнет с отправки запросов клиента в 2 из 3 реплик, которые, как известно, содержат раздел.Cassandra сохраняет оценку средней задержки ответа, и когда эта оценка прошла, она отправляет третий запрос третьей реплике.Такой таймаут произойдет в тех случаях, которые вы упомянули - если ответ не завершится быстро (не имеет значения, частично ли он завершен), отправляется третий запрос.Если два узла не работают одновременно, вы получите полный ответ, и клиенту не нужно ни о чем заботиться.Это функция «высокой доступности», которой славятся Cassandra и другие базы данных NoSQL.

Обратите внимание, что этот ответ верен даже для очень длинных ответов (сканирование всей таблицы или извлечение очень длинного раздела).Такие длинные ответы разбиты на «страницы» разумной длины, каждая страница выбирается в отдельном запросе и может быть получена из 2 из 3 реплик, не обязательно одной и той же.

Все, что я написал выше, такжеотносится как к Сцилле, так и к Кассандре.

...