2016-07-22 5 views
0

TL; DR: Я использую Cassandra. Я делаю тесты, чтобы посмотреть, справится ли это с нагрузкой, но я получаю много тайм-аутов при чтении данных.Cassandra таймауты чтения на AWS

com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency LOCAL_ONE (1 responses were required but only 0 replica responded) 

Я создал кластер Cassandra на Amazon AWS: 8 инстанций m4.xlarge с 2 EBS диски - тип «GP2» - 100 Гбайт каждый (журнал фиксации на одном диске, остальная часть данных о другой). Экземпляры находятся в одной и той же зоне доступности в VPC. Я использую запасную версию Apache Cassandra 3.7 без какой-либо конкретной настройки серверов или самой Cassandra.

Я загрузил 1 миллиард записей. Каждый из них имеет около 30 полей. Первичный ключ состоит из двух разделов и одной кластерной колонки. У меня около 10 записей на ключ раздела. Коэффициент репликации равен 3. Каждый из 8 узлов хранит около 40 ГБ данных после уплотнения.

Мой тест состоит в том, чтобы сделать 1000 запросов на случайных ключах с помощью основного приложения Scala, используя драйвер Datastax Cassandra. В предложении WHERE содержится ключ раздела, и я читаю все записи, то есть предложение WHERE не включает столбец кластеризации.

Когда запросы последовательны, все запросы возвращают ожидаемые результаты, а среднее время отклика составляет 74 мс.

Когда я использую асинхронные запросы, сделайте все запросы сразу и вызовите get() на Future s, я получаю много тайм-аутов через 5 секунд (от 25% до 75% запросов сбой).

Я предположил, что диски EBS могут быть дросселированы, и я попытался использовать другой кластер: 3 узла типа i2.xlarge с данными, хранящимися на эфемерных дисках.

Обратите внимание, что в ходе моих испытаний уплотнение прекратило выполнять свою работу. Я не видел, как сборщик мусора во время запросов.

Любая идея, почему запросы генерируют тайм-ауты?

ответ

2

Когда я использую асинхронные запросы, сделать все запросы и обратитесь получить() на фьючерсах, я получаю много времени ожидания после 5 секунд (от 25% и 75% запросов не в состоянии).

Вы дросселировали ваши асинхронные запросы? Сколько выборок вы отправили в кластер асинхронно?

+0

DuyHai прав, постарайтесь не отправлять более 100 запросов одновременно и дождаться их результата перед отправкой новой партии. Вы, скорее всего, DDOSing своих узлов. –

+0

Я отправляю все запросы сразу. Только когда все были отправлены, я попытаюсь получить результаты. Вот код: https://gist.github.com/aseigneurin/b11afd1247752db952f163b6f8b9b508 –

+0

В этом была проблема. Спасибо @doanduyhai и @ alexander-dejanovski! –

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