Sincronizzazione della cache locale e remota nella cache distribuita

2

Con una cache distribuita, un sottoinsieme della cache viene mantenuto localmente mentre il resto viene tenuto in remoto.

  • In un'operazione get , se la voce non è disponibile localmente, verrà utilizzata la cache remota e la voce verrà aggiunta alla cache locale.
  • In un'operazione put , vengono aggiornate sia la cache locale che la cache remota. Anche altri nodi nel cluster devono essere notificati per invalidare anche la loro cache locale.

Qual è il modo più semplice per raggiungere questo obiettivo se lo hai implementato tu stesso , supponendo che i nodi non siano a conoscenza l'uno dell'altro.

Modifica La mia attuale implementazione va così:

  • Ogni voce della cache contiene un timestamp.
  • L'operazione Put aggiornerà la cache locale e la cache remota
  • Operazione di prova proverà la cache locale e la cache remota
  • Un thread in background su ogni nodo controllerà periodicamente la cache remota per ogni voce nella cache locale. Se il timestamp su remoto è più recente, sovrascrivi il locale. Se la voce non viene trovata in remoto, eliminala dal locale.
posta ltfishie 09.02.2012 - 04:09
fonte

3 risposte

1

Il problema che potresti voler focalizzare è quando inviare messaggi di cache locali contenenti aggiornamenti di cache remote. Da una parte, è possibile inviare un messaggio per ogni articolo modificato, a tutte le altre cache. Ciò garantisce aggiornamenti tempestivi, ma possono esserci molti messaggi di aggiornamento. D'altra parte, la cache locale può verificare se un elemento è valido solo prima di utilizzarlo (e dopo un determinato periodo di tempo dalla stessa richiesta), chiedendo la cache remota. Come altra opzione, è possibile inviare periodicamente aggiornamenti su diversi elementi modificati.

La migliore strategia dipende dal sistema che stai per costruire. La strategia potrebbe essere l'equilibrio di diversi fattori, come la frequenza degli aggiornamenti, il traffico generato dai messaggi di aggiornamento, il sovraccarico di aggiornamenti, la criticità degli aggiornamenti mancanti, ecc.

Gli elementi della cache variano frequentemente rispetto al loro accesso? Quante cache locali hai? La modifica proviene da ciascuna cache locale, alcuni di questi, tutti o dalla cache remota?

    
risposta data 09.02.2012 - 14:18
fonte
0

Purtroppo, a meno che non ci sia un singolo punto di sincronizzazione, non puoi garantire che la cache abbia i dati più freschi.

Tuttavia, se si crea il punto singolo, si finirebbe con un problema di prestazioni perché prima tutto deve andare lì e se si tratta di un sistema distribuito sarà una chiamata di rete e un collo di bottiglia delle prestazioni.

Un modo migliore per aggirare questo è spingere indietro agli analisti affermando che se hanno il requisito di avere i dati più recenti possibili quando i dati possono cambiare, la memorizzazione nella cache non è un'opzione. È necessaria invece una rete e un hardware più veloci, questo è molti fattori meno costosi di quello di far sì che gli sviluppatori codifichino delle soluzioni di caching personalizzate che comunque non funzionano.

    
risposta data 19.02.2012 - 06:23
fonte
-2

Bene, vedo che stai cercando Memcached. Questo prodotto crea le cose esattamente come desideri, è gratuito e stabile. Utilizzato da Wikipedia e altri. Se vuoi fare da te, puoi dare un'occhiata alla sua documentazione dove è spiegato il modo in cui funziona.

    
risposta data 30.10.2012 - 22:51
fonte

Leggi altre domande sui tag