Гипотетический упрощенный сценарий:
У меня есть 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, но я не знаю, какой из них лучший "стек" для задачи, которая проста и экономична.