2009-02-16 92 views
3

我們正在開發一個.NET應用程序,它必須使成千上萬的小型Web服務調用到第三方Web服務。我們更喜歡更「矮胖」的電話,但第三方不支持它。我們設計客戶端使用可配置數量的工作線程,並通過測試獲得針對一個多核計算機進行了相當優化的代碼。但是,我們仍然希望提高速度,並且正在研究跨多臺機器的工作。我們非常精通典型的客戶端/服務器/數據庫應用程序,但是對於多臺機器的設計來說是新的。所以,有幾個相關的問題:向多臺機器擴展工作的最佳方式是什麼?

  • 是否有任何其他客戶端優化,除了多線程,我們應該看看可以提高HTTP請求/響應速度? (我應該注意到這是一個非標準的Web服務,所以使用WebClient實現,而不是WCF或SOAP客戶端)
  • 我們當前的想法是使用WCF將工作塊發佈到MSMQ,並在一個或多個機器將工作從隊列中拉出。我們有WCF + MSMQ的經驗,但要確保我們不會錯過更好的選擇。今天還有其他更好的方法嗎?
  • 我見過一些像DigiPede和微軟的HPC產品的第三方工具,但這些看起來像是矯枉過正。這些產品的任何經驗或原因,我們應該考慮他們在我們自己的?
+0

嘗試ActiveMQ而不是MSMQ,喜歡它。 – Avram 2009-02-16 18:38:36

+0

根據應用程序的不同,如果您已經在使用SQL Server,那麼SQL Server Service Broker而不是MSMQ可能是一個重大勝利。 – MichaelGG 2009-02-16 18:56:17

回答

3

聽起來像您的目標是儘快執行所有這些Web服務調用,並將結果列表。鑑於此,您最大的效率控制將通過擴展您可以製作的併發請求的數量來實現。

一定要看看你的client-side connection limits。默認情況下,我認爲系統默認是2個連接。我沒有嘗試過這個,但通過使用這個屬性來增加連接的數量,理論上你可以看到一個乘數效應,通過從一臺機器產生更多的連接來產生更多的請求。 MS論壇上有more info

MSMQ選項效果很好。我正在運行該配置。 ActiveMQ也是一個很好的解決方案,但MSMQ已經在服務器上。

你有一個很好的起點。讓它運行起來,然後轉向性能和吞吐量。

+0

希望我可以標出所有答案 - 都非常有幫助,但是這個讓我在我的app.config中設置了maxConnections,這導致了速度的兩倍提高。仍然不是我們想要的地方,所以我們正在研究MSMQ,Rhino和EC2/Azure。 – Daniel 2009-02-17 15:32:46

1

在今年的CodeMash上,Wesley Faler在這類問題上做了一個有趣的介紹。他的解決方案是將「工作」存儲在數據庫中,然後使用客戶端完成工作並標記狀態。

然後,他將整個基礎設施推向亞馬遜的EC2。

Here's his slides from the presentation - 他們應該給你的基本思路:

我已經做了一些類似的W /多臺電腦本地 - 管理工作量的基礎是相似的Faler的做法。

1

如果你已經優化的代碼,你可以看看優化網絡側,以儘量減少發送的數據包數量:

  • 重用HTTP會話(即:多個事務組合成一個會議通過保持連接打開,降低TCP開銷)
  • 減少HTTP標頭數到最低的要求,以節省帶寬
  • 如果服務器支持,使用gzip壓縮的身體請求(需要平衡CPU使用率以進行壓縮以及節省的帶寬)
相關問題