2012-10-23 11 views
2

我們有一個WCF服務,我們將在Azure上託管。它需要一些XML並在內存中進行處理(無需外部調用/ db等,大約需要150ms)並返回一些xml。爲什麼添加更多計算機時,我的Azure託管的WCF服務無法擴展?

我們一直在負載測試它,當我們在1,2和4核機器,我們可以最大程度跑出來的處理器和周圍的每秒吞吐量(4核機器上)40個呼叫的最大值得到。然而,當我們切換到8核心機器或兩個4核心機器時,我們仍然只能每秒接近40個呼叫。

爲什麼會我不能當我擴大機做處理的數量,以獲得更多的吞吐量?我希望增加更多的機器會相當線性地增加我的吞吐量,但事實並非如此。爲什麼不?

+0

這是否是您的負載測試的問題?如果您同時運行多臺機器的負載測試,會發生什麼情況 –

+0

感謝Sandrino,如果我們從多臺機器運行,我們會得到相同的結果... –

+1

什麼處理XML的意思嗎?你調用一個數據庫,外部Web服務,...這可能是瓶頸? –

回答

2

不知道如果Azure的有特定的限制,但在.NET框架有到可以在同一時間內同一地址的傳出連接數的限制。在這個被稱爲Improving Web Services Performance MSDN文章裏提到,它的默認值是2

配置的MAXCONNECTION屬性

Machine.config中MAXCONNECTION屬性限制併發外呼的數量。

注意此設置不適用於本地請求(請求從ASP.NET應用程序提交同一服務器作爲Web服務上)。該設置適用於來自當前計算機的出站連接,例如,用於調用其他遠程Web服務的ASP.NET應用程序和Web服務。 maxconnection的默認設置是每個連接組兩個。對於調用Web服務的桌面應用程序,兩個連接可能就足夠了。對於調用Web服務的ASP.NET應用程序,通常兩個是不夠的。將maxconnection屬性從默認值2更改爲(CPU數量的12倍)作爲起點。

<connectionManagement> 
    <add address="*" maxconnection="12"/> 
</connectionManagement> 

注意,每個CPU 12個連接爲任意數,但經驗證據表明,它是最適合各種場景,當你還限制ASP.NET到12個併發請求(見本章後面的「Threading」部分)。但是,您應該針對您的情況驗證適當的連接數。

這些限制是爲了防止單個用戶壟斷遠程服務器上的所有資源(DOS攻擊)。由於這是一個在Azure中運行的服務,因此我猜測他們已經限制了他們的最終目的,以防止用戶從單個IP消耗所有傳入連接。

我的下一步是檢查並查看是否存在對azure Web角色的併發連接限制(this thread suggests there is and it's configurable)),或者增加它。否則,我會嘗試從多個來源執行我的負載測試,看看您是否仍然體驗相同的限制

+0

感謝菲爾,我們在這裏嘗試了一些建議,但最終發現我們受到公司網絡上的某些限制,因爲從網絡外部運行使性能翻了一番。我將這個標記爲答案,因爲它將我與大量有用的東西聯繫起來。 –

+0

很高興我的回答很有用。在過去,當我們的Web服務器在連接到其他服務的重負載下發生超時錯誤時,過去我已經被2連接默認燒了。我的Google技能讓我失望,但如果您的服務器是其他服務的代理服務器(IE您的網站羣必須與PayPal或其他支付提供商進行交談),那麼最大連接數有一個特定的指導方針。 –

相關問題