FISL 10 – A tecnologia que liberta

Picture 14

Às 06:30 da manhã do dia 24 de junho, os ninjas da boo-box partiram para Porto Alegre para participarem do maior evento sobre Software Livre da América e um dos maiores do mundo, o Fórum Internacional Software Livre que em sua décima edição contou com 8.232 participantes e nomes de peso como Peter Sunde, criador do The Pirate bay, Richard Stallman e Jon “Maddog” Hall.

Picture 15fotofisl

Ao chegarem em Porto Alegre mal passaram no hotel e já foram diretamente para a PUC-RS onde foi sediado o FISL 10, um auditório lotado os esperava para ouvir a palestra do fundador e CIO da boo-box Marco Gomes, que falou sobre os desafios que precisam ser superados na construção de uma empresa de serviço web baseada em software livre e colaboração.

Empresas e órgãos públicos utilizarem software livre já não é mais nenhuma novidade, a robustez e a redução de custos provenientes do seu uso já foi demonstrada em inúmeros casos. Na Europa mais de 7% das empresas utilizam software livre de CRM e 9% das empresas com mais de 50 funcionários usa alguma aplicação de back-office de código aberto segundo dados da IDC. Já no Brasil recentemente uma pesquisa realizada pelo Instituto Sem Fronteiras (ISF) revelou que 73% das maiores empresas (mais de mil funcionários) também utilizam software livre.

Por isso o ponto-chave da palestra do Marco Gomes foi como as empresas ou órgãos públicos que usam software livre podem contribuir para o seu desenvolvimento colaborando com a comunidade.

Palestra no FISL 10

Essa foi a primeira vez em que a boo-box entrou como patrocinadora do FISL e por mais que essa seja uma forma de retribuição à comunidade por tudo o que o uso de software livre provê, pela palestra ficou bem claro que a verdadeira colaboração provém da interação, da cooperação, seja propondo melhorias, discutindo idéias ou solucionando bugs, trabalhando juntos afinal.
Colaboração é o que mantém a comunidade software livre viva

A palestra é finalizada apontando que para uma empresa de serviços web a colaboração possivelmente deve acabar culminando na abertura de sua prórpia API, o que a boo-box fez em Outubro de 2007. A nova versão da API foi liberada em Abril de 2009 e divulgada durante o FISL.

folder

O mais interessante em construir uma empresa de serviços web baseada em software livre e colaboração é poder dividir os créditos com milhares de outras pessoas.

Abaixo alguns nomes que têm sido importantes para a construção da boo-box e fica o convite para todos os que já utilizaram a nossa API que comentem no post deixando seus nomes e a aplicação ;)

boo-box-it! para WordPress – Richard Barros
image-boo-box – Daniel Santos

Deixe um comentário

A infraestrutura de servidores Web do Sistema boo-box

Nos últimos anos uma série de padrões de arquitetura de softwares web se consolidaram e foram popularizados em frameworks[bb] que facilitam o desenvolvimento e a manutenção destes sistemas. Ao mesmo tempo, servidores tiveram o custo reduzido e o acesso facilitado. Criar um projeto web se tornou mais simples, ágil e barato, mas se ele prosperar será preciso lidar com um velho desafio: escalabilidade.

A boo-box passou por esse desafio e hoje possui uma infraestrutura em camadas, capaz de escalar horizontalmente e que hoje tem robustez pra servir milhares de requisições por minuto. Neste post iremos apresentar algumas soluções usadas atualmente pra garantir boa performance do Sistema de Publicidade Para Mídias Sociais, como Ruby, MERB, CouchDB, Thin, Nginx, Beanstalkd.

Screenshot do glTail rodando no server Kami

A infra boo-box

Nossa infraestrutura é uma combinação de softwares Open Source consolidados há anos, como MySQL, com outros mais recentes e pouco usados, que em geral consomem menos recursos, são mais simples ou apenas mais adequados à situação.

É importante salientar que este texto reflete a situação da infraestrutura atual (maio de 2009). A taxa de novos Publishers associados ao Sistema e crescimento de visitação dos Publishers já associados nos leva a alterar semanalmente a estrutura de servidores, adicionando novas máquinas ou modificando componentes da aplicação.

Infraestrutura de servidores web boo-box

Identificação dos servidores

Nomear servidores sempre é uma decisão difícil para o time de desenvolvedores, alguns usam nomes de planetas, elementos da tabela periódica, nomes de letras gregas. Nós usamos nomes de personagens do anime Dragon Ball Z.

Static Files

Arquivos estáticos são os que não dependem de processamento do servidor, como imagens, CSSs[bb], JavaScripts[bb]. Na estrutura boo-box eles ficam em um subdomínio que aponta diretamente para um servidor dedicado, diminuindo a carga dos nossos load balancers.

Os arquivos estáticos são carregados previamente para a memória RAM, melhorando o tempo de resposta do Sistema. Esta máquina roda o servidor HTTP nginx.

Load Balancers

São as máquinas que recebem as requisições dos usuários e direcionam a carga para um dos servidores de apliçação. Na infra boo-box há dois load balancers, ambos associados ao DNS para boo-box.com

O load balancer precisa responder muito rapidamente, por isso ele não processa regras de negócio. Cada um dos servers roda o servidor HTTP nginx.

Cluster de aplicação

O cluster de aplicação é composto pelo conjunto de servidores que processam nossas regras de negócio. São eles que decidem que anúncio será exibido na vitrine, o que acontece quando há um clique, o que fazer com os dados de novo Publisher cadastrado no Sistema.

Cada server roda aproximadamente 100 instâncias do framework Ruby MERB com o servidor HTTP Thin (não, nós não usamos RubyOnRails :).

Cluster de banco de dados

Quando uma informação precisa ser gravada em nosso sistema, como novo Publisher cadastrado, alteração nas preferências, ou exclusão de anunciante, esses dados são guardados em nosso banco de dados.

O cluster de banco de dados contém a máquina Vegeta (Master), que recebe as informações a serem gravadas no banco, e máquinas secundárias Bulma e Ubb (Slave) de onde os servers de aplicação lêem os dados.

Como notado por um leitor do blog, o nome do personagem é Uub, mas o ninja que batizou o server precisou digitar o nome usando os pés porque nossos braços estavam estendidos pra cima energizando uma Genki Dama, digitar com os pés é difícil, ele errou a tecla e o nome server e ficou Ubb mesmo :)

Dividir escrita e leitura em diferentes servidores foi uma das mais eficientes atitudes que tomamos nos últimos meses pra melhorar performance e uptime do Sistema boo-box.

Este cluster roda um banco MySQL, dividido entre os servidores segundo escrita e leitura.

Um caso real de uma empresa contribuindo com a comunidade de Software Livre :)

Usamos o Sequel como ORM na comunicação entre aplicação e banco de dados. Quando precisamos replicar o banco, gerando a estrutura de Master e Slave, o Sequel não conseguia ler do Slave, por mais que fizéssemos tudo conforme a documentação.

Entramos em contato com os desenvolvedores do ORM no canal de IRC e, após algumas horas de testes, resolvemos o problema em conjunto.

Este é apenas o mais recente dos casos, nós já contribuimos com a comunidade de Software Livre[bb] de diferentes maneiras, fazemos isso porque temos consiência que nossa tecnologia é fruto do Open Source.

Cluster de log do Sistema

Todas as ações ocorridas em nosso Sistema são gravadas no log do Sistema. Vitrines visualizadas, cliques em anúncios, ações efetuadas em sites de parceiros, tudo fica no log.

Periodicamente processamos o log raw (cru), geramos estatísticas e fazemos um backup. Com isso liberamos o log raw para receber mais dados sem perder as informações do passado e mantendo uma boa performance no Sistema.

Usamos o Analogger como componente de log, porém, questões de performance e escalabilidade fez com que buscássemos outra solução. Atualmente o log do Sistema está sendo migrado para estrutura MySQL, e é dividido em máquinas Master (escrita) e Slave (leitura).

Cache de produtos

A maior parte dos anúncios exibidos nas vitrines boo-box são produtos ofertados por e-commmerces. Como as informações dos produtos não precisam ser mantidas ao longo do tempo fazemos um cache temporário dos dados.

O cache confere robustez ao Sistema, que continua funcionando mesmo que o e-commerce demore pra responder ou saia do ar.

Nossa estrutura de cache de produtos é formada por dois componentes principais:

Fila

Usamos Beanstalkd como serviço de fila para requisições de produtos. Cada vitrine boo-box tem tags associadas, cada nova tag ainda não cacheada é inseria nesta fila que será consumida nos próximos segundos, não atrapalhando o fluxo de funcionamento da aplicação.

Há um serviço independente que consome a fila, indo nos e-commerces procurar pelos produtos relacionados com cada tag e colocando os dados nas máquinas de cache.

Cluster de cache de produtos

Cada servidor que armazena dados de produtos roda CouchDB, um banco de dados de documentos JSON.

O principal recurso consumido por estas máquinas é espaço em HD, lotamos centenas de gigabytes em poucos dias, principalmente por conta da heterogeneidade das ofertas exibidas no Sistema boo-box, são milhões de produtos diferentes.

O resultado

Screenshot do glTail rodando no servidor Korin

Nas[bb] últimas semanas o tempo de resposta e uptime do Sistema boo-box melhorou visivelmente por conta das soluções acima apresentadas, resultado do trabalho e experiência dos ninjas.

Se você tem alguma crítica, dúvida ou sugestão, estamos sempre dispostos a ouvir, a caixa de comentários é pra você :)

Post escrito por Marco Gomes e Mauricio Maia.

Comments (24)

Estendendo a boo-box

A tecnologia da boo-box é projetada pra ser aberta, ou seja, qualquer programador pode criar novos aplicativos e usando nosso sistema de recomendação de ofertas.

Graças a essa abertura usuários boo-box têm constantemente criado novas maneiras de exibir ofertas boo-box:

Abrindo nossa plataforma para criação de novos aplicativos, damos aos usuários poder para usar nosso sistema de recomendação de produtos de maneiras criativas e inéditas. Nós ganhamos com o tráfego, o programador ganha com o conhecimento adquirido e com as comissões geradas por seu aplicativo.

Ganha-ganha, é assim que a boo-box faz.

Comments (1)

Site em francês e matança de bugs

Semana passada lançamos nosso site em francês. Todos os textos foram traduzidos, apenas o screencast continuará em inglês. Se você sabe francês, que tal dar uma olhada?

Visite o site em francês agora.

Além disso, estamos trabalhando intensamente pra matar os bugs sobreviventes na aplicação, se você encontrar algum bug vivo correndo por aí me avise ;)

Deixe um comentário