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 с данными, хранящимися на эфемерных дисках.
Обратите внимание, что в ходе моих испытаний уплотнение прекратило выполнять свою работу. Я не видел, как сборщик мусора во время запросов.
Любая идея, почему запросы генерируют тайм-ауты?
DuyHai прав, постарайтесь не отправлять более 100 запросов одновременно и дождаться их результата перед отправкой новой партии. Вы, скорее всего, DDOSing своих узлов. –
Я отправляю все запросы сразу. Только когда все были отправлены, я попытаюсь получить результаты. Вот код: https://gist.github.com/aseigneurin/b11afd1247752db952f163b6f8b9b508 –
В этом была проблема. Спасибо @doanduyhai и @ alexander-dejanovski! –