O Couchbase Server é simples de desenvolver por sua própria natureza. Modelar seus dados, como muitos de meus colegas costumam dizer, é simplesmente uma questão de organizá-los como o mundo natural ao seu redor. Sei que essa parece ser uma ideia extremamente simples, mas muitos desenvolvedores de software tiveram que lidar com a incompatibilidade de impedância ao criar o software entre os usuários e seus dados.
Quando começamos a criar o antecessor do Couchbase Server 1.8, o Membase Server, tínhamos uma noção muito boa de como as pessoas já estavam fazendo isso com aplicativos de grande escala. A compatibilidade com o memcached significava que você poderia pegar um aplicativo existente, escrever algumas linhas de código negativas (ou seja, removê-las, não escrever código mal-humorado!) e estar pronto e funcionando no Couchbase Server.
A mágica para isso foi fazer proxy do lado do cliente ou do servidor com o Moxi. Já temos uma taxa de transferência tão alta e uma latência tão baixa que a sobrecarga do Moxi não é perceptível na maioria das implementações.
Também desenvolvemos alguns clientes que sabiam, em seu núcleo interno de algoritmo de hash, como encontrar ou armazenar um dado. Os engenheiros em nós diziam que essa era a maneira pura. Muitos de nossos usuários concordavam e, com frequência, recebíamos solicitações sobre a criação de bibliotecas de clientes mais inteligentes, mas compatíveis, para outras plataformas. Se fizéssemos isso, simplificaríamos ainda mais, removendo a camada bastante transparente, mas ainda necessária, do Moxi.
A partir de hoje, tornamos as coisas ainda mais simples e rápidas onde o código encontra o fio.
Com a nova versão do Couchbase Server 1.8, temos um conjunto de bibliotecas de clientes PHP, Ruby e C que sabem tudo sobre um cluster e como trabalhar com ele. Mantivemos exatamente ou quase exatamente a mesma API. Isso facilita as atualizações para a nova biblioteca de clientes. Mas não paramos por aí, também investimos em embalagens modernas, distribuição de software e melhor documentação para os usuários Java e .NET existentes. Também simplificamos e otimizamos o site com o desenvolvimento de software em mente. Diga-me o que você achou.
Em seu blog, John Zablocki apresenta o novo SDK DO .NETenquanto Rags Srinivas cobre as atualizações em ambos os Java e Rubi SDKs. Nosso próprio Jan Lehnardt também faz um rápido resumo sobre o PHP SDK. PHP e Ruby obtêm sua inteligência do novíssimo SDK C (também conhecido como libcouchbase). Ele é novo desde o início e foi desenvolvido para oferecer velocidade e portabilidade.
Apenas para dar um pequeno exemplo do que quero dizer, aqui está uma amostra das operações da nossa biblioteca de cliente Ruby criada sobre a libcouchbase:
O tamanho do valor pequeno é: 19 bytes
O tamanho do valor grande é: 4189 bytes
usuário sistema total real
set: dalli 0.640000 0.310000 0.950000 ( 2.280556)
set: memcached 0.260000 0.180000 0.440000 ( 1.741302)
set: memcached:buffer 0.070000 0.120000 0.190000 ( 1.242726)
set: couchbase 0.220000 0.270000 0.490000 ( 0.930583)get: dalli 0.660000 0.250000 0.910000 ( 2.348882)
get: memcached 0.240000 0.390000 0.630000 ( 2.859149)
get: memcached:buffer 0.290000 0.310000 0.600000 ( 2.778201)
get: couchbase 0.260000 0.260000 0.520000 ( 0.907956)get-multi: dalli 0.910000 1.150000 2.060000 (200.106302)
get-multi: memcached 0,350000 0,720000 1,070000 (200,054008)
get-multi: memcached:buffer 0.350000 0.510000 0.860000 (200.028848)
get-multi: couchbase 0.210000 0.140000 0.350000 ( 0.442803)
Isso mostra o tempo de execução na CPU e no relógio de parede para uma carga de trabalho fixa. Números menores são melhores, é claro. O código do benchmark está no cliente ruby.
Definitivamente, respeito os outros clientes e ainda fornecemos compatibilidade perfeita para eles por meio do Moxi, mas você pode ver facilmente que, ao adicionar alguns recursos inteligentes, conseguimos aumentar a taxa de transferência em 150-200% (e muito, muito mais em um caso específico). Não é sempre que você vê esse tipo de aumento de velocidade com um software maduro!
Vimos resultados semelhantes na biblioteca de clientes PHP. Tenho certeza de que será um material importante para simplificar as implementações e oferecer espaço extra em implementações de desempenho crítico
Vá direto para a área de seu interesse, seja Java, .NET, PHP, Ruby ou C. Há também alguns outros clientes experimentais em andamento. Se você tiver alguma dúvida ou feedback, informe-nos nos fóruns.
Feliz hacking!
p.s. Estou falando sério sobre o desejo de receber feedback sobre o novo site. Entre em contato comigo.