【问题标题】:Service Bus (Maybe?) for web farm网络场的服务总线(也许?)
【发布时间】:2011-12-29 06:58:22
【问题描述】:

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

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

以前,它只在一台服务器上运行。现在,我们希望将其扩展一点,更多的是出于可靠性而不是性能原因。所以,我们在 Rackspace 的云中提供了一些盒子和所有有趣的东西。

从一开始我就知道我需要对 COMET 的工作方式进行一些更改,因为同一“节目”中的不同人可能在不同的服务器上,而我无法知道是什么在他们已经到达站点之前“显示”他们所属的位置。

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

更多的研究使我相信 .Net 服务总线提供商之一可能会满足我的需求。但是,我找不到可以满足我需要的示例:

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

我理想的解决方案是,当一个服务器启动时,它会让其他服务器知道它的存在(即使它只是某处表格中的一行),并且它们可以开始在每个服务器之间相互发送广播消息既是发布者又是订阅者。这就是我在 WCF Mesh 提供程序中的部分内容,但我对该代码并不太自信。

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

【问题讨论】:

  • 我建议使用 RabbitMQ 对您的数据进行排队,如果您想要接近实时检索数据而无需进行长时间轮询,请使用 HTTP Streaming

标签: asp.net comet nservicebus masstransit


【解决方案1】:

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

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

  2. 对等体的硬编码:上面讨论了一点; MSMQ 的多播处理它。 Rabbit 也可以,只需将队列绑定到您要收听的交换即可。 MassTransit 会为您解决这个问题。

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

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

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

【讨论】:

  • MSMQ 可以集群以实现高可用性。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多