我正在尋找一些我們遇到的生產問題的幫助。什麼導致了這種情況下的瓶頸?
我們有一個NServiceBus處理程序,它在處理消息時向IIS 6.0上運行的asmx(.net 2.0)Web服務發送請求,然後Web服務將第二個http請求平均發送到第三方Web服務第三方服務需要500毫秒才能響應,但我們被告知只有當11個同時請求正在進行時纔會啓動排隊請求。
爲了滿足我們處理SLA的需求,我們需要每小時處理79,000條消息或每分鐘處理約1300條消息。有11個請求並行處理,平均需要500毫秒,如果我們能夠獲得11個併發請求,每秒鐘我們應該能夠處理大約20條消息,這應該是可以實現的。
我們現在面臨的問題是,我們無法在這些數字附近找到任何地方。我們部署的解決方案如下。我們有一項服務,每5分鐘輪詢一個數據庫以檢索一批100條新消息,它將它們發送給一個經銷商,該經銷商負責在兩臺服務器上運行的四個工作者Windows服務間的負載平衡。我會給他們打電話NsbServerA & NSbServerB。每個輔助服務都配置了2個線程,所以我們總共有8個線程。我們有兩臺運行asmx Web服務的服務器,我將其稱爲asmx1 & asmx2,ServerA向asmx1發送請求,ServerB向asmx2發送請求。
當前的吞吐量是每小時30,000條消息,每分鐘約500個,每秒約8個,所以我們有一個瓶頸問題在哪裏?
我已經看到這篇文章http://support.microsoft.com/default.aspx?scid=kb;en-us;821268這似乎表明如果您想對同一個webservice進行多個併發調用,您必須調整IIS 6.0過程模型。從文章
報價: 「如果你正在一個Web服務調用從每個ASPX頁面一個IP地址,Microsoft建議您使用以下配置設置: 設置maxWorkerThreads參數的值和maxIoThreads參數到100 設置MAXCONNECTION參數的值,以12 * N(其中N是你有CPU的數量)。 設置minFreeThreads參數的值,以88 * N和minLocalRequestFreeThreads參數to76 * N。 將minWorkerThreads的值設置爲50.請記住,默認情況下minWorkerThreads不在配置文件中,您必須添加它。「
如果任何人都可以闡明發生了什麼或解決方案是什麼,我會非常感激。
感謝,
查理
Downvoter,請與OP分享他需要糾正的內容,以避免downvote。 –
您是否單獨測量每個組件的吞吐量?這可以使用每個組件的存根/模擬服務來完成。 – Oded
我在任何地方都看不到編程問題。 – bmargulies