Posts com o tag ‘mencached’

FISL 10 – Aplicações Web escaláveis.

Quinta-feira, 2 de julho de 2009 por Alessandro Santos

Na última edição do Fisl tivemos a oportunidade de conhecer algumas soluções implementadas tanto por grandes empresas quanto por startups para garantir que suas aplicações web obtivessem um alto grau de performance, capacidade e, principalmente, escalabilidade.

Foram expostos alguns cases de infraestrutura de aplicações web com um alto volume de transações como, por exemplo, o boo-box, o Drimio e aplicações desenvolvidas pela globo.com.

Algumas das implementações de infraestrutura usadas por diversas empresas de médio/grande porte já são “antigas” e populares no mundo web, mas com o advento de novas tecnologias para load balance, cached, etc, fazem a tarefa de deixar uma aplicação web escalável, um pouco mais fácil de implementar e manter.

Abaixo seguem os itens mais abordados pelos desenvolvedores presentes no Fisl no tocante a escalabilidade em ambiente web.

Infraestrura em camadas:

A divisão da aplicação web em camadas permite que cada uma delas seja tratada de forma individual.
Essa divisão permite as melhores praticas para garantir que a escalabilidade seja aplicada diretamente na camada que venha a se tornar um gargalo na aplicação.

Arquitetura em camadas.

Load Balanced (Balanceadores de carga):

O uso desse artefato tanto na camada de aplicação quanto na camada de acesso a dados permite escalar a aplicação de forma horizontal.
Escalar na horizontal permite que em uma situação em que aplicação já não tenha um tempo resposta aceitável devido ao alto volume de acessos (performace x capacidade) tenha seu estado normalizado apenas por incluir um novo servidor na infraestrutura da aplicação, ou seja, na camada que foi afetada pelo problema.

fluxo

Banco de dados:

Uma prática comum em sites de médio/grande porte é, além do uso de balanceadores, a divisão de requisições de modificação de dados (insert, update e delete) e leituras em diferentes bases de dados (select).
A sincronização dos dados em todas as bases envolvidas é feita por meio de replicação entre as bases.
O uso de tipo de dados corretos, índices em tabelas e boas práticas na construção de consultas ou store procedures trazem um ganho de performance considerável. Um DBA sempre é bem vindo.

Cached:

Em grande parte da cases no Fisl relacionados ao assunto desse post o termo cached sempre esteve presente nas aplicações apresentadas.
Nesse quesito o memcached, já consolidado na comunidade, foi o sistema de cached mais usado para armazenar conteúdos como resultados de queries SQL, sessões de usuários, css, javascripts, etc.

Monitoração/métricas:

Manter uma aplicação web sob controle requer monitoração constante.
O uso de ferramentas de monitoramento/métricas permite-se alertas sobre possíveis problemas de performance, falhas de hardware, bugs na aplicação e também ajuda com capacity planning.
Apache ab, nagios, cacti, mrtg, snmp, jmeter, firebug foram os mais citados.

Arquivos estáticos:

Deixar arquivos estáticos como css, imagens, javascripts, etc em um servidor a parte e se possível carregar esses dados em memória, reduzindo assim a carga no servidor de aplicação, se tornou um excelente prática.
Deixando o servidor de arquivos estáticos em um subdomínio pode-se tirar vantagem do fato de navegadores modernos serem capazes de carregar arquivos de múltiplos domínios simultaneamente.
Outras melhorias de performance em arquivos estáticos podem ser verificadas aqui.

fluxo11

Algumas dicas deixadas pelos palestrantes:

    - Procurar fazer transações curtas e comandos simples no banco de dados.
    - Regras de negócio na aplicação. Banco de dados apenas para armazenar dados.
    - Use cached sempre que possível.
    - Sessões de usuário devem ser armazenadas em banco ou cached facilitam a escala da aplicação.
    - Eliminar possíveis SPOF (Single point of failure).
    - Coletar estatísticas de performance. Capacity planning deve ser feito com dados reais e não com abstratos.
    - 80% a 90% do tempo de resposta para o usuário final é gasto no frontend da aplicação. Otimize ao máximo essa camada.
    - Linguagem/framework de programação por si só não escala.

Apresentações originais:

Boo-box/Marco Gomes : http://www.slideshare.net/marcogomes/construindo-uma-empresa-de-servio-web-baseada-em-software-livre-e-colaborao-fisl-10

Drimio/Elton Luís Minetto : http://www.slideshare.net/eminetto/app-web-escalaveis-fisl

Globo.com/Camila Dias : http://www.slideshare.net/camilapdias/fisl10-mysql-na-globocom-por-camila-dias-1663778


Switch to our mobile site