O Memcached faz você querer mais
O Memcached é um sistema bastante simples com uma semântica bastante simples. Muitos usuários desejaram um pouco mais de funcionalidade do que a fornecida de fábrica, o que levou a várias bifurcações e projetos relacionados.
Para acomodar o que, na verdade, são apenas diferenças mínimas, muitos projetos surgiram como bifurcações do memcached ou como projetos totalmente novos:
- dbcached
- depcached
- agente de memória
- memcached-pro
- memcachedb
- moxi
- redis
- repcached
- cache
- tirano de tokyo
- cache do tugela
...a lista vai muito além disso, sem contar as bifurcações internas que sabemos que existem em muitas organizações.
A maioria deles está fazendo a mesma coisa do ponto de vista do cliente (conjuntos básicos e obtenção de dados codificados), mas quer fazer algo um pouco diferente com os dados que chegam. Alguns oferecem persistência, outros replicação, outros proxy e alguns oferecem novas operações inovadoras em seus dados.
Mecanismos de armazenamento do Memcached
Tendo visto o mesmo padrão repetidamente, introduzimos uma estrutura de mecanismo de armazenamento no memcached, permitindo que você altere a maneira como os dados são tratados sem interromper a compatibilidade com os clientes ou negligenciar novos recursos importantes ou correções de bugs no manipulador de protocolo front-end.
Você pode pensar nisso como uma versão limitada do que os módulos do servidor da Web Apache oferecem a você. Não é necessário alterar o servidor inteiro para obter algo diferente.
Que tipos de coisas você pode fazer com a estrutura do mecanismo de armazenamento memcached? Veja a lista acima - esse é o conjunto de problemas que estávamos tentando resolver.
Novos formatos de armazenamento na memória
Você pode escrever um mecanismo para usar um alocador de memória alternativo ou alterar a estrutura na memória do item se achar que pode fazer melhor. A implementação do memcached do Facebook, por exemplo, reduz a precisão do LRU para economizar uma quantidade considerável de espaço em sua escala. Garantimos que isso possa ser facilmente implementado como um mecanismo.
Se você é fã de C++, pode criar rapidamente um mecanismo que armazena objetos de itens em um mapa STL. Trond Norbye usou isso como exemplo em uma postagem de blog no ano passado.
Armazenamento persistente
Um dos primeiros testes de mecanismo adequados foi um mecanismo híbrido de armazenamento RAM/flash. Trond também fez uma pequena demonstração do mecanismo de armazenamento SQLite.
A Zynga está executando um mecanismo de armazenamento persistente na produção por trás de seus aplicativos FarmVille e Cafe World usando o NorthScale Membase Server, que agora está em versão beta privada.
Multitenancy
Combinado com o SASL, conseguimos criar um mecanismo multilocatário bastante simples que permite a criação de caches lógicos completamente isolados em uma única instância do memcached.
Esse mecanismo é particularmente interessante porque também lida com extensões de protocolo para gerenciar com segurança os contêineres lógicos de forma independente em suas instâncias de servidor.
Motores sem garantia de desempenho
Alguns dos projetos do memcached mencionados acima atuam como proxies, nos quais se comunicam com outras instâncias do memcached, injetando inteligência entre o cliente e o servidor.
Um autor que escreve um proxy como um mecanismo tem tudo fácil. Um mecanismo pode informar ao servidor que não pode atender a uma solicitação instantaneamente e sair para trabalhar em seu próprio thread até que esteja pronto. O cliente será suspenso sem afetar nenhum outro cliente. Quando a solicitação estiver pronta, ele poderá notificar que a E/S foi concluída e preparar a resposta.
Isso é útil para muitas outras coisas além de proxies, é claro. Eu esperaria que qualquer mecanismo de armazenamento persistente implementasse o mesmo tipo de coisa.
Novos conceitos de armazenamento
Também deve ser muito fácil criar um mecanismo que armazene dados de forma consideravelmente diferente do tipo chave/valor com o qual você está acostumado.
Se você quiser criar um servidor de tipo de dados abstrato, já temos a estrutura para você e mantemos o núcleo testado, portanto, basta criar sua parte e pronto.
Para onde podemos ir a partir de agora?
O único tópico que não abordamos aqui na estrutura do mecanismo é como um mecanismo pode dar suporte à replicação (ou seja, lidar com o caso do repcached). Temos ideias e protótipos que permitem que os criadores de mecanismos façam tudo o que precisam fazer sem adicionar sobrecarga desnecessária ao resto do mundo.
E esse é o ponto principal da ramificação do mecanismo: você só paga pelos recursos de que precisa.