Поиск наоборот: материализуем результаты поискаЭлементы архитектуры
Наш сервис мониторинга постоянно обрабатывает миллионы метрик от агентов, установленных на серверах наших клиентов.
Любая операция с метриками начинается с поиска, эта стадия достаточно затратна по ресурсам, но, с другой стороны, у нас очень много повторяющихся запросов (проверка триггеров). Простое кэширование на определенное время нам не подошло - новая метрика сразу должна быть видна на графиках, и ее необходимо учитывать при проверке триггеров.
Я расскажу, как нам удалось материализовать результаты поиска для повторяющихся запросов:
* материализация запросов в хранилище;
* перколяция ("обратный" поиск; ищем, каким запросам соответствует документ) при записи метрик;
* чтение из кэша;
* вымывание устаревших метрик.
Немного о системе:
* основное хранилище: cassandra;
* поиск: elasticsearch (100 млн. документов без учета репликации);
* поток записи: ~100 тысяч метрик в секунду.