Хранилище ключей и значений с малой задержкой для SSD

Мы работаем над решением «ключ-значение» на основе SSD со следующими свойствами:

  • Пропускная способность: 10000 TPS; 50/50 ставит/получает;
  • Задержка: в среднем 1 мс, 99,9-й процентиль 10 мс
  • Объем данных: ~1 миллиард значений, ~150 байт каждое; 64-битные ключи; произвольный доступ, 20% данных помещается в ОЗУ

Мы пробовали KyotoCabinet, LevelDB и RethinkDB на стандартных SSD, с разными планировщиками ввода-вывода Linux, файловыми системами ext3/xfs; провел ряд тестов с помощью Rebench; и обнаружил, что во всех случаях:

  • Пропускная способность/задержка только для чтения очень хорошие
  • Пропускная способность только для записи/обновления во всех случаях умеренная, но есть много выбросов с высокой задержкой
  • Смешанная рабочая нагрузка чтения/записи вызывает катастрофические колебания в пропускной способности/задержке даже при прямом доступе к блочному устройству (в обход файловой системы)

На рисунке ниже показано такое поведение для KyotoCabinet (горизонтальная ось — время, отчетливо видны три точки — только для чтения, смешанный, только обновление).

Возникает вопрос: можно ли добиться низкой задержки для описанных SLA с помощью SSD и какие хранилища ключей-значений рекомендуются?

enter image description here

10
задан user1128016 14 May 2012 в 05:13
поделиться