Для компании вроде Uber, данные в реальном времени являются жизненно важными как для услуг, ориентированных на клиентов, так и для внутренних сервисов. Клиенты полагаются на данные в реальном времени для получения поездок и заказа еды в удобное для них время. Внутренние команды также зависят от актуальных данных для питания инфраструктуры за их клиентскими приложениями, таких как внутренний инструмент, который отслеживает аналитику аварийного завершения работы мобильного приложения.
Uber перешел на Apache Pinot для питания этого внутреннего инструмента и испытал значительные улучшения по сравнению со своим предыдущим аналитическим движком (Elasticsearch). Переход на Pinot, истинное платформу для аналитики в реальном времени, принес Uber преимущества, включая:
- 70% сокращение затрат на инфраструктуру (экономия более $2 млн в год)
- 80% сокращение количества ядер CPU
- 66% сокращение размера хранимой информации
- 64% сокращение времени загрузки страниц (с 14 секунд до менее 5 секунд)
- Уменьшение задержки при вводе данных до менее 10 миллисекунд
- Снижение времени ожидания запросов и устранение проблемы потери данных
Смотреть сейчас
Содержание этого блога основано на личных встречах, на которых рассказывали о историях пользователей Apache Pinot. Мы также ссылаемся на блог команды инженеров Uber, в котором рассказывается, как они используют Pinot для обслуживания аналитики в реальном времени для аварийного завершения работы мобильных приложений. Смотрите встречу здесь:
Или продолжайте читать, чтобы узнать, как Uber достиг этих результатов с помощью Apache Pinot.
Как Uber предоставляет аналитику в реальном времени по авариям мобильных приложений
Uber обладает автоматизированной системой приема данных, которая отслеживает сбои в приложении и собирает информацию для расследования. Часть этой информации поступает в Apache Flink для преобразований, после чего возвращается в темы Kafka для последующего использования. Эти необработанные и обработанные события в Kafka затем потребляются Apache Pinot, который запускает аналитические запросы, результаты которых доставляются внутренним пользователям через Grafana и внутренние инструменты визуализации. Их конвейер принимает как реальное время, так и автономные данные (не изображены) для создания полного представления о пользователях, известного как гибридные таблицы в Apache Pinot.
Аналитика сбоев приложений в реальном времени с использованием Apache Pinot
Uber выпускает около 11 000 новых изменений кода и инфраструктуры каждую неделю, и они полагаются на собственное средство (Healthline), чтобы помочь обнаружить и решить проблемы сбоев. Healthline позволяет Uber лучше измерять и достигать своего среднего времени обнаружения (MTTD). Например, они могут внедрять новую функцию, которая вызывает неожиданные сбои приложения, и должны быть в состоянии быстро выявить источник сбоев, исследуя данные о сбоях.
Ниже представлен дашборд, показывающий данные о сбоях за неделю для одного мобильного приложения и одной версии операционной системы. В этом примере события сессий происходят до сотен тысяч раз в секунду, а сбои измеряются от 15 000 до 20 000 событий в секунду. Uber объединяет эти метрики для расчета показателя бессмертного курса, который указывает на здоровье приложения (цель – быть максимально близким к 100%).
С Elasticsearch, универсальной поисковой системой, пиковые показатели сбоев приводили к задержкам в обработке данных и замедляли реакцию команды на выявление проблем. Переход на Apache Pinot, специально разработанный для масштабного анализа в реальном времени, позволил команде увидеть снижение как количества, так и серьезности задержек обработки.
Анализ глубокой информации о сбоях
Помимо общего обзора данных о сбоях, Uber также предоставляет глубокий анализ на уровне отдельных аварий. Они собирают метрики сбоев по различным параметрам, таким как количество сбоев на операционную систему и на версию, и распределение сбоев по версиям. Этот сценарий использует несколько индексов Pinot (диапазонный, обратный и текстовый), чтобы показать, когда произошел определенный тип сбоя, какие версии подвержены риску, количество случаев и количество затронутых пользователей и устройств.
Для детального анализа крайне важно было, чтобы Uber имел возможность поиска по тексту для чтения сообщений об ошибках сбоев. Текстовый индекс Pinot построен на основе Lucene и позволяет им искать сбои по сообщениям об ошибках, имени класса, стек трейса и т.д.
Измерение сессий в масштабе
Uber также использует Pinot для измерения уникальных сессий по устройству, версии, операционной системе и часу в масштабе. Pinot предлагает обработку в реальном времени с высокой пропускной способностью, способной обрабатывать 300 000 аналитических событий в секунду от Uber. У команды гибридная конфигурация, включающая реальную таблицу с 10-минутной детализацией и 3-дневным хранением данных, а также офлайн таблицу с часовой и ежедневной детализацией и 45-дневным хранением данных.
Использование HyperLogLog в Apache Pinot позволило команде уменьшить количество сохраняемых событий и выполнять меньше уникальных агрегаций по событиям. Pinot также обеспечивает очень низкие латентности — менее 100 миллисекунд для p99.5 латентности.
Экономия затрат на инфраструктуру
По расчетам Uber, они сэкономили более $2 миллионов в год на инфраструктурных затратах, перейдя на Pinot. Их настройка Pinot привела к 70% снижению инфраструктурных затрат по сравнению с Elasticsearch. Также было достигнуто 80% сокращение количества ядер CPU и 66% уменьшение размеров данных.
С Elasticsearch Uber использовал 22 000 ядер CPU. С Pinot это число сократилось на 80%. Вот снимок их настройки Pinot:
Улучшенная производительность запросов и пользовательское体验
С Apache Pinot Uber может обеспечить лучший пользовательский опыт с более быстрой загрузкой страниц и улучшенной надежностью. Переход на Pinot сократил время загрузки страниц на 64%, с 14 секунд до менее 5 секунд. Pinot также имеет лучшую толерантность к всплескам нагрузки, что приводит к более быстрому восстановлению после задержек. Даже если команда наблюдает задержку в инжекции, Pinot способен быстро восстановиться в течение нескольких минут.
По сравнению с Elasticsearch, Pinot показал значительные улучшения в отношении времени ожидания запросов и потери данных. Если произошло катастрофическое событие в мобильном приложении при использовании Elasticsearch, запросы, относящиеся к этому индексу, будут истекать по времени. Uber решил эту проблему с помощью Pinot, контролируя размер сегмента. У команды также нет проблем с потерей данных в Pinot, в отличие от частой потери данных, когда Elasticsearch справлялся с увеличенным потоком инжекции.
Следующая итерация настройки Pinot в Uber
Дальнейшим планом Uber является переход к использованию собственного индексирования текста для данных о мобильных сбоях. Данные о мобильных сбоях компании содержат значительное количество структурированной информации, что делает возможным для команды перенести все свои сценарии использования на собственные текстовые индексы. Этот переход обеспечит экономию затрат на хранение данных и сократит время, затрачиваемое на запросы к данным.
Uber не является единственной организацией, которая добилась успеха, перейдя от Elasticsearch к Pinot
Uniqode (ранее Beaconstac) зафиксировала улучшение общей производительности запросов в 10 раз после перехода от Elasticsearch к Pinot. Cisco Webex также перенесли свои реальные аналитические данные и наблюдение за системой на Pinot после столкнувшись с высокой задержкой. Команда Webex обнаружила, что Apache Pinot обеспечивает задержку в 5-150 раз ниже, чем Elasticsearch.
Source:
https://dzone.com/articles/real-time-app-crash-analytics-with-apache-pinot