2

我有一個有點小的服務結構應用程序,我正在構建,並且自從我轉換爲服務結構後,對於啓動速度慢的問題感到惱火,它不僅在發佈之後,而且在像10- 15分鐘不活動。「休眠」服務結構應用程序

我已經添加了一個項目,其唯一目的是去每個服務,並每隔10s發出一個小的數據庫請求,並認爲這會保持應用程序和ef運行。這幫助我獲得超時,現在第一個請求在5-15s範圍內。在一些預熱之後,請求通常在300ms範圍內,因此它們很容易請求,並且服務之間沒有太多的通信(總共4個服務)。

經過大量的搜索後,我發現了一個似乎工作的分析器,因爲大多數人不喜歡visual studio中的分析器。不幸的是,除了它等待線程很多並且它看起來不在我的代碼中之外,它並沒有真正說多少。我的所有外部請求都使用await async。另外,當遵循請求有點似乎有信息丟失...

起初我認爲慢生可能來自於生成搜索查詢,所以我遷移該部分使用DAPPER(完整的請求仍然使用一些),但這並沒有改變任何事情。

該應用程序具有所有最新的服務結構,dotnet核心,ef核心,應用程序見解包。除了一個驗證令牌之外的所有服務都是無狀態的。當然內置在發佈模式。

在這一點上,我有點失落,因爲我找不到它如此緩慢的原因。在過去,這通常是因爲IIS關閉了應用程序或將其回收,但現在當它不在時,它可能是什麼?

+0

您是將此部署部署到Azure中的羣集還是僅在本地計算機上遇到此問題? –

+0

我在本地和將它部署到3臺服務器集羣時都存在這個問題,該集羣未在天藍色 – user1842278

+0

假設您的流量負載均衡...請記錄您的服務解析到的節點。可能是請求1進入節點A(15s響應),2到節點B(15s響應),3到節點A(現在是300ms響應),4到節點C(15s響應)。看看我在做什麼? – Mardoxx

回答

0

類似的問題發生在我們身上,但是我們使用DI容器,直到第一次調用我們的服務時,所有的依賴都沒有解決,創建這些實例需要時間。例如類的單例。另一個是EF DB上下文。爲了克服這一點,我們首先要對服務進行「熱身」。

希望幫助

+0

這並不能回答爲什麼他的應用程序會在幾分鐘後「睡覺」! – Mardoxx

0

這可能是一個在黑暗中拍攝:你們的服務,使用服務織物遠程選項,或者使用HTTP進行通信?在HTTP的情況下,HttpSys/Kestrel可能導致休眠和預熱時間?

關於您的響應速度很慢(300毫秒),看起來有點奇怪,我們有多個無狀態服務(使用HTTP和Kestrel),後面有EF,並且響應時間小於50毫秒)。