Configurazione del client ElastiCache per un efficiente bilanciamento del carico - Amazon ElastiCache

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione del client ElastiCache per un efficiente bilanciamento del carico

Nota

Questa sezione si applica ai cluster Memcached a più nodi progettati autonomamente.

Per utilizzare in modo efficace più nodi ElastiCache Memcached, devi essere in grado di distribuire le chiavi di cache tra i nodi. Un modo semplice per eseguire il bilanciamento del carico di un cluster con n nodi consiste nel calcolare l'hash della chiave dell'oggetto ed eseguire il comando mod sul risultato per n - hash(key) mod n. Il valore risultante (da 0 a n-1) è il numero del nodo in cui inserisci l'oggetto.

Questo approccio è semplice ed efficace, purché il numero dei nodi (n) sia costante. Quando aggiungi o rimuovi un nodo dal cluster, il numero di chiavi da spostare corrisponde tuttavia a (n - 1) / n (dove n è il nuovo numero di nodi). Con questo approccio, il numero di chiavi da spostare è pertanto maggiore, con un conseguente numero elevato di mancati riscontri nella cache iniziali, specialmente man mano che aumenta il numero dei nodi. Con il dimensionamento da 1 a 2 nodi, viene spostato un numero di chiavi pari a (2-1)/2 (50 percento), ovvero il caso migliore. Con il dimensionamento da 9 a 10 nodi, viene spostato un numero di chiavi pari a (10-1)/10 (90 percento). In caso di un dimensionamento dovuto a un picco nel traffico, è bene evitare un elevato numero di mancati riscontri nella cache, in quanto ciò causerebbe hit nel database, già sovraccaricato dai picchi di traffico.

La soluzione a tale problema è rappresentata da un hashing coerente, L’hashing coerente utilizza un algoritmo in modo tale che quando un nodo viene aggiunto o rimosso da un cluster, il numero di chiavi da spostare è circa 1/n (dove n è il nuovo numero di nodi). Passando da 1 a 2 nodi, viene spostato un numero di chiavi pari a 1/2 (50 percento), ovvero il caso peggiore. Passando da 9 a 10 nodi, viene spostato un numero di chiavi pari a 1/10 (10 percento).

Sei tu, in qualità di utente, che controlli l'algoritmo di hashing utilizzato per il cluster a più nodi. Ti consigliamo di configurare i client in modo da utilizzare un hashing coerente. Fortunatamente, sono disponibili numerose librerie client Memcached nei linguaggi più comuni in grado di implementare l'hashing coerente. Consulta la documentazione della libreria che utilizzi per verificare se supporta l'hashing coerente e ottenere informazioni su come implementarlo.

Se lavori in Java, PHP o .NET, ti consigliamo di utilizzare una delle librerie client Amazon ElastiCache.

Hashing coerente in Java

Il client Java ElastiCache Memcached è basato su un client Java spymemcached open source, con caratteristicadi hashing coerente integrate. La libreria include una classe KetamaConnectionFactory che implementa l'hashing coerente. Per impostazione predefinita, l'hashing coerente è disattivato in spymemcached.

Per ulteriori informazioni, vedere la documentazione di KetamaConnectionFactory all'indirizzo KetamaConnectionFactory.

Hashing coerente in PHP

Il client PHP ElastiCache Memcached è un wrapper intorno alla libreria PHP Memcached integrata. Per impostazione predefinita, l'hashing coerente è disattivato dalla libreria PHP Memcached.

Per attivare l'hashing coerente, utilizza il seguente codice.

$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

Oltre al codice precedente, ti consigliamo anche di attivare memcached.sess_consistent_hash nel file php.ini.

Per ulteriori informazioni, consulta la documentazione relativa alla configurazione di runtime per la libreria PHP Memcached all'indirizzo http://php.net/manual/en/memcached.configuration.php. Nota in particolare il parametro memcached.sess_consistent_hash.

Hashing coerente in .NET

Il client .NET ElastiCache Memcached è un wrapper intorno a Enyim Memcached. Per impostazione predefinita, l'hashing coerente è attivato dal client Enyim Memcached.

Per ulteriori informazioni, consulta la documentazione di memcached/locator all'indirizzo https://github.com/enyim/EnyimMemcached/wiki/MemcachedClient-Configuration#user-content-memcachedlocator.