Платформа обеспечивает рабочие процессы метрик временных рядов в различных критически важных приложениях Uber.

Недавно я начал новый информационный бюллетень, посвященный образованию в области искусственного интеллекта. TheSequence - это информационный бюллетень, ориентированный на искусственный интеллект (то есть без рекламы, без новостей и т. Д.), На чтение которого уходит 5 минут. Цель состоит в том, чтобы держать вас в курсе проектов, исследовательских работ и концепций машинного обучения. Пожалуйста, попробуйте, подписавшись ниже:



Хранение и анализ временных рядов - один из наиболее распространенных сценариев в машинном обучении, для которого очень часто требуется специализированный тип хранилища. От прогнозирования временных рядов до всевозможных прогнозов, данные временных рядов необходимы для обучения и проверки многих моделей машинного обучения. Вместе со сценариями социальных сетей или Интернета вещей (IOT) варианты использования машинного обучения являются одними из основных факторов развития баз данных и фреймворков временных рядов. На этом рынке за последние несколько лет наблюдался невероятный уровень инноваций, но он все еще пытается адаптироваться к масштабным сценариям. Важность анализа временных рядов повлияла на выпуск пакетов с открытым исходным кодом, таких как Graphite или Prometheus. Однако многие из ведущих интернет-компаний регулярно перерастают эти стеки и идут по пути построения собственной инфраструктуры временных рядов. Uber - одна из компаний, внесших наибольший вклад в развитие инфраструктуры данных временных рядов. Более года назад Uber открыл один из самых инновационных стеков анализа временных рядов на рынке: M3.

Время - это ключевой элемент опыта Uber в различных приложениях. В результате анализ временных рядов кажется более актуальным, чем для других типов крупных предприятий. Первоначально Uber полагался на традиционные стеки временных рядов, такие как Graphite, Nagios, StatsD и Prometheus, для создания своих показателей временных рядов. Хотя этот стек технологий работал какое-то время, он не мог угнаться за стремительным ростом Uber, и к 2015 году компании потребовалась собственная инфраструктура временных рядов. Так возникла M3, которая была разработана с пятью ключевыми руководящими принципами:

  • Повышенная надежность и масштабируемость: чтобы мы могли продолжать масштабировать бизнес, не беспокоясь о потере доступности или точности предупреждений и наблюдаемости.
  • Возможность для запросов возвращать результаты между центрами обработки данных: беспрепятственно обеспечивать глобальную видимость услуг и инфраструктуры в разных регионах.
  • Соглашение об уровне обслуживания с низкой задержкой: чтобы информационные панели и оповещения обеспечивали надежную задержку запросов, интерактивность и оперативность.
  • Первоклассные размерные метрики с тегами: чтобы предложить гибкую модель данных с тегами, которую лейблы Prometheus и другие системы сделали популярными.
  • Обратная совместимость: чтобы гарантировать, что сотни устаревших сервисов, генерирующих метрики StatsD и Graphite, продолжают работать без перебоев.

M3

Высокая масштабируемость и низкая задержка - ключевые принципы архитектуры M3. Каждую секунду M3 обрабатывает 500 миллионов метрик и сохраняет еще 20 миллионов агрегированных метрик. Экстраполяция этих чисел на 24-часовой цикл показывает, что M3 обрабатывает около 45 ТРИЛЛИОНОВ метрик в день, что намного превышает производительность любой традиционной инфраструктуры временных рядов. Чтобы справиться с этой пропускной способностью, M3 опирался на архитектуру, основанную на следующих компонентах:

· M3DB: M3DB - это распределенная база данных временных рядов, которая обеспечивает масштабируемое хранилище и обратный индекс временных рядов. Он оптимизирован как экономичное и надежное хранилище и индексирование метрик долгосрочного хранения в реальном времени.

· M3Query: M3 Query - это служба, в которой размещена распределенная система запросов для запросов как в реальном времени, так и в исторических показателях, поддерживающая несколько разных языков запросов. Он предназначен для поддержки как запросов в реальном времени с малой задержкой, так и запросов, выполнение которых может занять больше времени, с агрегированием по гораздо большим наборам данных для аналитических случаев использования.

· M3 Aggregator: M3 Aggregator - это служба, которая работает как специальный агрегатор показателей и обеспечивает понижающую выборку на основе потоков на основе динамических правил, хранящихся в etcd.

· Координатор M3: Координатор M3 - это служба, координирующая чтение и запись между вышестоящими системами, такими как Prometheus и M3DB.

· M3QL: язык запросов, оптимизированный для данных временных рядов.

Взаимосвязь между основными компонентами M3 показана на следующем рисунке:

Давайте рассмотрим некоторые из предыдущих строительных блоков архитектуры более подробно.

M3DB

M3DB - это основная модель хранения в инфраструктуре M3. Стек был построен на Go и разработан для крупномасштабного анализа временных рядов с нуля. Модель хранения является распределенной и строго согласованной, что обеспечивает масштабируемость при сохранении устойчивой динамики записи. M3DB использует модели как в памяти, так и на диске, в зависимости от того, часто ли к записям обращаются или используются только для долгосрочных вычислений соответственно. С точки зрения управления M3DB легко настраивается и поддерживается в широком диапазоне сред выполнения.

Одним из главных достоинств M3DB является его продуманная модель хранения. Большинство преобразований в рамках определенного запроса применяются к разным сериям для каждого временного интервала. По этой причине M3DB хранит данные в столбчатом формате, что упрощает размещение данных в памяти. Кроме того, данные разделяются по времени на блоки, что позволяет большинству преобразований работать параллельно с разными блоками, тем самым увеличивая скорость вычислений.

M3QL

С самого начала M3 поддерживал язык запросов Prometheus (PromQL) и язык навигации Graphite. Чтобы расширить возможности доступа к данным M3, Uber решил создать M3QL - язык на основе конвейера, который дополняет возможности навигации по путям более обширными процедурами доступа к данным. Как и другие языки с конвейерной структурой, M3QL позволяет пользователям читать запросы слева направо, предлагая богатый синтаксис, как показано на следующем рисунке.

Механизм запросов M3

Как и другие компоненты M3, механизм запросов был написан на Go с нуля и оптимизирован для обеспечения высокой пропускной способности. Последние показатели Uber сравнивают 2500 запросов в секунду, обрабатываемых механизмом запросов M3. Рабочий процесс механизма запросов состоит из трех основных этапов: синтаксический анализ, выполнение и извлечение данных. Компоненты синтаксического анализа и выполнения запросов работают вместе как часть общей службы запросов, а извлечение выполняется через тонкую оболочку на узлах хранения. Для поддержки нескольких языков запросов, таких как M3QL или PromQL, M3 вводит промежуточное представление на основе ориентированного ациклического графа (DAG), которое абстрагирует запрос, который необходимо выполнить. Текущая реализация механизма запросов привязана к M3DB, но проект может поддерживать другие базы данных временных рядов.

Координатор M3

M3 - это очень полная платформа, но она также обеспечивает интеграцию с основными системами анализа временных рядов, такими как Prometheus. M3Coordinator - это сервис, который предоставляет API для чтения / записи в M3DB на глобальном уровне и уровне размещения. Также он выступает в роли моста между Прометеем и M3DB. Используя этот мост, M3DB действует как долгосрочное хранилище для Prometheus, используя удаленные конечные точки чтения / записи.

Начать работу с M3 относительно просто, поскольку вся платформа упакована в виде контейнеров Docker. Инфраструктура была протестирована на основных облачных платформах, таких как Google Cloud, и весь исходный код доступен в их репозитории GitHub.

M3, безусловно, является одной из самых продвинутых инфраструктур для анализа временных рядов на текущем рынке. Хотя M3 может не поддерживать коммерческие альтернативы, он обладает надежностью, разработанной за годы поддержки процессов анализа временных рядов Uber. Нет ничего лучше этого.