簡體   English   中英

調用隨機超時的外部服務會殺死ASP.NET MVC應用程序

[英]Calling external services which randomly timeout kills the ASP.NET MVC application

因此,我有這個Web應用程序(ASP.NET MVC 4網站),該應用程序在任何時候都至少有2,000個在線用戶。 我的應用程序中最受歡迎的頁面之一包含有關用戶的數據,而該數據不在我的存儲庫中,而是包含在集成到我的系統中的某個外部供應商中。 因此,無論何時繪制此頁面,我都必須調用這些服務(當前有17個),而不是根據它們提供的數據繪制該頁面。 數據在任何給定時刻都會發生變化,因此我無法對其進行緩存。 大多數情況下,一切正常,CPU利用率為5%-30%(當然取決於在線用戶的數量)。 對於每個服務調用,我都有5000毫秒的超時(對於服務引用,我設置了SendTimeout ,對於原始HttpWebRequests'我將TimeOut屬性設置為等於5000毫秒)現在,假設一個服務關閉了,服務器的CPU利用率下降到3%-8%的低水平,並且應用程序滯后,我的意思是加載頁面(任何頁面)都需要花費一些時間,例如,如果在正常情況下,我的應用程序的響應將花費(150-250ms)現在需要1-3秒。 我不知道該怎么辦。 我無法減少超時,因為某些服務有時需要3-4秒,因此5秒鍾的超時是我可以提供的租約。 我該如何防止遲到? 我知道這是一個普遍的問題。 任何建議,將不勝感激。 提前致謝。

看起來您有線程問題。 太多的線程正在等待來自外部服務的響應,並且它們無法處理其他請求。

我建議您使用異步控制器: http : //www.asp.net/mvc/overview/performance/using-asynchronous-methods-in-aspnet-mvc-4

建議1

如果將此數據復制到服務器怎么辦? 意味着您可以擁有另一項服務,該服務可以單獨運行並與服務器同步外部服務的數據...並且您的網站始終指向您的本地數據...對,這是某種緩存,網頁可以顯示舊數據...但是您可以設置復制服務以根據需要經常檢查數據...

建議2

我想到的另一個建議是,您可以改用推送通知嗎? 所有網頁打開並等待,服務器檢查數據,並用新數據通知所有客戶端...在這種情況下,只有一個線程將忙於處理外部數據,所有打開的用戶將盡快擁有新數據。可用。 作為起點,檢查SignalR

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM