Виктор Ерёмченко рассказал в 2024 году про опыт эксплуатации аналитической системы в Авито, а мы делаем выжимку сути.
Контекст
Аналитическая платформа - решение, которое применяется, чтобы получить (аналитические) события (клики, просмотры страниц, события из кода), обработать (почистить, сгруппировать и тд), а затем отдать данные для последующего анализа.
Авито обрабатывает 40 млрд событий в сутки, хранит 1 Pb данных, к которым делают 1M запросов. Применяют ClickHouse, Vertica, Trino, Kafka, Vector, Graphite.
Пользователи аналитической платформы ожидают, что свежие данные будут доступны для работы максимально быстро. Идеально - сразу же, хорошо - если данные за вчера доступны сегодня.
Проблема
Статус платформы показывал, что все работает корректно, задержек поступления данных нет, при этом пользователи жаловались на недоступность свежих данных - "Когда будут данные доступны?"
Классические 4 золотых сигнала (golden signals) для платформы работы с данными можно переформулировать так:
Готовность данных
Доступность данных
Полнота данных
Пользователь ожидает, что данные в аналитической платформе есть и их можно получить в любой момент. Все что ломает эти ожидания - можно оформить как метрики, за которыми следить.
Готовность данных
Предположим, что мы договорились, что данные за вчера будут готовы для использования на следующее утро в 9 утра. И тогда, если данные стали доступны в 10:30, а не в 9:00, то 1.5 часа - это время, когда данные были недоступны.
Это можно оформить в виде процента, если считать это время как недоступность. Тогда % uptime будет ниже желаемых 99.99% или иных процентов.
Доступность данных
Доступность показывает, может ли пользователь запросить и получить какие-либо данные из платформы. Можно считать, как доступность хранилища/хранилищ (Clickhouse, Vertica, etc). Это можно анализировать также, по времени простоя систем и переводить в проценты (или оставлять в часах).
Полнота данных
Пользователь ожидает, что все данные, которые были в источнике, попадут в платформу, а также, что все данные будут в том порядке, которые были в источнике.
Поэтому для оценки полноты данных нужно уметь сравнивать с оригиналом. Часто это может быть слишком дорогой операцией, поэтому начать можно с косвенных показателей - доступность API, наличие ошибок в обработке и т.д.
Как собирать и хранить метрики платформы
Собирать метрики работы компонент платформы можно при помощи:
Vector - который умеет обрабатывать как метрики, так и логи, а затем отправлять в место хранения
Prometheus / VictoriaMetrics - стандартный стэк для сбора метрик (но не логов)
Vector для Виктора оказался отличным решением, который позволил переиспользовать Clickhouse хранилище. Воспользоваться Clickhouse как источником данных, так и хранилищем данных. А также не увеличивать количество технологий, которые нужно поддерживать.
Что еще было в докладе
Как можно собирать статус и выявить зависшие запросы в Vertica
Как автоматически завершать долгие запросы в Vertica при помощи обогащения Vector