分布式计算/扩展模式的良好资源

时间:2014-03-20 11:27:22

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

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

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

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

  • 如何衡量所有这些实例的进度?我想一个监控的控制器实例。我们应该使用民意调查还是发布/子系统?
  • 如何控制这些n个实例来启动/停止/暂停,无论如何?
  • 控制器进程应该知道处理器,还是应该听广播?
  • 我们正在考虑一个'数据'队列,即每个PDF生成实例从中获取处理指令的队列,我们​​是否还应该使用'命令'队列来执行'start / stop'这样的命令?

或者 - 是否已经有了开箱即用的东西?我正在寻找“模式的企业应用程序架构”,但专门针对扩展/并行/云处理。

有什么想法吗?

修改 谢谢-1。万一你有疑问,我用谷歌搜索它,我搜索了PluralSight,我查看了Azure视频。我没有遇到任何描述过程控制器/处理器设置的模式。

2 个答案:

答案 0 :(得分:3)

正如@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.

答案 1 :(得分:1)

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

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

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

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