1

我的任务是为应用程序构建原型。我还没有任何代码,因为我提出的解决方案概念充其量看起来很臭......

问题:

该解决方案由各种 Azure 项目组成,这些项目对存储在 Azure SQL db-s 中的大量数据进行处理。几乎每个发生的操作都会在 blob 存储中创建一个 gzip 压缩的日志文件。所以这是每个日志条目一个 .gz 文件。

我们还应该有一个小型桌面 (WPF) 应用程序,它应该能够读取、过滤和排序这些日志文件。

我对如何完成日志记录的影响绝对为 0,因此这是无法更改以解决此问题的东西。

我提出的可能的解决方案(概念上):

1:

  • 连接到 blob 存储
  • 打开容器
  • 读取/下载 blob(应用过滤器)
  • 解压 .gz 文件
  • 读取和显示

这样做的问题是,根据过滤器的不同,这可能意味着要下载大量数据(速度很慢)和处理(也不会很快速)。我真的看不出这是一个可用的应用程序。

2:

  • 创建一个将运行 WCF 或 REST 服务的 Web 角色
  • 该服务将获取过滤器参数和其他内容并返回包含数据的单个 xml/json 文件,处理将在云端完成

使用这种方法,如果有很多文件,我会在解压缩这些文件时遇到问题(它会占用运行服务的存储/计算实例的额外空间)。

编辑:我所说的过滤器的意思是按日期和严重性(信息、警告、错误)限制结果。.gz 文件保存在一个结构中,这使得这很容易,我不会通过查看文件本身来过滤。

3:

  • 我不知道的其他一些优雅而简单的解决方案

我还需要某种方法让应用程序实时更新显示的日志,我想这需要通过对 blob 存储/服务的重复请求来完成。


这不是那些“给我代码”的问题之一。我正在寻找有关最佳实践的建议,或适用于类似问题的类似解决方案。我也知道这可能是那些“没有一个正确答案”的问题之一,因为人们有不同的解决问题的方法,但我有一些时间来构建一个原型,所以我会尝试不同的东西,我会选择正确的答案,这将是一个显示有效解决方案的解决方案,或者是引导我朝着正确方向前进的解决方案,即使在我实际构建某些东西并对其进行测试之前确实需要一些时间。

4

2 回答 2

1

据我了解,您在 Azure Blob 存储中有一组以特定方式 (gzip) 格式化的日志文件,并且您希望显示它们。

这些文件有多大?您是否在日志文件中显示每条信息?

假设如果这是一个日志文件,它是静态的和历史的……这意味着一旦创建了 log/gzip 文件,它就无法更改(一旦 gzip 文件在博客存储中出现,您就不会更新它)。只能创建新文件...

一种解决方案


为什么不创建一个工作角色/作业进程,它会定期退出并扫描 blob 存储并构建一个持久的“数据库”,以便您可以显示。这样做的好处是您没有将解压缩/业务逻辑用于在 WPF 应用程序或 UI 中提取日志文件。

1) 我会让工作人员角色扫描 Azure Blob 存储中的日志文件 2) 有某种机制来跟踪处理了哪些文件以及当前“状态”可能是最后一个 gzip 文件的 UTC 日期 3) 完成所有解压缩/提取辅助角色中的日志文件 4) 让辅助角色将内容放在 SQL 数据库、Azure 表存储或分布式缓存中以供访问 5) 可以通过 REST 服务(ASP.NET Web API/节点)进行访问.js 等)

如果您需要扩展它,您可以添加更多内容,例如将其作为作业运行以从给定时间重新执行所有日志文件(全部刷新)。我不知道您的数据大小,所以我不确定这是否可行。

这样做的好处是,如果您需要扩展您的工作(一夜之间),您可以启动 2、3、6 个工作角色...提取内容,将结果传递给将插入 SQL 的服务总线或存储队列,缓存等访问。

于 2012-11-07T14:02:20.633 回答
1

仅仅存储 blob 是不够的。您要过滤的元数据应存储在其他易于过滤和检索所有元数据的地方。所以我认为你应该把它分成两个问题:

A. 我如何有效地列出所有“gzip”及其元数据,以及如何对这些 gzip 应用过滤器以便在我的客户端应用程序中显示它们。

解决方案

  • Blob:列出 Blob 很慢,并且无法过滤(您可以每月或每周或用户或用户在容器中分组......但这不是过滤)。
  • 表存储:非常快,但是搜索很慢(只索引PK和RK)
  • SQL Azure:您可以创建一个表,其中包含“gzip”列表以及一些其他元数据(例如创建 gzip 的用户、时间、总大小......)。使用具有一些良好索引的存储过程可以使搜索速度非常快,但 SQL Azure 并不是最具可扩展性的解决方案
  • Lucene.NET:有一个适用于 Windows Azure 的AzureDirectory,可以在您的应用程序中使用 Lucene.NET。这是一个超快速的搜索引擎,允许您索引您的“文档”(元数据),这将非常适合过滤和返回“gzips”列表

更新:由于您只过滤日期和严重性,您应该查看 Blob 和 Table 选项:

  • Blob:您可以按日期+严重性(20121107-low、20121107-medium、20121107-high ...)创建一个容器。假设每个数据+严重性没有太多 blob,您可以直接从容器中直接列出 blob。您在这里可能遇到的唯一问题是,用户希望查看上周(7 天)以来严重性较高的所有项目。这意味着您需要列出 7 个容器中的 blob。
  • 表:即使您说不能选择表存储或数据库,也请考虑表存储。使用分区和行键,您可以轻松地以非常可扩展的方式进行过滤(您也可以使用CompareTo来获取一系列项目(例如,11 月 1 日到 7 日之间的所有记录)。在表存储中完全可以接受重复数据。您可以在表存储实体中包含来自 gzip 的一些数据,以便在您的 WPF 应用程序中显示它(过滤后要显示的最重要的信息)。这意味着您只需要在用户打开/加倍时处理 blob单击 WPF 应用程序中的记录

B. 如何在我的应用程序中显示“gzip”(例如双击搜索结果后)

解决方案

  • 从 WPF 应用程序连接到存储帐户,下载文件,解压缩并显示它。这意味着您需要将存储帐户存储在 WPF 应用程序中(或使用 SAS 或容器策略),如果您决定在后端更改文件存储方式,您还需要更改WPF 应用程序。
  • 连接到 Web 角色。此 Web 角色从 blob 存储中获取 blob,将其解压缩并通过网络发送(或将其压缩发送以加快传输速度)。如果您存储文件的方式发生变化,您只需更新 Web 角色
于 2012-11-07T14:02:37.863 回答