在Azure中使用.Net为大数据创建实时仪表盘的最有效方法是什么?

问题描述 投票:0回答:1

假设的简化方案:

我有一个Asp.Net Core 3 API,该API接受Javascript的比萨订单。订购披萨,我在C#API中反序列化对象。我现在有一个对象“ Pizza”:

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

[我每天收到1亿个比萨饼订单,我需要一个实时的仪表盘来显示订单,并带有一个菜单来搜索“昨天”,“本月”,“去年”等历史数据。

我还需要在给定的时间范围内订购最多的比萨饼清单,或使用的主要配料。

使用Microsoft Azure和C#达到这种结果的最现代,最有效的方法是什么?

队列,数据工厂,湖泊,存储,流等分析服务太多,无法选择。

我可以想到两种方式:

1)

  • 将每个比萨饼订单发送到队列,例如服务结构队列,AzureStorage队列或事件中心
  • 出队对象暂时保留在内存中
  • 在内存中有10k或更多的元素之后,以满足将来查询的方式聚合它们,然后将它们保存到CosmosDB中,而不是保存每个单个订单
  • 这是CPU效率低下的情况,在以后的查询中受到限制,但是由于没有存储单个对象,而是仅存储了聚合的数据,因此节省了存储成本

2)

  • 将每个比萨饼发送到事件中心或流分析之类的队列中
  • 将每个对象保存到“大数据”的存储中
  • [在Azure上使用Apache Spark或类似的方法查询数据
  • [创建一个工作人员角色,每分钟都要查询数据集,并使用例如“ date”作为PartitionKey来创建单个聚合记录以在仪表板上显示
  • 不确定是否删除数据以节省存储成本是合理的

我认为要走#2的路要走,但我不确定什么是最简单,最经济高效的任务的最佳“堆栈”。

c# azure bigdata azure-stream-analytics
1个回答
0
投票

我建议您考虑实施一些遵循Lambda架构的技术。基本上,这是分开的热路径和冷路径技术。这是一个很好的introduction,尽管我不会只关注James提到的技术。

[如果您遇到诸如“在5分钟的滚动窗口中订购的比萨数量”之类的问题,那么Azure Stream Analytics可以输出这些聚合的恒定流。

然后,比萨订单事件也可以存储在Blob存储中,以用于某种批处理技术。例如,每天或每小时加载一次到Azure SQL数据仓库(最近更名为Azure Synapse Analytics)。然后,您的应用可以以特殊方式运行“上个月最受欢迎的比萨馅料”之类的查询。这些热路径和冷路径技术的结合应该比尝试使用一种工具来完成所有工作更好。

另一个选择是Spark。我建议查看Azure Databricks中的Spark流。您应该能够进行流式聚合,并且还可以为较旧时间段的批处理查询加载增量表。此article可能为您提供示例。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.