Какой самый эффективный способ создать живую информационную панель для больших данных, используя Net в Azure? - PullRequest
1 голос
/ 15 февраля 2020

Гипотетический упрощенный сценарий:

У меня есть Asp. Net Core 3 API, который принимает заказы на пиццу от Javascript. Пиццу заказали, я десериализовал объект в C# API. Теперь у меня есть объект «Пицца»:

{
   "name": "Margherita",
   "date": "20201502",
   "amount": "10"
   "ingredients": ["tomato", "mozzarella"]
}

Я получаю 100 миллионов заказов пиццы в день, мне нужна живая панель инструментов, отображающая заказы, с меню для поиска исторических данных, таких как «Вчера», «Это Месяц »,« Прошлый год »и т. Д. c ..

Мне также нужен список наиболее заказанных пицц за определенный период времени или использованных ингредиентов.

Что такое самый современный и эффективный способ использования Microsoft Azure и C# для достижения такого результата?

Слишком много очередей, фабрик данных, озер, хранилищ, потоков и т. д. c Службы аналитики выберите из.

Я могу придумать 2 способа:

1)

  • Отправить каждый заказ пиццы в очередь, например Service Fabri c Queues, AzureStorage Queue или концентраторы событий
  • Удалите объекты из очереди, временно удерживая их в памяти
  • После того, как в памяти будет 10 или более элементов, агрегируйте их таким образом, чтобы удовлетворять будущие запросы и сохранять их в CosmosDB вместо сохранения каждого. разовый заказ
  • Это является неэффективным процессором и ограничено в будущих запросах, но экономит затраты на хранение, так как не сохраняется ни один объект, а только агрегированные данные

2)

  • Отправка каждой пиццы очередь, такая как Event Hubs или Stream Analytics
  • Сохранение каждого отдельного объекта в хранилище для «Больших данных»
  • Использование Apache Spark на Azure или аналогичный для запроса данных
  • Создайте рабочую роль, которая каждую минуту запрашивает набор данных, и создайте отдельные агрегированные записи, используя, например, «date» в качестве PartitionKey для отображения на приборной панели
  • Не уверены, имеет ли смысл удаление данных для экономии затрат на хранение

Я думаю, что # 2 - это путь к go, но я не знаю, какой из них лучший "стек" для задачи, которая проста и экономична.

1 Ответ

0 голосов
/ 16 февраля 2020

Я бы рекомендовал вам взглянуть на реализацию некоторых технологий, которые следуют архитектуре Lambda. По сути, это разные технологии горячего и холодного пути. Вот хорошее введение , хотя я бы не сосредоточился только на технологиях, которые упоминает Джеймс.

Если у вас есть постоянные запросы, такие как «количество пицц, упорядоченных за 5-минутное окно», тогда Azure Stream Analytics может выводить постоянный поток этих агрегатов.

Затем события заказа пиццы также могут быть заархивированы в хранилище BLOB-объектов для использования в некоторых пакетных технологиях. Например, выполните ежедневную или почасовую загрузку в Azure SQL Хранилище данных (недавно было переименовано Azure Synapse Analytics). Тогда ваше приложение может запускать запросы типа «самые популярные начинки для пиццы в прошлом месяце» в режиме ad-ho c. Сочетание этих технологий горячего и холодного путей должно работать лучше, чем пытаться заставить один инструмент сделать все.

Другой вариант - Spark. Я бы порекомендовал посмотреть потоковое Spark в Azure Databricks. Вы должны иметь возможность выполнять потоковые агрегации, а также загружать таблицы Delta для пакетных запросов для более старых периодов времени. Эта статья может дать вам пример.

...