Агрегации с низкой задержкой на Кассандре

Мы внедряем в нашу систему множество метрик временных рядов. Мы не можем справиться с нагрузкой записи с нашей текущей инфраструктурой. Итак, мы оцениваем кассандру.

Больше информации о нашей существующей системе реального времени

  • Мы собираем метрики временных рядов для конкретных приложений
  • Пишем их в БД
  • Вот пример данных, которые мы отслеживаем
{
  appId: 'applicationId', 
  route: 'routeName', 
  time: 1406845866304, 
  resTime: 500, 
  dbTime: 200
}
  • Затем, после добавления данных, мы объединяем их в разные разрешения с течением времени.
  • Например, у нас есть предварительно агрегированные данные для 1-минутного, 30-минутного, 3-часового, дневного разрешения для каждого отслеживаемого нами показателя.
  • Тогда наше приложение будет задавать разные вопросы, как показано ниже. Мы делаем adhoc агрегации, чтобы их закрепить.

    • дайте мне среднее время ожидания за этот период времени X
    • перечислите мне топ-10 маршрутов с более высоким временем ожидания за данный период времени

Касается Кассандры

Мы можем выполнить предварительную агрегацию с помощью cassandra, запустив несколько фоновых заданий. Но нам нужно выполнять специальные запросы с низкой задержкой (менее 5 мс). С нашими предварительно агрегированными данными это кажется тривиальным.

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

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

0 ответов

Другие вопросы по тегам