lançamento significativo do sistema de cache de dados em memória , operando com dados no formato chave/valor e se destacando pela simplicidade de uso. O Memcached é geralmente aplicado como uma solução leve para acelerar o desempenho de sites com alta carga, através do cache de acesso a bancos de dados e dados intermediários. Código sob a licença BSD.
Na nova versão, a implementação do armazenamento "" foi estabilizada e agora é compilada por padrão (a opção "--disable-extstore" foi prevista no script configure para desativá-la), mas requer uma ativação explícita ao iniciar (instalações antigas continuarão a funcionar sem alteração após a atualização). Embora o armazenamento "extstore" seja considerado estável de forma geral, recomenda-se cautela ao implementá-lo em sistemas muito grandes.
O Extstore permite o uso de unidades SSD/Flash para expandir o tamanho do cache. Assim como ao utilizar memória RAM, o armazenamento em Flash não é permanente e é descartado na reinicialização. O novo modo é aplicado para garantir um cache eficaz de grandes volumes de dados. Com o uso do "extstore", chaves e metadados continuam a ser armazenados apenas em memória RAM, mas os grandes dados relacionados às chaves, cujo tamanho excede o limite estabelecido, são armazenados em um armazenamento externo, enquanto apenas um ponteiro permanece na RAM.
Se os dados vinculados a uma chave forem de tamanho pequeno, o Memcached funciona normalmente, mantendo os dados na memória e não acessando o armazenamento externo. Se houver bastante memória livre, os dados mais solicitados também podem permanecer completamente no cache na memória RAM (por exemplo, pode-se especificar que apenas objetos maiores que 1024 bytes, que não foram acessados por 3600 segundos, sejam descarregados no Flash).
A implementação foi otimizada para garantir o máximo desempenho e carga mínima sobre a CPU, em detrimento da eficiência de armazenamento (alto nível de fragmentação). Para prolongar a vida útil dos dispositivos Flash, os dados são armazenados em buffer e descarregados no armazenamento de forma sequencial. Para manter o estado do cache entre reinicializações, pode ser utilizada a nova funcionalidade introduzida na versão 1.5.18 que permite o descarregamento do dump do cache em um arquivo. Na próxima inicialização, é possível restaurar o cache a partir deste arquivo para evitar picos de carga nos manipuladores de conteúdo devido à falta de preenchimento do cache (o cache rapidamente se torna "quente").
A segunda alteração importante no Memcached 1.6 foi a reformulação do código para interação de rede, que foi adaptado para o tratamento automático de requisiçõ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 resultados com a execução de chamadas de sistema separadas. No Memcached 1.6, as respostas são agregadas e retornadas através do envio de uma única chamada de sistema. Como resultado, agora em média temos 1.5 chaves por chamada de sistema, o que demonstra em testes uma redução na carga da CPU em até 25% e uma diminuição da latência em alguns por cento.
A reformulação do subsistema de rede também permitiu a alocação dinâmica de buffers conforme a necessidade, em vez da atribuição estática de buffers. Essa otimização reduziu o consumo de memória em modo de espera por novos comandos através de uma conexão estabelecida pelo cliente de 4.5 KB para 400-500 bytes, além de eliminar muitas chamadas malloc, realloc e free, que causavam fragmentação desnecessária de memória em sistemas com um grande número de conexões. Cada thread de trabalho agora gerencia seu próprio pool de buffers para leitura e gravação para conexões ativas de clientes. Para ajustar o tamanho desses buffers
existem as opções "-o resp_obj_mem_limit=N" e "-o read_buf_mem_limit=N".
Na versão 1.6, também foi anunciado que o protocolo binário foi declarado obsoleto Protocolo de texto continuará o desenvolvimento sem mudanças. O novo protocolo substituiu o protocolo binário (versão textual do protocolo com comandos meta compactos), demonstrando a combinação ideal de desempenho e confiabilidade. O novo protocolo abrange todas as operações anteriormente disponíveis através dos protocolos textual e binário.
Fonte: opennet.ru
