Архитектура сбора и анализа метрик - PullRequest
0 голосов
/ 26 ноября 2018

Мы работаем на IoT-устройствах с поддержкой HomeKit.HomeKit разработан для потребительского использования и не имеет возможности собирать метрики (мощность, температура и т. Д.), Поэтому нам необходимо реализовать его отдельно.

Допустим, у нас есть 10 000 устройств.Они отправляют одну коллекцию метрик каждые 5 секунд.Поэтому каждую секунду нам нужно получать 10000/5 = 2000 коллекций.Конечный пользователь должен видеть графики каждой метрики за указанный период времени (1 неделя, месяц, год и т. Д.).Таким образом, каждый день система будет получать 172,8 миллиона записей.Здесь возникает много вопросов.

Прежде всего, нет необходимости хранить все данные, так как пользователю нужны только графики за указанный период, поэтому он нуждается в некоторой агрегации.Какое решение для базы данных ему подходит?Я считаю, что ни одна RDMS не будет обрабатывать такой объем данных.Тогда как получить средние данные метрик для представления их конечному пользователю?

AWS имеет общую архитектуру обработки данных временных рядов: enter image description here

Оченьупрощенно я думаю об этом так:

  1. Устройства отправляют данные непосредственно в DynamoDB с помощью HTTP API
  2. Метрики хранятся в одной таблице за 24 часа
  3. В концедня некоторые процедуры выполняются в Elastic Map Reduce и создают готовые файлы JSON с данными, необходимыми для отображения графиков за период времени.
  4. Старые таблицы хранятся в RedShift для дальнейших приложений.

Кто-нибудь уже делал что-то подобное раньше?Может быть, есть более простая архитектура?

1 Ответ

0 голосов
/ 01 декабря 2018

Для этого требуется инфраструктура bigdata, такая как 1) кластер Hadoop 2) Spark 3) HDFS 4) HBase

Вы можете использовать Spark для чтения данных в виде потока.Паровые данные могут храниться в файловой системе HDFS, что позволяет хранить большие файлы в кластере Hadoop.Вы можете использовать алгоритм уменьшения карты, чтобы получить необходимый набор данных из HDFS и сохранить его в HBase, который является базой данных Hadoop.HDFS является распределенным, масштабируемым и большим хранилищем данных для хранения записей.Наконец, вы можете использовать инструменты запросов для запроса hbase.

Данные IOT -> Spark -> HDFS -> Map / Reduce -> HBase -> Query Hbase.

Причина, по которой я предлагаю эту архитектуру, заключается в масштабируемости .Входные данные могут расти в зависимости от количества устройств IOT.В вышеупомянутой архитектуре инфраструктура распределена, и узлы в кластере могут расти без ограничений.

Это проверенная архитектура в приложении для анализа больших данных.

...