Hoje tive o prazer de passar algum tempo com Attila Kisko, um colaborador do Membase e autor e mantenedor do Enyim - o Biblioteca do cliente Membase para .NET. Nas férias em São Francisco, vindo de Budapeste, na Hungria, Attila veio ao escritório para uma visita. Gostei da nossa conversa e pensei em compartilhar um pouco dela com outras pessoas que talvez queiram saber um pouco sobre o homem por trás de uma das bibliotecas de clientes de código aberto mais populares e amplamente implantadas na comunidade de usuários do Membase.
Como você começou a programar?
Comecei muito jovem, com 7 ou 8 anos, desenvolvendo no Commodore 64. Eu codificava em linguagem assembly e gastava a maior parte da minha energia naquele momento para hackear jogos. Também passei um tempo com o HT-1080, que era uma versão húngara do TRS-80.
A partir daí, fiz a transição para a plataforma IBM-PC e estava programando em Turbo Pascal e usando o Borland Delphi. Nesse momento, comecei a desenvolver software comercial e criei uma solução completa e empacotada para um amigo meu, incluindo um instalador, embalagem de CD e uma interface de usuário elegante. Embora meu amigo nunca tenha me pago pelo trabalho : ), ele me deixou com uma demonstração muito boa de meus recursos.
Essa demonstração me levou ao meu próximo cargo na Fathom Technologies, uma empresa de terceirização de desenvolvimento na Hungria. Entrei na Fathom como um dos primeiros funcionários e permaneci na empresa por sete anos, enquanto crescíamos exponencialmente. Minha função lá me deu a oportunidade de viajar bastante e de trabalhar com várias grandes empresas de tecnologia, como Microsoft, Autodesk, Oracle e outras. A Fathom foi adquirida pela Sistemas EPAM. Como sempre acontece, o avanço na empresa me levou de programador a arquiteto e a gerente. Quanto mais eu me afastava do código, menos feliz eu ficava, então decidi sair e dedicar toda a minha energia a FreeBlog que era um projeto de hobby que iniciei em 2003. Agora é meu principal "trabalho diário" e estou adorando.
Como o projeto Enyim começou?
Iniciei o projeto por necessidade. Eu estava procurando uma solução de cache distribuído para usar no Freeblog.hu e, embora a Microsoft tivesse alguma tecnologia (que mais tarde se tornaria o Project Velocity e agora o AppFabric Caching), o Memcached era uma solução muito melhor. Naquele momento, no entanto, havia apenas uma biblioteca de cliente para Windows e ela era uma porta de uma biblioteca Java (uma biblioteca anterior à biblioteca Spy de Dustin). Eu não confiava muito no código e decidi que escreveria o meu próprio código desde o início em C#.
Quando a Membase (que, naquele momento, era a NorthScale) apresentou sua distribuição inicial do Memcached, gostei muito da direção da tecnologia e, por isso, decidi criar uma versão especial do cliente Enyim que suportasse as extensões. O Membase é ainda mais interessante, e tenho revisado o cliente para mantê-lo em sintonia com os rápidos avanços que estão sendo feitos. Estou realmente ansioso pelas extensões de consulta e estrutura de dados. Estou trabalhando em uma biblioteca de cliente Redis no momento e acredito que a combinação dos recursos do Redis com o Membase seria uma solução poderosa, que eu poderia usar no Freeblog.hu. Estou ansioso para oferecer suporte a esses recursos no Enyim : )
Você pensou em escrever o Enyim em C++ nativo e não gerenciado no Win32, em vez de .NET?
Não é bem assim. Neste momento, quase todo mundo que desenvolve no Windows está desenvolvendo código gerenciado. E é um incômodo chamar uma biblioteca não gerenciada a partir do código gerenciado para obter um ganho de desempenho mínimo (provavelmente da ordem de 10%, no máximo). Um pouco mais de memória ou uma pequena atualização da CPU para fechar a lacuna de desempenho é tudo o que é necessário para evitar esse problema.
Além disso, é muito mais fácil manter o código C#. A linguagem e o ambiente são muito atraentes.
Java feito corretamente?
Sem dúvida. E a linguagem está avançando muito mais rapidamente do que o Java neste momento. Estamos recebendo acréscimos extremamente úteis à linguagem a cada ano. O Java é um projeto muito mais lento neste momento.
Qual é a direção da Enyim? Quais recursos você planeja adicionar?
Parece estar funcionando muito bem para as pessoas. Não recebi um número enorme de solicitações de aprimoramento. Uma coisa que estou considerando é implementar o pipelining, como existe no cliente Spy Java. Não tenho certeza do quanto isso seria significativo para as pessoas, mas é algo que estou considerando. E, como eu disse antes, estou aguardando ansiosamente as extensões de funcionalidade do Membase e continuarei a manter o cliente em sintonia com essas adições.
Foi fácil ou difícil escrever um cliente Membase? Alguma dica para outros escritores de clientes?
Na verdade, foi muito fácil. O maior problema que tive foi com a documentação. Mas isso era de se esperar, já que o servidor estava sendo construído ao mesmo tempo em que eu estava construindo o cliente. A documentação disponível agora é muito boa. E Perry tem sido uma grande ajuda para responder a todas as perguntas.
O que você acha de todo o movimento "NoSQL"?
Em geral, penso no NoSQL como um código para "noLocking" e acredito que a característica mais importante é o suporte para fragmentar automaticamente um conjunto de dados entre servidores. Acredito firmemente que o futuro da computação está na nuvem, e o modelo de nuvem é um modelo de expansão. Isso é muito difícil de fazer com um modelo de dados relacional, e o NoSQL é realmente uma resposta a isso.
Você tem experiência direta com outras tecnologias NoSQL?
Sim, já usei tanto o Redis quanto o MongoDB. O Membase é uma tecnologia incrível, mas em muitos casos preciso interagir com meus dados mais diretamente no banco de dados. Uso estruturas de dados de hash e contador no Redis para implementar vários recursos no freeblog.hu. Eu provavelmente mudaria para o Membase se ele tivesse esse tipo de funcionalidade.