Mango: The Go Language Driver no MongoSP

Gustavo Niemeyer tem um currículo de encher os olhos: é um dos commiters externos da linguagem Go, foi tech leader do projeto Landscape, sistema distribuído de gerenciamento de máquinas Ubuntu e trabalhou no Storm, um ORM que o levou a se aproximar do MongoDB. Atualmente lidera o projeto Ensemble na Canonical, e durante muito tempo foi commiter da linguagem Python.

Já trabalhou com diversas linguagens e define-se como um hacker “amador”, no sentido mais puro e belo da palavra. Gustavo interessou-se pela linguagem Go por conta da “simplicidade e pela forma como as coisas funcionam“, conforme explica, em suas palavras: “os caras que estão trabalhando nessa linguagem são os mesmos caras que a gente estuda na universidade, que estão há 30, 40 anos fazendo isso: tem o Rob Pike, o Ken Thompson, o Russ Cox. Então para mim o que me leva à linguagem é a soma de tudo o que ela oferece“.

O driver mgo

Atualmente essa biblioteca é uma das 10 mais utilizadas e apresenta características únicas.

E o que há de interessante nela?

Vamos por partes, com demonstrações no código – que você poderá acompanhar pelo vídeo, abaixo neste post – e pelos comentários de Gustavo Niemeyer, a seguir:

SESSÕES: A complexidade fica dentro do driver. “Você não se preocupa com caching de conexões, com quantas conexões irá utilizar, não precisa se preocupar se esse cluster vai mudar de master, nada disso é necessário. A sessão permite que você abstraia completamente o conceito de que existem várias máquinas lá atrás“.

Características:

– Detecção de servidores
– Remoção de servidores problemáticos
– Cache de conexões
– Failover de master
– Queries aguardam por servidores ok

CONTROLE DE CONSISTÊNCIA

– Modos:
Strong -> somente master (padrão)
Monotonic -> 1 slave, move pro master na escrita
Eventual -> N slaves, usa master na escrita

– Otimização de recursos
– Distribuição de carga
– Transição a qualquer ponto
– Funciona com mongos (!)

CÓPIA DE SESSÕES

Você tem uma sessão, todas as conexões estão ali dentro, você pode passar para outra área da aplicação, pode copiar a sessão, que todas as conexões e caches serão mantidos, e o resto da aplicação vai poder utilizar aquela mesma sessão e vai fechar aquela sessão ao final – porque aquela sessão foi copiada – e é fechada quando não está mais sendo utilizada. Internamente, tudo funciona normal“.

PRE-FETCHING

“O pre-fetching permite estimar uma porcentagem tal que, quando o número de documentos que restam para serem processados atingir essa estimativa, ele entra com o próximo batch em background. O driver lê que aquele conjunto de objetos já foi processado, e vai buscar mais um para deixar na fila e consumir o resto. Novamente, é só um setting que precisa fazer uma vez e a aplicação toda não precisa ser modificada, funciona normal”.

ITERAÇÃO SIMPLIFICADA

A iteração simplificada é uma forma bem conveniente de não se preocupar com os ‘erros’ que podem surgir na aplicação e assim por diante. Ela permite que o driver faça toda a ‘mágica’ de buscar objetos.

TIPAGEM CONFORTÁVEL

“MongoDB não é algo que tenha um schema fixo. Ele tem um schema variável e pode ter tipos diferentes no mesmo campo.”

AUTENTICAÇÃO INTEGRADA NO CACHE

– Login em várias bases
– Válido durante a sessão
– Sessões clonadas mantêm autenticação
– Strong/Monotonic/Eventual sem problemas

OTIMIZADO PARA A CONCORRÊNCIA

Uma das coisas interessantes do Go é a questão da concorrência. “A gente pode criar 100 mil “Go routines” sem problemas: rapidamente, com baixo consumo de memória, mesmo que tenha uma única thread no sistema operacional, ele pode utilizar essas 100 mil “Go routines” sem problemas, com switch rápido entre elas. Isso é uma coisa que eu queria explorar no driver, queria que fosse thread-safe, queria permitir que esse tipo de coisa fosse utilizada de forma confortável.

EXCELENTE DOCUMENTAÇÃO:

http://goneat.org/lp/mgo

REALMENTE TESTADO

“Dei bastante atenção aos testes porque queria colocar o mgo em ambientes de produção de alto uso. Então eu não quero que amanhã mude uma coisa no Go ou no Mongo ou eu cometa algum erro dentro da base de dados e a faça quebrar. O mango pode ser utilizado para sites e blogs e até para um sistema grande que estiver em desenvolvimento e que irá utilizá-lo para um file system distribuído. Então o teste é extremamente completo”.

Características:

– Test suite completo
– Clusters de várias máquinas
– Situações de falha
– Failover
– Comunicação sobre mongos
– 10 mongodb + 2 mongos

Assista à íntegra da palestra de Gustavo Niemeyer no MongoSP 2011:

Veja também os slides da apresentação dele em:
http://labix.org/presentations/mongosp-2011/

Mais referências:

http://labix.org/mgo
http://niemeyer.net

Tags:, , , , , , , , , , , ,

Categorias:

Gonow

O blog Gonow Tecnologia é voltado para publicação de notícias sobre eventos e temas relacionados ao mercado de Tecnologia de Informação e Comunicação (TIC), Design e User Experience (UX), além de rico conteúdo técnico - incluindo ví­deos na íntegra de palestras sobre os assuntos divulgados - e referências sobre as mais diversas linguagens de programação, frameworks e plataformas de desenvolvimento.

Veja todos os posts de "Gonow"

Comments are closed.