2011-12-08 13 views
5

Abbiamo un server che esegue Windows Server 2003 per il nostro server Web di produzione. Il nostro sito Web ha diversi moduli e ciascuno viene eseguito all'interno del proprio pool di applicazioni. Ciò rende il caching un po 'un problema poiché ogni modulo ha la propria cache e spesso i moduli multipli memorizzano nella cache gli stessi elementi. Il problema è quando un elemento nella cache viene modificato in un modulo, un altro modulo che memorizza nella cache lo stesso elemento non può essere facilmente aggiornato.Suggerimenti per la soluzione di caching distribuita .NET semplice

Il nostro sito è scritto in ASP.NET 4.0 e memorizziamo nella cache dataset, oggetti business, raccolte, elenchi, ecc. Utilizzando l'oggetto HttpRuntime.Cache standard come un semplice archivio di chiavi/valori. Non usiamo alcuna dipendenza dal file, ma usiamo una scadenza temporale. Abbiamo solo circa 400 utenti contemporaneamente, quindi non stiamo facendo nulla di troppo pazzo.

Sembra che una sorta di cache condivisa/distribuita possa aiutare a risolvere questo problema, ma non sono sicuro di quale utilizzare o se sarebbe meglio eseguire il rollover poiché non abbiamo bisogno di molte funzioni disponibili in la maggior parte dei prodotti che ho visto. Ho visto alcuni esempi utilizzando WCF, ma la maggior parte ha suggerito di non usare i loro esempi in produzione e so poco su WCF.

Sto cercando qualcosa di semplice, veloce, leggero, sicuro da eseguire in produzione e preferibilmente libero se possibile ma non deve essere. È necessario eseguire su Windows Server 2003 & funzionare con ASP.NET 4.0.

Qualche suggerimento o informazione?

risposta

7

memcached insieme a un ASP.NET provider è una scelta popolare. Ricordare però che in .NET 4.0 il modo consigliato di fare il caching è di usare il nuovo ObjectCache invece di HttpRuntime.Cache. Esiste un'implementazione integrata della memoria nel framework .NET (MemoryCache) e si può anche effettuare il checkout di uno implementation for memcached.

+0

Grazie per l'articolo sembra molto utile, ho intenzione di esaminare la sua implementazione. – Billy

+0

L'unico provider che è una cache distribuita è memcached, gli altri non sono distribuiti. – ewahner

12

Suono semplice, veloce, leggero e sicuro come cose come redis e memcached, che può essere molto efficace come cache centrale. Per stackoverflow utilizziamo i redis tramite BookSleeve (client) ma la maggior parte dei negozi funzionerà allo stesso modo. C'è anche una cache AppFabric, ma è molto più complessa.

Punti chiave però:

  • i dati dovranno essere serializzabile in qualche modo
  • se si sta utilizzando la cache di oggetti di grandi dimensioni (come un grande DataTable) è necessario considerare le implicazioni di larghezza di banda o rendi più granulare
  • probabilmente trarrai vantaggio da una cache a due livelli (una memoria locale, con lo store centrale come secondario)
  • il che significa che devi anche considerare l'invalidazione (lo facciamo tramite l'API pub/sub in redis)
+0

Grazie per le informazioni, si esegue su una scatola di Windows o Unix? Se Windows quale porta redis usi? Cosa ti ha fatto andare con redis su memcached? – Billy

+0

@Billy in produzione usiamo * nix per il server, poiché "fork" consente un salvataggio in background più efficiente. Non è probabile che questo sia un problema per 400 utenti. Io uso i binari dmajkic, che funzionano bene. Ri "perché" - Altre caratteristiche: p –

0

se il prezzo non è un problema, quindi NCache può essere la migliore opzione disponibile per you.Its ultima versione (4.1) NCache funziona con .NET 4.0

3

Dare Dache una prova. È una soluzione di caching distribuita .NET open source estremamente performante. http://www.getdache.net

+1

Ha una doppia licenza. Per i progetti commerciali dovrai acquistare una licenza. – Tushar

+1

@anche questo sito ora mostra l'elenco di proprietà. Immagino che il progetto non sia più disponibile? – chester89

Problemi correlati