用于聚合的 Azure WebJobs

Azure WebJobs for Aggregation

我正在尝试通过使用 Azure 队列和 WebJobs 来获取数据,找出数千个远程 XML 和 JSON 数据文件的重复数据聚合的解决方案。

基本上,将在 Azure website/app 上调用某种输入端点 URL(使用数据 URL 作为参数)。它应该触发 WebJobs 后台作业(或者它可以连续 运行 并定期检查队列中的新工作),获取数据 URL 然后在完成时回调外部端点 URL。

现在主要关注的是卷及其 performance/scaling/pricing 开销。每 10-60 分钟将获取大约 10,000 URLs(大多数 URLs 将每 60 分钟获取一次)。关于这种反复出现大量后台作业的情况,我有几个问题:

  1. Azure WebJobs(或 Workers?)是否是此容量后台处理的正确选择,并且能够相应地扩展?

  2. 对于这种流量,哪个 Azure 网站层级最合适(比较 http://azure.microsoft.com/en-us/pricing/details/app-service/)?还是只有云或 VM 才能以这种规模工作?

如有任何建议或提示,我们将不胜感激。

  1. 是的,Azure WebJobs 是一个理想的解决方案。 Azure WebJobs 将与您的 Web 应用程序(以前称为网站)一起扩展。因此,如果您增加 Web 应用程序实例,您也会增加 Web 作业实例。有一些方法可以防止这种情况发生,但这是默认行为。您还可以设置自动缩放以根据 CPU 或您指定的其他性能规则自动缩放您的网络应用程序。
    还可以独立于 Web 前端 (WFE) 扩展 Web 作业,方法是将 Web 作业部署到与部署 WFE 的 Web 应用程序分开的 Web 应用程序。这样做的好处是不占用 WFE 使用的机器资源(CPU、RAM),同时让您可以灵活地将 Web 作业实例扩展到适当的级别。不是说这是你应该做的。您将必须进行一些负载测试以确定此策略是否适合(或必要)您的情况。

  2. 您应该至少考虑 Web 应用程序的基本层。如果需要,这将允许您扩展到 3 个实例,并且还删除了免费和共享计划所具有的 CPU 和网络 I/O 限制。

至于队列,我肯定会建议使用 WebJobs SDK 并让 JobHost(来自 SDK)为您调用 Web 作业函数,而不是轮询队列。这是一个非常巧妙的解决方案,使您不必编写基础结构代码来从队列中检索消息、管理消息可见性、删除消息等。有关此的工作示例和快速开始构建您的 Web 作业,就像这样,请查看 Azure WebJobs SDK Queues 模板为您制作的示例代码。