Мы работаем над решением ключевого значения с поддержкой SSD со следующими свойствами:
- Пропускная способность: 10000 TPS; 50/50 ставит/получает;
- Задержка: 1 мс, 99,9% процентиль 10 мс
- Объем данных: ~ 1 млрд. значений, ~ 150 байт каждый; 64-битные ключи; произвольный доступ, 20% данных соответствует ОЗУ.
Мы попробовали KyotoCabinet, LevelDB и RethinkDB на товарных SSD, с различными планировщиками IO Linux, файловыми системами ext3/xfs; сделал ряд тестов, используя Rebench; и обнаружил, что во всех случаях:
- Доступность только для чтения/задержка очень хорошие.
- Запись/обновление только во всех случаях умеренная, но есть много высокоуровневых выбросов
- Смешанная рабочая нагрузка чтения/записи приводит к катастрофическим колебаниям в пропускной способности/задержке даже в случае прямого доступа к блочному устройству (в обход файловой системы).
На приведенном ниже рисунке показано такое поведение для KyotoCabinet (горизонтальная ось - это время, три периода четко видны - только для чтения, смешанные, только обновление).
Возникает вопрос: возможно ли достичь низкой латентности для описанных SLA с использованием SSD и какие хранилища значений ключа рекомендуется?