Come ridurre al minimo i deadlock del database in un'applicazione web con carico bilanciato?

2

Sto lavorando su un'applicazione web ospitata su più front-end Web con bilanciamento del carico (WFE). Questa applicazione ha un metodo API che esegue una query di database e restituisce i risultati. Questa query esegue solo letture. Esiste un server di database singolo .

Stiamo scoprendo che quando il metodo API viene chiamato in rapida successione e le richieste vengono distribuite tra i WFE, le query del database eseguite verranno bloccate in modo intermittente.

Ci sono scritture occasionali nel database che si verificano da altre parti del sistema. Non ho ancora verificato se si verificano nello stesso momento.

Il carico sta aumentando e questo problema potrebbe verificarsi più frequentemente nel tempo. Abbiamo ottimizzato la query e le impostazioni della transazione di query nel miglior modo possibile.

Esiste un'architettura più appropriata per questo scenario?

(Le tecnologie coinvolte sono MS .NET / Web API / SQL Server 2008 R2 anche se siamo aperti a qualsiasi opzione.)

    
posta Alex Angas 20.03.2015 - 06:17
fonte

1 risposta

1

Il ridimensionamento è difficile.

Scalare i database è ancora più difficile.

Se hai abbastanza chiamate per avere spesso chiamate simultanee al database, anche se puoi evitare deadlock non risolverà il tuo problema, poiché la latenza inizierà ad aumentare.

Probabilmente hai bisogno di un altro server di database, e questo include un sacco di cose da cambiare per funzionare con un cluster. Vorrei cogliere l'occasione per esaminare altri database, come i database NoSQL o forse PostGreSQL. Possono essere un punto di svolta.

Inoltre, i modelli di memorizzazione nella cache (ad esempio qualcosa come i risultati di memorizzazione nella cache di Redis per le query più comuni) possono essere di grande aiuto.

    
risposta data 20.03.2015 - 07:42
fonte

Leggi altre domande sui tag