2011-12-29 59 views
1

这个问题的一部分是我甚至不知道我到底需要问什么,所以我会从情况开始,然后从那里开始工作。网络农场的服务总线(也许?)

我正在处理的一个项目涉及通过aspComet库使用COMET。该方案的用例有点像协作幻灯片。一个人运行大部分,一个或多个参与者能够执行某些操作。在屏幕上执行操作时的低延迟时间

以前,它只是在一台服务器上运行。现在,我们想要扩展一点,更多的是因为性能方面的可靠性。所以,我们在Rackspace的云中有一些盒子和所有有趣的东西。

我从一开始就知道我需要对COMET的工作方式做一些改变,因为同一个“show”中的不同人可能在不同的服务器上,我也无法知道什么“表演”,直到他们已经到达现场后才属于他们。

我最初使用WCF Mesh提供程序解决了这个问题,但没有很好的文档记录,现在我遇到了将消息分发给它的问题,有时会丢失或延迟(我不是100%确定的),但它把COMET的长期民意调查搞砸了,并以相当奇怪的方式打破了事情(点击一个按钮可能触发一个事件,或者它会挂起10秒{长轮询持续时间},而没有实际做任何事情)。

更多的研究让我相信.Net服务总线提供商可能会做我所需要的。但是,我找不到实例,将覆盖我需要什么:

  1. 无单一故障点(外的数据库)
  2. 同龄人没有硬编码。
  3. 近实时(无轮询,基于将是最好的事件)

我的理想的解决方案将涉及,当一台服务器出现时,它可以让其他服务器知道它的存在(即使它在短短的一行一个表格),并且他们可以开始在彼此之间发送广播消息,每个服务器既是发布者又是订阅者。这就是我在WCF Mesh提供程序中所拥有的,但是我对该代码不太有信心。

任何人都可以用这个指向正确的方向吗?即使在服务总线提供商的文档中寻找合适的条款也适用于此。还是服务巴士不是我想要的?在这一点上,我会解决在每个Web服务器上设置Jabber服务器并使用它,如果它可以适应我的限制。

+1

我建议使用RabbitMQ排队您的数据,并使用HTTP Streaming,如果您想近实时检索数据而不必长时间轮询 – rpgmaker 2011-12-29 18:04:02

回答

1

我不能说一吨NServiceBus,但我期待的答案是类似的。

  1. 单点故障:MSMQ可以使用多播,这意味着每个端点将广播它的存在并且不需要数据库表。 RabbitMQ使用这种Exchange-to-Queue绑定过程,这意味着只要Rabbit实例或集群启动,消息仍然存在。 RabbitMQ可以聚集,MSMQ不可以。 *注意:您可能在使用Rackspace进行多播时遇到问题,不知道它们是如何工作的。如果是这样,你将不得不退居到MSMQ(不是RabbitMQ)的运行时服务上,因为每个人都有一个协调控制消息的单点,所以会产生单点故障。

  2. 对等体的硬编码:稍后讨论一下; MSMQ的多播处理它。兔子也可以完成,只需将队列绑定到您想要收听的交换。 MassTransit为您照顾这件事。

  3. 近实时:这些都使用接近实时的消息。消息使用者代码中没有轮询。

我认为服务巴士似乎是您尝试的合理解决方案。可能需要更多的细节,但一般的消息传递方法是正确的。如果您决定只需要RabbitMQ上的某些内容并配置Rabbit来处理大部分内容,还有其他更轻量级的消息传递库。

要开始使用MassTransit,我们提供了文档:http://readthedocs.org/projects/masstransit/和邮件列表http://groups.google.com/group/masstransit-discuss。如果您有将来的问题,请加入邮件列表,有人会尽力帮助您。

+0

MSMQ可以进行群集以实现高可用性。 – 2011-12-29 17:21:20