Lançamento do Memcached 1.6.0 com suporte para armazenamento externo habilitado

aconteceu liberação significativa do sistema de cache de dados na memória Memcached 1.6.0, que opera com dados no formato chave/valor e é fácil de usar. O Memcached geralmente é usado como uma solução leve para acelerar o trabalho de sites de alta carga, armazenando em cache o acesso ao SGBD e aos dados intermediários. Código fornecido sob a licença BSD.

A nova versão estabiliza a implementação do armazenamento "extstore", que agora é compilado por padrão (para desabilitar no script de configuração, a opção "-disable-extstore" é fornecida), mas requer ativação explícita na inicialização (instalações antigas continuarão funcionando sem alterações após a atualização). Embora o extstore seja geralmente considerado estável, recomenda-se cautela ao implementá-lo em sistemas muito grandes.

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 protocolo binário interação com o servidor. A manutenção do protocolo binário e as correções de bugs continuarão, mas novos recursos e atualizações de recursos existentes não serão portados. Protocolo de texto continuará a desenvolver-se sem alterações. O protocolo binário foi substituído por um novo protocolo objetivo (uma versão em texto do protocolo com metacomandos compactos), demonstrando a combinação ideal de desempenho e confiabilidade. O novo protocolo cobre todas as operações anteriormente disponíveis através de protocolos de texto e binários.

Fonte: opennet.ru

Adicionar um comentário