多个服务器上的数据处理 - Azure

时间:2015-10-07 16:05:35

标签: parsing azure architecture rss restful-architecture

我们有WebApi云服务,它接收订阅源列表作为参数,并从这些订阅源返回实际文章的解析HTML文件...所以处理逻辑是这样的:

  • 下载所有Feed
  • 解析Feed中的所有文章
  • 获取所有实际文章链接
  • 下载所有文章html
  • 解析所有文章html
  • 返回结果

在一台机器(4个核心)上进行并行处理可以很好地处理少量文章的1或2个Feed。但我们需要能够并行处理20-30个馈送和300-500个文章的架构。

enter image description here

这是我们目前的想法。托管两个云服务(Feed解析和文章解析)。

Feed解析服务向用户公开,这些用户将Feed列表作为参数发送到此服务。此服务将此列表分成较小的块并发送给文章解析服务进行处理。

文章解析服务将在一个云服务下有一些vm实例,而Azure默认情况下每个请求进程在不同的实例上(完成负载平衡)

因此结果应该是所有文章都是并行处理的。

但我认为在Azure上有更聪明的方法来实现这一点,还有其他任何想法吗?

此外,后台预处理也不是一种选择。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

还有一些其他要求没有说明(即用户提交请求的响应性和总体处理时间)。但是,做一些假设(稍后的异步响应)我可能会冒险猜测。我的第一个想法是你不需要2个云服务。您可以使用1来接收用户请求并将工作单元放在azure队列中。然后,您可以让N个工作队员等待队列并获取下一个可用项目。完成后,他们可以将结果存储在持久存储(SQL Azure,表/ Blob存储)中,并将完成通知放在另一个队列中。这里有更多的推测,但除非你已经分析了这项工作的一组样本,否则你可能在大部分时间花在哪里都不正确。换句话说,可能没有必要将工作分为两个阶段(提取链接,然后解析文章),它可能足够快,只需要一个工作单元包含两个步骤。我总是首先尝试更简单的解决方案,然后如果我需要更多性能,我会重构它。但是,如果这不符合您的处理时间要求并且您想要更多并行化,那么您仍然可以使用我概述的基本方法,但是每个阶段有2个队列,1个队列。它甚至可能是在不同线程中等待两个队列的相同工作进程,或者它可能是完全独立的进程。其他设计约束可能要求(即成本,总吞吐量)。