2015-09-14 3 views
2

Может ли кто-нибудь объяснить мне, как клиентский запрос распространяется в кластере Cassandra?Как клиентский запрос распространяется через кластер Cassandra?

В моей настройке у меня есть три узла (A, B и C), и данные распределяются равномерно по всем узлам. Я запускаю код сервера Python на другом ПК (D). Когда клиент отправляет запрос в D, как кластер Cassandra распределяет клиентский запрос?

+0

Клиент отправляет запрос одному из доступных узлов (предположим, вы настроили соединение с кластером и пулом соединений). Узел, получивший запрос, становится «координатором». Координатор хэширует токен из первичного ключа и вычисляет, какие узлы (ы) имеют данные. На основе уровня согласованности и коэффициента репликации координатор ожидает подтверждения от необходимого количества узлов. Затем результат возвращается клиенту. – LHWizard

ответ

0

Вероятно, это зависит от того, как настроен ваш сервер python. Если он использует драйвер Python Datastax, тогда существуют различные параметры балансировки нагрузки, которые можно настроить, чтобы сообщить драйверу, как вы хотите, чтобы запросы были сбалансированы по нагрузке.

Например, cassandra.policies.RoundRobinPolicy будет перебирать доступные узлы Cassandra для отправки каждого запроса на другой узел.

Или cassandra.policies.TokenAwarePolicy выяснит, какие узлы имеют реплики для целевого раздела и напрямую свяжутся с этими узлами (т. Е. Пропустите контакт узлов, у которых нет целевого раздела).

Доступные политики балансировки нагрузки иногда могут быть объединены.

Для получения дополнительной информации см. this.

+0

Спасибо Джим, я понял это понятие .... но если у меня есть набор, как два узла A и B. Первоначально A с полными данными, то есть означает, что кластер не настроен, и я добавил узел B в кластер с существующим узлом A. Теперь в этой настройке, как клиентский запрос описывается, когда оба узла имеют 100% данных? – ssd

+0

Это зависит от того, какой коэффициент репликации вы используете. Если вы используете коэффициент репликации 1, то два узла разделили бы данные, и каждый узел обработал бы примерно половину запросов. Если вы использовали коэффициент репликации 2, то каждый узел будет иметь полную копию данных, а когда вы записали, оба узла увидели бы запись, а когда вы прочитали, то любой узел мог обработать чтение. –

Смежные вопросы