Beh, potresti scrivere libri su questo, ma il principio base è che ci sono alcuni approcci diversi.
L'approccio più comune e sensato per il caching è il sharding. Il che significa che i dati vengono sottrati solo su un server e viene utilizzato un metodo per determinare quale server è. Quindi può essere prelevato da questo stesso server e solo un server è coinvolto.
Questo ovviamente funziona bene in ambienti chiave/valore come memcached.
Una pratica comune è prendere un hash crittografico della chiave. Calcola questo numero di server hash MOD e il risultato è il server che archivierai e recupererai i dati.
Questa procedura produce un bilanciamento più o meno uguale.
Come esattamente fatto in memcached, non so certo quale tipo di hash.
Ma attenzione che questa teqnique non è altamente disponibile. Quindi, se un server fallisce, le voci sono sparite. Quindi ovviamente puoi usare questo solo per scopi di cache.
Altre teqniques, in cui è necessaria, ad esempio, un'elevata disponibilità di risorse, che richiedono molto tempo per calcolare e sono riscaldate automaticamente in background, coinvolgono la replica.
La forma più comune negli ambienti di memorizzazione nella cache è la replica master-master con la risoluzione dei conflitti dell'ultimo momento. Che in sostanza significa che ogni server riceve i dati da everyserver che non è ancora sul server locale (questo viene fatto usando i log di replica e gli offset di byte). In caso di conflitto viene utilizzata l'ultima versione (il leggero spostamento temporale tra i server viene ignorato).
Ma in altri ambienti in cui per esempio solo molto poco è scritto ma viene letto molto, c'è spesso una cascata in cui sono coinvolti solo uno o pochi server master e il resto è pura replica di lettura.
Ma questi setup sono molto rari in quanto lo sharding come descritto sopra offre le migliori prestazioni e negli ambienti di memorizzazione nella cache la perdita di dati è per lo più tollerabile. quindi è anche l'impostazione predefinita per memcached.
Grazie per avermelo chiesto. Quindi, tutto sommato, sembra che più scrivere/leggere sia l'obiettivo e non la ridondanza? Sto cercando la ridondanza e almeno conferma quello che pensavo. – Till
[Questa domanda] (http://stackoverflow.com/questions/4038094/using-multiple-memcache-servers-in-a-pool/4038108#4038108) non è esattamente la stessa, ma la mia risposta dovrebbe rispondere domanda pure. –
grazie ... Sai se il client memcached saldi automaticamente le richieste di scrittura? o va al primo server fino a quando non si riempie e poi al secondo fino a riempire il secondo e il terzo ecc. – Stann