2011-12-29 63 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