2010-06-10 25 views
9

Domanda su come utilizzare la funzionalità cache di AppFabric.Domanda su come utilizzare la funzionalità cache di AppFabric

Mi scuso per aver fatto una domanda alla quale dovrei essere in grado di rispondere dalla documentazione, ma ho letto e letto e cercato e non posso rispondere a questa domanda, il che mi porta a credere di avere una comprensione fondamentalmente errata di ciò che AppFabric ha le funzionalità di memorizzazione nella cache sono intese per.

Lavoro per un'azienda geograficamente dispersa. Abbiamo una particolare applicazione che è stata originariamente scritta come applicazione client/server. È così massiccio e critico dal punto di vista commerciale che vogliamo trasformarlo in una soluzione architetturale migliore.

Una delle idee che avevamo era di convertire l'app per leggere i suoi dati utilizzando le chiamate WCF a un server Web co-localizzato che memorizzerebbe nella cache le comunicazioni con il database negli Stati Uniti. La natura dell'applicazione è tale che ognuno tenderà a visualizzare gli stessi record di 2000 o giù di lì con solo occasionali aggiornamenti e tali aggiornamenti saranno effettuati da un numero limitato di utenti.

Speravo che il meccanismo di cache di AppFabric mi avrebbe consentito di impostare una cache globale e quando un utente in Asia, ad esempio, ha richiesto dati che non erano nella cache o che erano stantii che il server Web avrebbe letto dal database negli Stati Uniti, fornire i dati all'utente, quindi aggiornare la cache che propagherebbe tali dati agli altri server Web in modo che possano sapere di non tornare al database stesso.

Can AppFabric può funzionare in questo modo o devo semplicemente fare in modo che i server recuperino i propri dati dal database?

risposta

11

Quindi, se ho capito bene, si ha:

  • un server di database nei server web USA
  • in tutto il mondo?
  • (potenzialmente) una cache AppFabric negli Stati Uniti

AppFabric ti dà eventualmente due modi per affrontare questo scenario.

  1. cache locale
    In una configurazione AppFabric, i clienti hanno la possibilità di avere una cache locale di oggetti, in cui la prima chiamata alla cache per un oggetto pone l'oggetto nella cache locale e le successive richieste di che oggetto sono soddisfatti dalla cache locale. Gli oggetti vengono rimossi dalla cache locale a causa di un timeout o perché la cache principale notifica alla cache locale che l'oggetto è obsoleto. È possibile configurare questo nel vostro web.config:

    <dataCacheClient> 
        <localCache isEnabled="true" sync="NotificationBased" ttlValue="300" /> 
    </dataCacheClient> 
    

    Nel tuo caso, allora, i server web sono i clienti; quando uno dei tuoi utenti asiatici richiede un oggetto, la cache locale per il server web Asia potrebbe quindi contenere una copia di tale oggetto. Gli aggiornamenti a quell'oggetto verrebbero propagati alla cache principale e in una configurazione basata su notifica le copie di quell'oggetto in cache locali sugli altri server Web sarebbero invalidate, in modo che la richiesta successiva venisse soddisfatta dalla cache principale e quindi dalla la cache locale verrebbe aggiornata con l'oggetto aggiornato.

  2. Colocare la cache AppFabric sui server Web
    Non c'è niente per impedire ai server Web di essere anche server cache AppFabric! In questa configurazione non si utilizzerà la cache locale, perché non ha senso quando la cache principale è già locale al client.Tuttavia, ciò assicurerebbe che il tuo cliente stia sempre prelevando dalla cache la versione più recente di un oggetto memorizzato nella cache.
    Tuttavia, dovresti fare attenzione ai carichi di rete, perché questa configurazione potrebbe significare che il tuo server web USA legge sempre gli oggetti memorizzati nella cache da (ad esempio) il tuo server web europeo, che potrebbe rallentare entrambi i server mentre cercano di servire richieste di cache e traffico web.

In entrambi i casi ricordare che, mentre i vostri clienti riceveranno la versione più recente del oggetto in cache, non c'è persistenza AppFabric e avrete bisogno di scrivere le modifiche al database, allo stesso tempo, come si aggiorna il oggetto memorizzato nella cache, altrimenti si corre il rischio di leggere dati non aggiornati nella cache.

+0

Phil, grazie mille per la risposta (molto dettagliata). Questo aiuta a solidificare così tanto. –

+3

Microsoft non consiglia l'uso di host non dedicati per nodi AppFabric Cache, in particolare gli host IIS, a causa di problemi di contesa sotto carico. – andrewbadera

+1

"Gli oggetti vengono rimossi dalla cache locale a causa di un timeout o perché la cache principale notifica alla cache locale che l'oggetto è obsoleto." - Tuttavia, le cache locali contattano le cache principali in base a un intervallo di polling (300 secondi per impostazione predefinita). Eventuali modifiche a un oggetto nella cache principale tra i polling non verranno rilevate dalle cache locali, quindi rilasceranno copie di stallo per un breve periodo dopo gli aggiornamenti alla cache principale. – redcalx

Problemi correlati