【问题标题】:Good resource for distributed computing / scale out patterns [closed]分布式计算/横向扩展模式的良好资源[关闭]
【发布时间】:2014-03-20 11:27:22
【问题描述】:

我们即将开始开发一个并行云处理应用程序,我正在寻找如何设置的好资源。让我设置上下文:

  • 首先我们加载一个包含大量数据的数据库
  • 然后我们有 n 个云服务实例,它们将从数据中生成 PDF
  • 然后 PDF 将被合并,再次应该是可缩放的
  • 结果存储在数据库中
  • 完成。

我正在寻找资源来帮助我回答以下问题:

  • 如何衡量所有这些实例的进度?我想一个正在监控的控制器实例。我们应该使用投票还是发布/订阅系统?
  • 如何控制这些 n 实例启动/停止/暂停等?
  • 控制器进程应该知道处理器,还是应该收听广播?
  • 我们正在考虑一个“数据”队列,即每个 PDF 生成实例从中获取要处理的指令的队列,我们​​是否还应该为“开始/停止”之类的命令使用“命令”队列?

或者 - 是否已经有一些开箱即用的东西?我正在寻找“企业应用架构模式”,但专为横向扩展/并行/云处理而设计。

有什么想法吗?

编辑 感谢您的-1。如果您有疑问,我已经用 Google 搜索过,我已经搜索过 PluralSight 并且我已经浏览过 Azure 视频。我没有遇到任何描述过程控制器/处理器设置的模式。

【问题讨论】:

标签: azure architecture parallel-processing cloud distributed-computing


【解决方案1】:

正如@JuneT 提到的,请查看Cloud Design Patterns 指南。我会推荐评论中提到的Leader Election 模式。

其他一些想法:

  • 我认为您不应该考虑拥有一个控制器实例。所有实例都应该有平等的机会成为领导者。这样你就可以确保领导者不会失败。对于决定领导者,您应该查看Lease Blob 功能。
  • 您应该查看Windows Azure Diagnostics 来监控这些实例的运行状况。 Windows Azure Diagnostics 还支持自定义性能计数器,您可以使用它来监控每个实例的有效性。对于扩展,您可以依赖门户中提供的Windows Azure Auto Scaling 功能,或者从 Paraleap 软件中寻找像AzureWatch 这样的第三方解决方案。负责扩展的过程不应该是您的解决方案恕我直言的一部分。它应该放在外面的某个地方。

所以事件的一般顺序可能是:

  1. 所有个体都将相互争夺成为领导者。只有一个实例将被选为领导者。所有其他实例都将等待领导者的消息(我们称它们为追随者)。
  2. Leader 将从数据库中获取数据并将信息推送到队列中。追随者将轮询此队列。一旦消息到达队列,追随者将开始处理这些消息。一旦追随者完成了一项任务,他们就会回到队列中,看看是否还有更多工作要做。一旦领导者将所有消息放入队列中,它将成为追随者并处理消息。
  3. 处理完所有消息后,所有实例都将返回第 1 步。

【讨论】:

  • 非常有趣。在我想到的所有场景中,我没有想到没有控制过程的方法。我会阅读它并理解这个概念。问题是,我们如何启动/停止追随者。
【解决方案2】:

我认为您根本不需要控制器。什么业务流程开始将数据加载到数据库中?无论这个过程是什么,它都可以在队列中填充关于需要生成哪个 PDF 的消息。

然后,您希望拥有一个具有 N 个服务器的 Worker 角色,这些服务器基本上会一直查看队列,从队列中提取消息(如果有),处理它们(即:生成 PDF)并从队列中删除消息

像 Azure 的本机基本自动缩放这样的自动缩放解决方案,或者像 AzureWatch 这样更强大的解决方案可以在队列中有消息时创建额外的服务器,并在队列耗尽时移除不需要的服务器。

这是在 N 个实例之间分配负载的一种非常标准的方法。进度可以通过查看队列来衡量,看看其中还剩下多少消息。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2011-11-11
    • 1970-01-01
    相关资源
    最近更新 更多