我们即将开始开发并行云处理应用程序,我正在寻找如何设置的良好资源。让我设置上下文:
- 首先我们加载包含大量数据的数据库
- 然后,我们有 n 个云服务实例,可以根据数据生成 PDF
- 随后 PDF 将被合并,同样应该可以缩放
- 结果存储在数据库中
- 完成。
我正在寻找资源来帮助我回答以下问题:
- 如何衡量所有这些实例的进度?我假设有一个正在监视的 Controller 实例。我们应该使用轮询还是发布/订阅系统?
- 如何控制这些 n 个实例来启动/停止/暂停?
- Controller 进程应该了解处理器,还是应该监听广播?
- 我们正在考虑“数据”队列,每个 PDF 生成实例从中获取要处理的指令的队列,我们是否还应该使用“命令”队列来执行“启动/停止”等命令?
或者 - 是否已经有现成的东西可以做到这一点?我正在寻找“企业应用程序架构模式”,但专为横向扩展/并行/云处理而定制。
有什么想法吗?
编辑 谢谢你的-1。如果您有疑问,我已经在 Google 上搜索过,我已经搜索过 PluralSight,并且还浏览了 Azure 视频。我还没有遇到任何描述过程 Controller /处理器设置的模式。
最佳答案
正如 @JuneT 提到的,看看 Cloud Design Patterns
指导。我会推荐评论中提到的领导者选举
模式。
其他一些想法:
- 我认为您不应该考虑拥有一个 Controller 实例。所有实例都应该有平等的机会成为领导者。这样你就可以确保领导者不会失败。为了决定领导者,您应该查看
Lease Blob
功能。 - 您应该研究
Windows Azure Diagnostics
作为监控这些实例运行状况的方法。Windows Azure Diagnostics
还支持自定义性能计数器,您可以使用它来监控每个实例的有效性。对于扩展,您可以依靠门户中提供的Windows Azure Auto Scaling
功能,或者寻找第三方解决方案,例如来自 Paraleap 软件的AzureWatch
。恕我直言,负责扩展的流程不应成为您的解决方案的一部分。它应该位于外面的某个地方。
因此事件的一般顺序可能是:
- 所有个体都会为了成为领导者而相互斗争。只有一个实例会被选为领导者。所有其他实例将等待领导者的消息(我们称其为追随者)。
- Leader将从数据库中获取数据并将信息推送到队列中。关注者将轮询此队列。一旦消息到达队列,追随者将开始处理这些消息。一旦追随者完成一项任务,他们就会回到队列,看看是否还有更多的工作要做。一旦领导者将所有消息放入队列,它将成为追随者并处理消息。
- 处理完所有消息后,所有实例都将返回到步骤 1。
关于azure - 分布式计算/横向扩展模式的良好资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22531547/