我已经完成了为应用程序构建原型的任务。我还没有任何代码,因为我提出的解决方案概念充其量只是臭...
问题:
该解决方案由各种Azure项目组成,这些项目可以处理存储在Azure SQL db-s中的大量数据。几乎所有发生的操作都会在blob存储中创建一个gzip压缩日志文件。这是每个日志条目的一个.gz文件。
我们还应该有一个小桌面(WPF)应用程序,它应该能够读取,过滤和排序这些日志文件。
我对日志记录的完成方式完全没有影响,因此无法更改以解决此问题。
我提出的可能的解决方案(概念上):
1
问题在于,根据过滤器的不同,这可能意味着需要下载大量数据(速度很慢)和进程(这也不会非常快速)。我真的不能将其视为可用的应用程序。
2
使用这种方法,如果存在大量文件,我是否会遇到解压缩这些文件的问题(它会占用服务运行的存储/计算实例上的额外空间)。
编辑:过滤器的含义是按日期和严重性限制结果(信息,警告,错误)。 .gz文件保存在一个非常简单的结构中,我不会通过查看文件来过滤。
第3:
我还需要一些方法让应用程序实时更新显示的日志,我想这需要通过重复请求blob存储/服务来完成。
这不是那些“给我代码”的问题之一。我正在寻找有关最佳实践或类似问题的类似解决方案的建议。我也知道这可能是那些“没有正确答案”的问题之一,因为人们有不同的问题方法,但我有时间建立原型,所以我会尝试不同的东西,我会选择正确的回答,这将显示一个有效的解决方案,或者指导我朝着正确的方向发展的解决方案,即使它确实需要一些时间才能实际构建并测试它。
答案 0 :(得分:1)
据我了解,您在Azure Blob存储中有一组日志文件,这些日志文件以特定方式格式化(gzip),并且您希望显示它们。
这些文件有多大?您是否在日志文件中显示每条信息?
假设这是一个日志文件,它是静态的和历史的......这意味着一旦创建了log / gzip文件就无法更改(一旦gzip文件出现在博客存储上,你就不会更新它) 。只能创建新文件......
一种解决方案
为什么不创建一个定期关闭的工作者角色/作业进程并扫描blob存储并构建一个持久的“数据库”以便您可以显示。关于这一点的好处是你没有使用解压缩/业务逻辑来提取WPF应用程序或UI中的日志文件。
1)我将使用worker角色扫描Azure Blob存储中的日志文件 2)有某种机制来跟踪哪些处理过程和当前“状态”可能是最后一个gzip文件的UTC日期 3)在worker角色中完成所有解压缩/提取日志文件的操作 4)让worker角色将内容放在SQL数据库,Azure表存储或分布式缓存中以进行访问 5)可以通过REST服务(ASP.NET Web API / Node.js等)进行访问
如果需要扩展它,可以添加更多内容,例如将其作为作业重新执行,以便在给定时间内重新执行所有日志文件(全部刷新)。我不知道你的数据大小,所以我不确定这是否可行。
关于这一点的好处是,如果您需要扩展您的工作(一夜之间),您可以启动2,3,6个工作角色...提取内容,将结果传递给服务总线或存储队列插入SQL,Cache等以进行访问。
答案 1 :(得分:1)
仅仅存储blob是不够的。您要过滤的元数据应该存储在其他易于过滤和检索所有元数据的地方。所以我认为你应该把它分成两个问题:
一个。如何有效地列出所有“gzips”及其元数据以及如何 我可以在这些gzips上应用过滤器,以便在我的客户端中显示它们 应用
<强>解决方案强>
更新:由于您只对日期和严重程度进行过滤,因此您应该查看Blob和表格选项:
B中。如何在我的应用程序中显示“gzip”(例如双击搜索结果后)
<强>解决方案强>