Rilascio di Memcached 1.6.0 con supporto per l'archiviazione esterna abilitato

ha avuto luogo rilascio significativo del sistema di caching dei dati in memoria Memcached 1.6.0, che opera sui dati in formato chiave/valore ed è facile da usare. Memcached viene solitamente utilizzato come soluzione leggera per accelerare il lavoro di siti ad alto carico memorizzando nella cache l'accesso al DBMS e ai dati intermedi. Codice in dotazione sotto licenza BSD.

La nuova versione stabilizza l'implementazione dello storage "extstore", che ora è creato per impostazione predefinita (per disabilitarlo nello script di configurazione, viene fornita l'opzione "-disable-extstore"), ma richiede l'attivazione esplicita all'avvio (le vecchie installazioni continueranno a funzionare senza modifiche dopo l'aggiornamento). Sebbene extstore sia generalmente considerato stabile, si consiglia cautela quando lo si implementa su sistemi molto grandi.

Extstore ti consente di utilizzare unità SSD/Flash per espandere la dimensione della cache. Come per la RAM, la memoria Flash non è permanente e viene ripristinata al riavvio. Lo scopo della nuova modalità è garantire una memorizzazione nella cache efficiente di dati di grandi dimensioni. Quando si utilizza "extstore", le chiavi e i metadati vengono, come prima, archiviati solo nella RAM, ma i dati di grandi dimensioni associati alle chiavi, la cui dimensione supera una soglia impostata, vengono archiviati nella memoria esterna e solo il puntatore rimane nella RAM.

Se la chiave è associata a dati di piccole dimensioni, Memcached funziona normalmente, mantiene i dati in memoria e non accede alla memoria esterna. Se c'è molta memoria libera, i dati più necessari possono inoltre essere completamente posizionati nella cache nella RAM (ad esempio, è possibile specificare che solo gli oggetti più grandi di 1024 byte a cui non è stato effettuato l'accesso per 3600 secondi vengano reimpostati su Flash ).

L'implementazione è ottimizzata per garantire le massime prestazioni e il minimo carico della CPU, a scapito dell'efficienza dello storage (alto livello di frammentazione). Per prolungare la durata delle unità Flash, i dati vengono memorizzati nel buffer e scaricati nello spazio di archiviazione in sequenza. Per salvare lo stato della cache tra un riavvio e l'altro, è possibile utilizzare la funzionalità apparsa nella versione 1.5.18 per eseguire il dump di un dump della cache in un file. Al successivo avvio è possibile ripristinare la cache da questo file per eliminare i picchi di carico sui processori di contenuto dovuti allo svuotamento della cache (la cache diventa immediatamente “calda”).

Il secondo cambiamento importante in Memcached 1.6 è stata la rielaborazione del codice di comunicazione di rete, che è stato adattato per elaborare automaticamente le richieste batch all'interno di una singola chiamata di sistema. In precedenza, quando si inviavano più comandi GET in un singolo pacchetto TCP, memcached inviava i risultati con chiamate di sistema separate. In Memcached 1.6, le risposte vengono aggregate e restituite inviando una singola chiamata di sistema. Di conseguenza, ora c'è una media di 1.5 chiavi per chiamata di sistema, che nei test dimostra una riduzione del carico della CPU fino al 25% e una riduzione della latenza di diversi punti percentuali.

La riprogettazione del sottosistema di rete ha inoltre reso possibile il passaggio all'allocazione dinamica dei buffer secondo necessità, invece dell'assegnazione statica dei buffer. Questa ottimizzazione ha ridotto il consumo di memoria durante l'attesa di nuovi comandi tramite una connessione stabilita dal client da 4.5 KB a 400-500 byte e ha anche permesso di eliminare molte chiamate a malloc, realloc e free, che portano a un'inutile frammentazione della memoria su sistemi con un gran numero di connessioni. Ogni thread di lavoro ora gestisce il proprio pool di buffer di lettura e scrittura per le connessioni client attive. Per regolare la dimensione di questi buffer
sono fornite le opzioni “-o resp_obj_mem_limit=N” e “-o read_buf_mem_limt=N”.

Il ramo 1.6 ha anche annunciato la deprecazione di protocollo binario interazione con il server. La manutenzione del protocollo binario e la correzione dei bug continueranno, ma le nuove funzionalità e gli aggiornamenti alle funzionalità esistenti non verranno trasferiti. Protocollo testuale continuerà a svilupparsi senza modifiche. Il protocollo binario è stato sostituito da un nuovo protocollo arrivo (una versione testuale del protocollo con meta-comandi compatti), dimostrando la combinazione ottimale di prestazioni e affidabilità. Il nuovo protocollo copre tutte le operazioni precedentemente disponibili tramite protocolli di testo e binari.

Fonte: opennet.ru

Aggiungi un commento