2012-03-20 3 views
5

В настоящее время я сравниваю Cassandra с 3 узлами, используя CassandraSharp. Моя главная забота больше латентность, чем пропускная способность, поэтому после того, как немного тюнинга GC вот мои номера (на 100 000 тыс вкладышами, моно-нить):Как получить надежное время вставки в Кассандре?

  • Iter/сек: 1600
  • Средний балл: 600μs
  • 95 центов: 600μs
  • 99 процентов: 5000μs
  • Макс: 50 000μs

Моя проблема в том, что раз в то время я получаю «плохо» поздно ncy (50 мс), моя цель - иметь постоянную задержку даже ценой более высокого среднего.

Я считаю, что это вызвано GC, и мне интересно, можно ли этого избежать.

(Как примечание стороны, это хорошая практика, чтобы отправить большое количество вставок в один узел, и пусть он справиться с этим или я должен «баланс нагрузки» это в клиенте?)

+0

Не могли бы вы рассказать нам, как вы настроили GC? Thx – odiszapc

ответ

2

50 мс находится в пределах нормы для сбора мусора молодого поколения. Вы можете включить GC logging в cassandra-env.sh, раскомментируя соответствующие строки в нижней части, чтобы убедиться, что это проблема.

(Приливы не блокируют вставки, если ваш диск не настолько медленно, что не может идти в ногу с объемом вставки, что является необычным, поскольку притоки являются последовательными в/о.)

Если коллекции молодого поколения действительно коррелирует с в более высоких задержках вы можете уменьшить попытку сделать юное поколение меньшим (также настроенным в cassandra-env.sh) при потенциальной стоимости латентности торговли для пропускной способности.

+0

Я уже прошел фазу оптимизации GC и имел минимальное пространство для молодого поколения, чтобы ускорить время GC. Так что, я думаю, это не улучшится: / – alprema

1

Я не» Подумайте, что вы сможете уйти от проблемы с плохим латентностью один раз в то время. Скорее всего, это GC, который вы упомянули, или когда он выполняет флеш-диск из Memtables.

Является ли плохая вставка 50 мс действительно проблемой? Cassandra поддерживает пакетные мутаторы, которые позволяют вам ставить в очередь ваши операции вставки одним длинным мутатором, а затем выполнять партию вставок позднее, чтобы ваш основной поток не нуждался в блокировке синхронной вставкой, которая может занять больше времени ожидается. Я не использовал CassandarSharp, поэтому не знаю, предоставляет ли он эту функциональность.

Кроме того, балансировка нагрузки через узлы cassandra немного улучшит время импорта, но помните, что то, что происходит за кулисами, заключается в том, что узел, который вы предоставили для импорта, передаст его правильному узлу для хранения данных (так что узел, который вы ему даете, действует как прокси-сервер), поэтому я не предполагал бы большого улучшения в общем случае края. Это поможет вам, если по какой-то причине узел начнет делать другие вещи, и его производительность страдает.

0

Если вас интересует надежное время вставки, вы можете проверить распределение Acusu Cassandra, которое обеспечивает 100-кратное более стабильное латентное время на вставках: Cassandra under Heavy Write Load (обратите внимание, в частности, на второе изображение).

+0

Обратите внимание, что этот критерий устарел из-за введения распределения арены для memtables в Cassandra 1.0, что устранило вид остановленных в мире остановок gc в старом поколении, рассматриваемых здесь. (Подробности: https: //issues.apache.org/jira/browse/CASSANDRA-2252) – jbellis