Гипотетический упрощенный сценарий:
У меня есть API Asp.Net Core 3, который принимает заказы на пиццу из Javascript. Заказана пицца, десериализую объект в C # API. У меня появился объект «Пицца»:
{
"name": "Margherita",
"date": "20201502",
"amount": "10"
"ingredients": ["tomato", "mozzarella"]
}
Я получаю 100 миллионов заказов на пиццу в день, мне нужна живая панель инструментов, показывающая заказы, с меню для поиска исторических данных, таких как «Вчера», «В этом месяце», «Прошлый год» и т. Д.
Мне также нужен список пиццы, которую чаще всего заказывают за определенный период времени, или используемых ингредиентов.
Каков наиболее современный и эффективный способ использования Microsoft Azure и C # для достижения такого результата?
Слишком много очередей, фабрик данных, озер, хранилищ, потоков и т. Д. Аналитических сервисов на выбор.
Я могу думать о двух способах:
1)
- Отправляйте каждый заказ пиццы в очередь, такую как очереди Service Fabric, очередь AzureStorage или концентраторы событий.
- Удалите объекты из очереди, временно сохраняя их в памяти
- После того, как в памяти окажется 10 тыс. Или более элементов, объедините их таким образом, чтобы удовлетворить будущие запросы, и сохраните их в CosmosDB вместо сохранения каждого отдельного заказа.
- Это неэффективно для ЦП и ограничено в будущих запросах, но позволяет сэкономить на хранении, поскольку не хранится ни один объект, а только агрегированные данные.
2)
- Отправляйте каждую пиццу в очередь, например в Центры событий или Stream Analytics.
- Сохраните каждый отдельный объект в хранилище для «больших данных».
- Используйте Apache Spark в Azure или аналогичный для запроса данных
- Создайте рабочую роль, которая ежеминутно запрашивает набор данных и создает отдельные агрегированные записи, используя, например, «дату» в качестве ключа PartitionKey для отображения на панели управления.
- Не уверены, имеет ли смысл удалять данные, чтобы сэкономить на хранении
Я думаю, что путь №2 - это лучший вариант, но я еще не определился с тем, какой «стек» лучше всего подходит для простой и рентабельной задачи.