Ho una piccola applicazione in tessuto di servizio che sto costruendo e da quando mi sono convertita al servizio di assistenza sono stata infastidita dal lento tempo di avvio e non solo dopo un rilascio ma anche dopo 10-15 minuti di inattività.
Ho aggiunto un progetto il cui unico scopo è quello di andare a ciascun servizio e fare una piccola richiesta db ogni 10 secondi, pensando che manterrà l'applicazione e l'ef in esecuzione. Questo mi ha aiutato a ottenere i timeout e ora le prime richieste sono nell'intervallo 5-15s. Dopo un po 'di riscaldamento le richieste sono solitamente nell'intervallo di 300 ms, quindi sono richieste abbastanza semplici e non c'è molta comunicazione tra i servizi (4 servizi in totale).
Dopo un sacco di ricerche ho trovato un profiler che sembra funzionare come la maggior parte non piace quello in Visual Studio. Sfortunatamente non ha detto molto, tranne per il fatto che attende molto i thread e che non sembra essere nel mio codice. Tutte le mie richieste esterne usano attendere asincrono. Inoltre, seguendo la richiesta sembrava ci fossero delle informazioni mancanti ...
All'inizio pensavo che la lentezza potesse derivare dall'ef generare la query di ricerca, quindi ho migrato quella parte per usare dapper (la richiesta completa usa ancora un ef) ma ciò non ha cambiato nulla in realtà.
L'applicazione ha tutti i più recenti fabric di servizio, core dotnet, ef core, pacchetti di informazioni sulle applicazioni. Tutti i servizi ad eccezione di quello dei token di validazione sono senza stato. E ovviamente integrato nella modalità di rilascio.
A questo punto sono piuttosto perso perché non riesco a trovare la ragione per cui è così lento. In passato questo era solitamente dovuto al fatto che IIS chiudeva l'applicazione o la riciclava, ma ora quando non c'è, cosa può essere?
Questo potrebbe essere uno scatto al buio: i tuoi servizi comunicano utilizzando le opzioni di servizio remoto di Service Fabric o utilizzando HTTP? Nel caso di HTTP, il tempo di ibernazione e di riscaldamento potrebbe essere causato da HttpSys / Kestrel?
Per quanto riguarda le tue risposte lente (300 ms) che sembrano un po 'strane, abbiamo diversi servizi stateless (utilizzando HTTP e Kestrel) con EF nella parte posteriore e hanno tempi di risposta inferiori a 50 ms).