网络农场的服务总线(也许?)



这个问题的一部分是我甚至不确定我到底需要问什么,所以我将从情况开始,从那里开始。

我正在做的一个项目涉及到通过aspComet库使用COMET。该程序的用例有点像协作幻灯片。一个人运行它的大部分,一个或多个参与者可以执行某些操作。在屏幕上执行动作之间的低延迟

以前,它只在一台服务器上运行。现在,我们想把它扩展一点,更多的是出于可靠性而不是性能的考虑。所以,我们在Rackspace的云中有一些盒子和所有有趣的东西。

我从一开始就知道我需要对COMET的工作方式做一些改变,因为相同"show"中的不同人可能在不同的服务器上,并且我无法知道他们属于哪个"show",直到他们已经到达站点。

我最初使用WCF网格提供程序来解决这个问题,它开始时没有很好地记录,现在我遇到了向它发送消息的问题,有时会丢失或延迟(我不是100%确定那里发生了什么),但它搞砸了COMET的长轮询,并以相当奇怪的方式打破了事情(点击一个按钮可能会触发一个事件,或者它会挂起10秒{长轮询持续时间}而实际上不做任何事情)。

更多的研究使我相信。net服务总线提供程序之一可以做我需要的。但是,我找不到涵盖我需要的示例:

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

我的理想解决方案是,当一个服务器出现时,它会让其他服务器知道它的存在(即使它只是某个表中的一行),然后它们可以开始相互发送广播消息,每个服务器既是发布者又是订阅者。这是我在WCF网格提供程序中所拥有的,但我对该代码并不过于自信。

谁能给我指一下正确的方向?在这一点上,甚至在文档中寻找服务总线提供商的适当术语也会很好。还是服务巴士不是我想要的?在这一点上,我将满足于在每个web服务器上设置一个Jabber服务器并使用它,如果它可以在我的限制范围内。

我不能对NServiceBus说太多,但我希望答案是相似的。

  1. 单点故障:MSMQ可以使用多播,这意味着每个端点将广播它的存在,不需要DB表。RabbitMQ使用这种交换到队列的绑定过程,这意味着只要Rabbit实例或集群处于启动状态,消息就仍然存在。RabbitMQ支持集群,MSMQ不支持集群。*注意:你可能有问题与Rackspace多播,不知道他们是如何工作的。如果是这样,你将不得不依赖于MSMQ(而不是RabbitMQ)的运行时服务,这会造成单点故障,因为每个人都有一个单点来协调控制消息。

  2. 硬编码的对等体:上面讨论了一点;MSMQ的多播处理它。当然,也可以这样做,只需将队列绑定到您想要侦听的交换器。地铁会帮你搞定的。

  3. 近实时:它们都使用接近实时的消息传递。在您的消息使用者代码中没有轮询。

我认为服务总线似乎是您正在尝试的一个合理的解决方案。可能需要更多的细节,但是一般的消息传递方法是正确的。如果你决定要在RabbitMQ之上添加一些东西,并配置Rabbit来处理大部分的东西,那么还有其他更轻量级的消息库。

要开始使用MassTransit,我们有文档:http://readthedocs.org/projects/masstransit/和邮件列表http://groups.google.com/group/masstransit-discuss。加入邮件列表,如果你有未来的问题,有人会试图帮助你。

相关内容