【发布时间】:2012-10-27 13:51:00
【问题描述】:
我的任务是为应用构建原型。我还没有任何代码,因为我提出的解决方案概念充其量看起来很臭......
问题:
该解决方案由各种 Azure 项目组成,这些项目对存储在 Azure SQL db-s 中的大量数据进行处理。几乎每个发生的操作都会在 blob 存储中创建一个 gzip 压缩的日志文件。所以这是每个日志条目一个 .gz 文件。
我们还应该有一个小型桌面 (WPF) 应用程序,它应该能够读取、过滤和排序这些日志文件。
我对如何完成日志记录的影响绝对为 0,因此无法更改以解决此问题。
我(从概念上)提出的可能解决方案:
1:
- 连接到 Blob 存储
- 打开容器
- 读取/下载 Blob(使用过滤器)
- 解压 .gz 文件
- 读取和显示
问题在于,根据过滤器的不同,这可能意味着需要下载大量数据(速度很慢)和处理(也不会很快速)。我真的不认为这是一个可用的应用程序。
2:
- 创建一个将运行 WCF 或 REST 服务的 Web 角色
- 服务将获取过滤器参数和其他内容并返回包含数据的单个 xml/json 文件,处理将在云端完成
使用这种方法,如果这些文件很多,我是否会在解压缩这些文件时遇到问题(它会占用运行服务的存储/计算实例的额外空间)。
编辑:我所说的过滤器是指按日期和严重性(信息、警告、错误)限制结果。 .gz 文件保存在一个结构中,这使得这很容易,我不会通过查看文件本身来过滤。
3:
- 其他一些我不知道的优雅而简单的解决方案
我还需要某种方法让应用程序实时更新显示的日志,我想这需要通过对 blob 存储/服务的重复请求来完成。
这不是那些“给我代码”的问题之一。我正在寻找有关最佳实践的建议,或适用于类似问题的类似解决方案。我也知道这可能是那些“没有一个正确答案”的问题之一,因为人们有不同的解决问题的方法,但我有一些时间来构建一个原型,所以我会尝试不同的东西,我会选择正确的答案,这将是一个显示有效解决方案的解决方案,或者是引导我朝着正确方向前进的解决方案,即使在我真正构建并测试它之前确实需要一些时间。
【问题讨论】:
-
我不清楚。 “每个日志条目一个 .gz 文件” 有一个主日志吗?如果您要通过不查看这些 .gz 文件进行过滤,那么您如何过滤?
-
应用程序将调用类似 Logger.Log(severity, "message") 的东西。对于这些调用中的每一个,都会创建一个新文件,其文件名类似于“severity-date.gz”(名称中还有一些数据,但在这种情况下无关紧要)。
-
我还是不清楚。您是说仅基于 .gz 文件名进行过滤吗?所以你无法控制 Logger 应用程序?您是否可以控制对 Logger.Log 的调用?
-
Logger 是创建日志的类,这是一个相当大的解决方案,因此更改记录器不是一种选择。 WPF 应用程序只会读取这些,是的,它将仅基于文件名进行过滤。无需按实际内容进行过滤。
-
好的,这澄清了前两个问题。但是第3个。您是否可以控制对 Logger.Log 的调用? “The”应用程序将调用..“The”是您控制的应用程序,您可以包装对 Logger.Log 的调用吗?
标签: c# .net azure azure-storage azure-blob-storage