【发布时间】:2015-10-09 12:24:34
【问题描述】:
我们正在研究创建一个用于任务执行的分布式系统,其中任务在 .NET (C#) 中具有优先级。有很多选择,我想听听你的看法。选项及其缺点是:
1) Amazon 的 SWF(简单工作流程) - 在 .NET 中,我们不能使用诸如 java 的 FLOW 之类的框架来简化。这意味着大量的样板代码。此外,亚马逊的这个产品似乎不是很受欢迎(所以:没有社区支持,最终可能会消失)
2) 在排队系统之上构建我们自己的
2.a) SQS - 不是真正的 FIFO,使用 2 个队列(普通和高优先级)不会让我们对优先级进行精细控制(我们也许可以忍受) )
2.b) RabbitMQ - 管理开销(设置、在集群模式下配置以提高可靠性等)
3) 我收到了另一个建议,即在没有队列的情况下使用“事件驱动”。我看不出这怎么可能,也许有人可以帮我澄清一下? (哦,还有,它是否与称为 Akka(基于 actor)的技术有关)
谢谢
【问题讨论】:
-
我将 SWF 与 .Net 一起使用了大约两年,我不后悔这个决定。 Flow 框架很好,我很羡慕它的一些功能,但 C# 也有它的优势。 SWF 的核心非常简单。我已经为我需要的东西实现了简单的包装器,并且发现它非常灵活。例如,我在短短两个小时内实现了对失败的活动任务的重试。它还与 CloudWatch 很好地集成。
-
就所需工作量而言,SQS 可能是最便宜的选择。从 Q 中并不清楚使用模式将是什么,但如果它只是排队工作并按优先级顺序执行,那么使用多个 SQS 队列并按优先级顺序遍历它们完全有意义。 (您可以根据需要使其粒度化)
标签: rabbitmq akka distributed-computing amazon-sqs amazon-swf