A nova versão estabiliza a implementação do armazenamento "
Extstore permite que você use unidades SSD/Flash para expandir o tamanho do cache. Tal como acontece com a RAM, o armazenamento Flash não é permanente e é redefinido na reinicialização. O escopo do novo modo é garantir o armazenamento eficiente em cache de grandes dados. Ao usar "extstore", chaves e metadados são, como antes, armazenados apenas na RAM, mas grandes dados associados às chaves, cujo tamanho excede um limite definido, são armazenados em armazenamento externo, e apenas o ponteiro permanece na RAM.
Se a chave estiver associada a dados pequenos, o Memcached funciona normalmente, mantém os dados na memória e não acessa o armazenamento externo. Se houver muita memória livre, os dados mais necessários também poderão ser completamente localizados no cache da RAM (por exemplo, você pode especificar que apenas objetos maiores que 1024 bytes que não foram acessados por 3600 segundos serão redefinidos para Flash ).
A implementação é otimizada para garantir desempenho máximo e carga mínima de CPU, em detrimento da eficiência de armazenamento (alto nível de fragmentação). Para prolongar a vida útil das unidades Flash, os dados são armazenados em buffer e descarregados no armazenamento sequencialmente. Para salvar o estado do cache entre reinicializações, você pode usar a capacidade que apareceu na versão 1.5.18 para despejar um despejo de cache em um arquivo. Na próxima inicialização, você pode restaurar o cache deste arquivo para eliminar picos de carga nos processadores de conteúdo devido ao cache estar vazio (o cache fica imediatamente “quente”).
A segunda mudança importante no Memcached 1.6 foi a reformulação do código de comunicação de rede, que é adaptado para processar automaticamente solicitações em lote dentro de uma única chamada de sistema. Anteriormente, ao enviar vários comandos GET em um único pacote TCP, o memcached enviava os resultados com chamadas de sistema separadas. No Memcached 1.6, as respostas são agregadas e retornadas enviando uma única chamada de sistema. Como resultado, existe agora uma média de 1.5 chaves por chamada de sistema, o que em testes demonstra uma redução na carga da CPU em até 25% e uma redução na latência em vários por cento.
O redesenho do subsistema de rede também tornou possível passar para a alocação dinâmica de buffers conforme necessário, em vez de atribuir buffers estaticamente. Essa otimização reduziu o consumo de memória durante a espera de novos comandos por meio de uma conexão estabelecida pelo cliente de 4.5 KB para 400-500 bytes, e também possibilitou eliminar muitas chamadas para malloc, realloc e free, que levam à fragmentação desnecessária de memória em sistemas com um grande número de conexões. Cada thread de trabalho agora lida com seu próprio conjunto de buffers de leitura e gravação para conexões ativas de clientes. Para ajustar o tamanho desses buffers
as opções “-o resp_obj_mem_limit=N” e “-o read_buf_mem_limt=N” são fornecidas.
Branch 1.6 também anunciou a descontinuação do
Fonte: opennet.ru