BT

Construindo sistemas escaláveis para milhões de usuários: a experiência de um empreendedor

por Mário Henrique Trentim em 31 Out 2011 |

Joseph Perla, fundador dos projetos Labmeeting e Turntable.fm, escreveu sobre sua experiência como empreendedor e desenvolvedor nos projetos de suas duas últimas startups, apresentando técnicas para construir sistemas web escaláveis.

Perla cita e se baseia em um artigo de Butler Lampson, Hints for Computer System Design, que trata do design de sistemas web modernos. Perla usa como  exemplo o Labmeeting (projetos de que foi fundador), um sistema de buscas voltado para a área biomédica e uma rede social de cientistas. Ele sugere que os princípios de Lampson podem ser aplicados para quaisquer grande sistemas.

Simplicidade e foco

Perla é adepto do mantra “Keep it Simple.” Diz que criou as APIs muito antes de construir o site do Labmeeting. Isto é, o design de acesso aos dados, segurança e fluxo de dados foi feito antes de criar as interfaces web. 

A simplicidade em cada interface é a chave do sucesso, juntamente com funções bem definidas e focadas de cada módulo e submódulo da API.

Todo o front-end do Labmeeting utiliza menos de 30 métodos em 5 módulos disponíveis na API.

Faça corretamente

Perla revela que, desde o primeiro dia, criou testes automatizados para o Labmeeting de modo a identificar bugs que pudessem ser introduzidos durante o desenvolvimento. A equipe já sabia que seria um site complexo e dinâmico, o que torna difícil modelar seus estados e funcionamento. Por isso, ele ressalta a importância de que cada método da API funcionasse perfeitamente tanto nos casos normais quanto nos casos extremos. Foram feitos testes funcionais, testes nos módulos, testes de integração e, por fim, testes com requisições reais. 

Os testes eram rodados a cada commit e todos os bugs tinham que estar resolvidos antes de escrever novo código.

Perla ressalta que o Labmeeting utiliza muito ténicas AJAX para aumentar a velocidade de atualização e carregamento das páginas. Ele implementou uma biblioteca capaz de criar interações complexas de AJAX, sem a escrita de código JavaScript. Isso permitiu evitar muitos bugs; também aumentou o desempenho, devido à centralização do código e à não-execução de JavaScript. 

Com a biblioteca, chamada Pebbles, só é necessário usar tags HTML, mas todo o poder do JQuery permanece disponível, inclusive o uso de seletores do CSS3 como argumentos. Perla destaca que o serviço web para aprendizado de idiomas, Memrise utiliza intensamente dessa biblioteca.  

Flexibilização da interface com parâmetros

Buscando manter a simplicidade sem perder a flexibilidade, a equipe do Labmeeting definiu parâmetros básicos para a filtragem de artigos. Mas como os parâmetros são procedimentos, caso um cliente tenha uma necessidade especial de procura, é possível escrever seus próprios procedimentos. Dessa forma, a interface foi mantida simples, e foi acelerado o desenvolvimento:

Isso permitiu que o backend fosse desenvolvido muito rapidamente, embora isso significasse que frontends como aplicações iPad e Android demorassem um pouco mais para serem criados.

Continuidade

Mantenha as interfaces básicas estáveis. É preciso ter um ponto de partida caso seja necessário modificar algumas interfaces.

Perla diz que as APIs do Labmeeting e Stickybits (outro projeto que fundou) são versionadas. Assim, oferecem compatibilidade com as funcionalidades de versões prévias, enquanto são introduzidas melhorias e modificações. 

Perla compartilha outro dica: escrever as rotinas iniciais rapidamente e implementar protótipos, isto é, colocá-los em funcionamento. Por exemplo:

A primeira versão da funcionalidade de buscas em PDF verificava toda a coleção de PDFs do usuário e fazia uma busca em memória. Uma versão totalmente otimizada seria mais complexa, mas muitas rotinas foram escritas com as funções básicas para depois serem melhoradas.

As rotinas são projetadas com a ideia de serem colocadas em funcionamento rapidamente com as mínimas funcionalidades necessária, e os códigos eram otimizados e reescritos à medida que eram identificados gargalos.

O Labmeeting foi construído em módulos separados (silos) para que cada um pudesse operar de forma independente e oferecesse o máximo de flexibilidade. A estratégia de utilizar módulos tem a ver com um outro conselho dado por Perla: “Use uma boa ideia novamente em vez de generalizá-la.”

Lide com todos os casos

Perla lembra da boa prática de “tratar os casos normais e os casos extremos separadamente”, explicando que os casos especiais e os piores casos devem ser tratados utilizando métodos separados daqueles usados nos casos normais. Ele reforça a especialização dos métodos (no sentido de realizar uma única ação, de modo focado), além da modularização e o uso de uma biblioteca dedicada. 

Observando o código, diz, é mais fácil identificar o tratamento de casos especiais quando existem métodos específicos. Ou seja, os casos extremos não são exceções de métodos genéricos; existem regras separadas para casos normais e extremos.

Performance

Por último, Perla trata da velocidade. Ele sugere, “em caso de dúvida, divida os recursos de maneira fixa”:

Colocamos o índice do banco de dados em uma máquina separada do índice de pesquisas do Solr. Havia milhões de consultas de pesquisas chegando ao sistema, e não queríamos que elas reduzissem a velocidade do banco de dados e portanto a operação normal do site. [...] Usuários externos do site [não logados] faziam apenas leituras no índice. Isso permitiu escalar o índice de pesquisas independentemente do banco de dados.

Outra recomendação é utilizar cache para as operações mais recorrentes e de maior custo computacional. No caso do Labmeeting, que necessita de muitas pesquisas, isso foi uma fator fundamental.

Perla sugere ainda que se realize computação em segundo plano sempre que possível.

Depois que um usuário faz o upload de um PDF para o Labmeeting, o sistema realiza um processo de análise e normalização, podendo converter o arquivo em formato padrão, extrair metadados e até duplicá-lo. 

Dessa forma, ainda que  o processo  seja demorado, evita-se que o servidor fique sobrecarregado ou bloqueado quando o arquivo for requisitado para leitura.

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber menssagens dessa discussão

Dê sua opinião

Conteúdo educacional

Feedback geral
Bugs
Publicidade
Editorial
InfoQ Brasil e todo o seu conteúdo: todos os direitos reservados. © 2006-2013 C4Media Inc.
Política de privacidade
BT