significativo rilascio del sistema di caching dei dati in memoria volatile , che gestisce i dati nel formato chiave/valore ed è caratterizzata da una facilità d'uso. Memcached è solitamente utilizzato come soluzione leggera per accelerare il funzionamento di siti web ad alto traffico attraverso la memorizzazione nella cache dell'accesso ai database e ai dati intermedi. Codice sotto licenza BSD.
Nella nuova versione è stata stabilizzata l'implementazione del deposito ««, che ora viene compilato per impostazione predefinita (per disattivarlo nello script di configurazione è prevista l'opzione «—disable-extstore»), ma richiede un'attivazione esplicita all'avvio (le installazioni precedenti continueranno a funzionare senza modifiche dopo l'aggiornamento). Sebbene il deposito «extstore» sia stato nel complesso riconosciuto come stabile, si raccomanda cautela nel suo utilizzo in sistemi molto grandi.
Extstore consente di utilizzare unità SSD/Flash per ampliare le dimensioni della cache. Come per l'uso della memoria volatile, il deposito su Flash non è permanente e viene azzerato riavviando. Un'area di applicazione della nuova modalità è rappresentata dall'efficiente cache di dati di grandi dimensioni. Utilizzando «extstore», le chiavi e i metadati, come prima, rimangono memorizzati solo nella memoria volatile, ma i dati di grandi dimensioni associati alle chiavi, che superano la soglia stabilita, sono salvati in un deposito esterno, lasciando solo un puntatore in RAM.
Se i dati associati alla chiave sono di piccole dimensioni, Memcached funziona come al solito, mantenendo i dati in memoria e non accedendo al deposito esterno. Se c'è molta memoria libera, i dati più richiesti possono rimanere completamente nella cache in memoria volatile (ad esempio, si può specificare che solo gli oggetti superiori a 1024 byte, a cui non si è fatto riferimento da 3600 secondi, vengano azzerati su Flash).
L'implementazione è ottimizzata per garantire massime prestazioni e un carico minimo sulla CPU, a scapito dell'efficienza di memorizzazione (elevato livello di frammentazione). Per prolungare la vita delle unità Flash, i dati vengono memorizzati e azzerati sequenzialmente nel deposito. Per mantenere lo stato della cache tra i riavvii, può essere utilizzata la nuova funzionalità introdotta nella release 1.5.18 per azzerare il dump della cache in un file. Al successivo avvio, la cache può essere ripristinata da questo file per evitare picchi di carico sui handler dei contenuti a causa della mancanza di riempimento della cache (la cache diventa subito
Il secondo importante cambiamento in Memcached 1.6 è stata una revisione del codice per l'interazione di rete, adattata per la gestione automatica delle richieste batch all'interno di una singola chiamata di sistema. In precedenza, quando venivano inviate più comandi "GET" in un unico pacchetto TCP, memcached restituiva i risultati eseguendo singole chiamate di sistema. In Memcached 1.6, le risposte vengono aggregate e restituite tramite l'invio di una sola chiamata di sistema. Come risultato, ora si ha mediamente 1,5 chiavi per chiamata di sistema, il che dimostra nei test una riduzione del carico sulla CPU fino al 25% e una diminuzione dei ritardi di alcuni punti percentuali.
La revisione del sottosistema di rete ha anche permesso l'allocazione dinamica dei buffer secondo necessità, invece della loro assegnazione statica. Questa ottimizzazione ha ridotto il consumo di memoria in attesa di nuovi comandi attraverso una connessione stabilita dal client da 4.5 Kb a 400-500 byte, e ha anche consentito di eliminare molte chiamate a malloc, realloc e free, che causano una frammentazione indesiderata della memoria su sistemi con un alto numero di connessioni. Ogni thread di lavoro ora gestisce il proprio pool di buffer per la lettura e la scrittura per le connessioni attive dei client. Per configurare la dimensione di questi buffer
sono previste le opzioni «-o resp_obj_mem_limit=N» e «-o read_buf_mem_limt=N».
Nella versione 1.6 è stata anche annunciata la transizione alla categoria di obsoleto per l'interazione con il server. Il mantenimento del protocollo binario e la correzione dei bug continueranno, ma nuove funzionalità e aggiornamenti delle funzioni esistenti non saranno trasferiti. continuerà il suo sviluppo senza variazioni. In sostituzione del protocollo binario è arrivato un nuovo protocollo (versione testuale del protocollo con comandi meta compatti), che dimostra un'ottimale combinazione di prestazioni e affidabilità. Il nuovo protocollo copre tutte le operazioni precedentemente disponibili attraverso i protocolli testuale e binario.
Fonte: opennet.ru
