2009-02-20 4 views
5

Abbiamo 22 server HTTP ciascuno con le proprie cache ASP.NET individuali. Leggono da un DB di sola lettura che viene aggiornato solo al di fuori delle ore di punta.Chiunque usi Memcached con ASP.NET in una farm distribuita?

Usiamo una dipendenza file per invalidare la cache, invitando i server a "rinnovare" le loro cache ... Se questo viene fatto accidentalmente durante le ore di punta, rischia di far cadere il nostro cluster DB a causa dell'improvviso diluvio di apertura connessioni.

Qualcuno ha utilizzato memcached con ASP.NET in questo modulo distribuito? Mi sembra che offrirebbe un enorme vantaggio di dover solo costruire una cache (e colpire il DB 21 volte in meno), mentre memcached gestirà la distribuzione su ogni scatola.

Se è presente, lo si inserisce nella stessa casella delle caselle HTTP o si esegue un livello di cache separato? Quanto bene scala, possiamo aspettarci che abbia bisogno di server potenti? Il nostro set di dati di lavoro non è enorme (lo inseriamo in 4 gigabyte di memoria su ogni box HTTP).

Come si gestisce l'annullamento?

Alla ricerca di esperienze e storie di guerra.

MODIFICA: Win2k3, IIS6, server a 64 bit ... 4 concerti per scatola (credo, potremmo averlo aumentato a 16 date quando abbiamo cambiato server a 64 bit).

risposta

5

"memcached sarebbe occupato distribuendolo su ogni scatola"

memcached non distribuisce o replicare una cache per ogni casella in una fattoria memcached. Il client memcached fondamentalmente blocca la chiave e sceglie un server cache basato su quell'hash. Quando uno dei server memcached fallisce, perderai tutti gli elementi memorizzati nella cache su quel server, tuttavia, il client riconoscerà l'errore e inizierà a scrivere valori su un server diverso. In questo caso, il codice deve tenere conto degli articoli mancanti nella cache e ripristinarli se necessario.

Questo articolo tratta l'architettura memcached in modo più dettagliato: How memcached works.

+0

Grazie, ho appena trascorso un'ora a leggere tutto su quel sito. – FlySwat

1

Non li ho usati insieme, ma li ho usati entrambi in progetti separati.

Infine, ho visto la documentazione che diceva esplicitamente che la condivisione con il server Web era ok.

Memcache richiede solo RAM e se si estrae la cache asp.net dall'equazione, quanta RAM si sta effettivamente utilizzando? Probabilmente non molto Non competerà molto con il tuo server web per la CPU e non ha bisogno del disco. Potresti considerare di segmentare il traffico di rete (se non lo hai già fatto) dalle richieste web in arrivo.

Ha funzionato bene ed è stato veloce, non ho avuto alcun problema.

Oh, l'invalidazione era esplicita nel progetto in cui l'ho usata. Non sono sicuro di quali altre modalità ci sono per questo.

2

Le migliori pratiche (in base al sito memcached) è eseguire memcached nella stessa casella dell'app Web server oppure effettuare chiamate http (il che non è poi così male, ma non ottimale). Se stai usando un app server a 64-bit (che probabilmente dovresti eseguire in modalità memcached), puoi caricare ciascuno dei server con un sacco di memoria e sarà disponibile per la memcached. Non c'è molto in termini di risorse della CPU utilizzate da memcached, quindi se il tuo attuale server delle app non è molto tassato, rimarrà tale.

0

Vale la pena verificare Velocity, che è una cache distribuita fornita da Microsoft. Non riesco a darti un confronto punto per punto su memcached, ma Velocity è integrato con ASP.NET e continuerà a ottenere più sviluppo e integrazione.

1

Se si desidera ottenere la replica tra i server memcached, allora vale la pena dare un'occhiata a repcached. È una patch per memcached che gestisce la parte di replica.