Valuable insights
1.Ключевые метрики стабильности платформы: Основная ценность для пользователей заключается в своевременном получении данных, поэтому критически важны метрики времени готовности данных и доступности компонентов системы.
2.Архитектура аналитической платформы Авито: Платформа обрабатывает петабайты данных, используя три основных движка: Vertica, ClickHouse и Trina, с ежедневной работой более 300 аналитиков.
3.Проблемы с исходными метриками: Первоначальные метрики не показывали реального состояния, что приводило к значительным простоям, суммарно достигавшим 240 часов отставания данных за квартал.
4.Внедрение Vector и ClickHouse для мониторинга: Для сбора, форматирования и долгосрочного хранения метрик и логов была внедрена архитектура на основе Vector как скрепера и ClickHouse как хранилища.
5.Борьба с ложными срабатываниями в Vertica: Для устранения ложных алертов при падении нод Vertica используется механизм обогащения метрик в Vector, проверяющий фактический статус процессов.
6.Отказоустойчивость достигается на уровне приложения: Решение о повышении устойчивости к сбоям базы данных было принято на стороне приложения, которое научилось автоматически обрабатывать падения нод.
7.Автоматизация и минимизация ручного труда: Автоматическое решение проблем, например, обработка падений сессий из-за потребления памяти, позволяет минимизировать затраты людей и обеспечить ночную стабильность.
8.Значительное улучшение показателей стабильности: В результате внедренных изменений удалось свести к нулю недоступность основного кластера и сократить отставание данных с 240 до 150 часов за квартал.
Введение и архитектура аналитической платформы
Специалист, отвечающий за стабильность платформы в Авито, представил доклад, посвященный ключевым метрикам стабильности и методам мониторинга аналитической платформы. Основная задача платформы заключается в получении, обработке и предоставлении данных пользователям. В основе системы лежат три движка: Vertica, ClickHouse и Trina. При этом Vertica играет наиболее массивную роль, храня основную часть данных.
Масштабы и источники данных
Платформа оперирует объемом данных, превышающим один петабайт, полученным от различных сервисов и баз данных, включая PostgreSQL, MySQL и MongoDB, а также из Kafka Stream. Ежедневно более 300 аналитиков используют эти данные, генерируя суммарно более миллиона SQL-запросов к платформе.
- Источники данных (базы, API, CSV, Sheets) генерируют данные.
- Данные загружаются в сыром виде в хранилище (DW).
- Происходит обработка, дедупликация и расчет витрин, обогащающих данные.
Ожидания пользователей и метрики готовности
Существуют четкие ожидания по готовности данных: критичные данные должны быть доступны к 9:00 утра, важные — к 10:00, а все остальные — к 12:00. Поскольку это аналитическая платформа, данные загружаются с задержкой в один день (день -1). Однако, несмотря на это, в некоторых случаях пользователи сообщали об отсутствии данных, хотя внутренние метрики системы не фиксировали проблем.
Выбор ключевых метрик стабильности
Для решения проблемы были выбраны две основные метрики: время готовности данных и доступность компонентов. Время готовности измеряется как простой платформы, если данные не готовы к установленному сроку (например, 30 минут задержки приравниваются к 30 минутам недоступности). Доступность компонентов касается возможности аналитиков выполнять запросы к хранилищам.
Отказоустойчивости баз не существует, потому что любая отказоустойчивость — это какой-то минимальный downtime, и всегда нужно быть к этому готовы.
Первоначальный расчет этих метрик показал серьезные проблемы: за квартал было зафиксировано суммарно 240 часов отставания данных и около 40 часов недоступности Vertica, основного компонента хранения.
Новая архитектура мониторинга на базе Vector и ClickHouse
Для сбора метрик первоначально использовались общедоступные инструменты Авито, такие как Grafana, данные о выполнении приложений и внутренняя информация Vertica. Были сформулированы требования к новой системе: переиспользование существующих компонентов, гибкость в написании кастомных метрик и долгое хранение данных. В итоге выбор пал на ClickHouse для хранения и Vector для обработки.
Роль Vector в сборе метрик
Vector выполняет роль сборщика (скрепера) и форматировщика метрик, приводя их в нужный вид и обогащая. Он также может генерировать кастомные метрики. Дополнительно Vector дублирует метрики в Grafana, вписываясь в существующую архитектуру.
- Возможность масштабирования, так как он уже используется в платформе.
- Долгое хранение данных с возможностью легкого расширения.
- Использование SQL для построения красивых дашбордов.
Мониторинг Vertica и повышение надежности
При мониторинге доступности Vertica, которая является отказоустойчивой базой, падение одной ноды переключает нагрузку на реплику. Однако это может влиять на загрузку данных и SQL-запросы. Системная таблица Vertica для проверки статуса нод может отвечать долго под высокой нагрузкой, вызывая ложные срабатывания (false positives) алертов.
Устранение ложных срабатываний
Для борьбы с ложными срабатываниями было решено обогащать метрику внутри Vector. Дополнительно собирается информация о запущенных процессах и времени работы процессора на каждой ноде. Если Vertica не отдает статус, но процесс запущен, нода считается доступной, что сократило количество лишних алертов для дежурного.
Решение проблем с потреблением памяти
Другой проблемой является потребление памяти пользовательскими функциями, написанными на Python, которые могут быть неоптимальными. Когда срабатывает киллер и убивает процесс из-за высокого потребления памяти, это также убивает Vertica. Vector используется для обогащения метрики потребления памяти, добавляя номер сессии, что позволяет дежурному выполнить команду `kill session` и решить проблему вручную, хотя полное автоматическое решение в этом кейсе не было принято.
Отказоустойчивость приложения и автоматизация
При падении ноды Vertica пропадают локальные временные таблицы, что приводит к падению загрузок или расчетов витрин, влияя на время готовности данных. Возникает дилемма: исправлять отказоустойчивость на стороне базы данных или на стороне приложения. Выбран подход повышения отказоустойчивости самого приложения.
Обработка ошибок на стороне приложения
Каждая ошибка обрабатывается индивидуально: для одних требуется перезапуск этапа загрузки или сброс сессии, для других — перезапуск всего потока расчета витрины. Приложение было доработано так, чтобы при падении ноды базы данных все отрабатывалось автоматически, что минимизировало влияние на время готовности. Около 40% инцидентов было связано с падением нод до внесения изменений.
- Максимально минимизировать затраты людей при автоматизации.
- Инвестировать в будущее, освобождая время для развития платформы.
- Приложение должно быть готово к недоступности базы данных.
Если вы хотите, чтобы ваши данные были прямо у вас супер критичные данные и вы хотите готовность их раньше, чем на это время, давайте переезжать в три изолированный контур.
Достигнутые результаты и планы развития
В результате предпринятых мер удалось добиться значительного улучшения показателей. На основном кластере Vertica время даунтайма было сведено к нулю, хотя падения отдельных нод все еще происходят. На втором кластере, с которым работают пользователи, наблюдается частичная деградация из-за неоптимальных запросов, которые могут завалить весь кластер.
Улучшение времени готовности данных
Помимо повышения устойчивости приложений, была проведена миграция части данных в Trina, что позволило освободить ресурсы Vertica для оставшихся расчетов. Это привело к снижению общего числа инцидентов и сокращению времени расчета. Отставание данных снизилось с 240 часов до 150 часов за квартал, при целевом показателе в 120 часов.
В планах развития — создание единой точки входа для пользователей, отображающей статус платформы и метрики готовности, чтобы исключить обращение пользователей в чаты с вопросами о статусе данных. Также планируется анализ рискованных запросов на ранних стадиях, чтобы отбивать их до начала выполнения на Vertica.
Вопросы и ответы: Жизненный цикл метрик
В секции вопросов обсуждался жизненный цикл метрик. Метрики, добавленные командой, выводятся из эксплуатации, если они становятся неактуальными, чтобы сократить потребление ресурсов ClickHouse. Например, логи Vertica (до 500 ГБ в день) хранятся не более 3 месяцев, так как этого достаточно для расследования инцидентов.
Приоритизация и поддержка сервиса
Приоритизация витрин данных меняется автоматически на основе их использования. Команда поддержки работает в обычное рабочее время, а ночные проблемы должны решаться автоматически. Если автоматическое решение невозможно, дежурный связывается с владельцем витрины для исправления неоптимальных запросов, которые могут привести к падению системы.
- ИИ может помочь решать простые и типовые задачи мониторинга.
- Для специфичных инфраструктур требуется больше данных для обучения ИИ.
- ИИ может анализировать алерты ночью для принятия решений о дальнейших действиях.
Useful links
These links were generated based on the content of the video to help you deepen your knowledge about the topics discussed.