Professional Documents
Culture Documents
Introduo
Trabalhando na Consultoria da Microsoft Brasil tive por vrias vezes a oportunidade de lidar com
problemas de performance e escalabilidade em aplicaes. Muitas vezes conseguimos avanos
espantosos com pequenas modificaes no cdigo ou estrutura dos mdulos dos programas.
Hoje, como Arquiteto de Solues da Microsoft, sou muitas vezes chamado para explicar de forma
concisa como conseguir boa performance e escabilidade com a tecnologia .Net. Neste exerccio,
me dei conta que com alguns poucos princpios gerais conseguimos explicar muitas das boas
prticas de desenho e arquitetura que levam a bons resultados.
Este artigo apresenta estes princpios que considero como os mais bsicos e enumera algumas das
suas conseqncias tanto para o design quanto para a implementao de aplicaes.
Incio da pgina
Princpios
So seis os princpios bsicos que encontrei e que podem ajudar na deciso relativa escolha de
uma tecnologia ou padro de design.
Um ponto importante, que logo vocs iro notar, que alguns princpios so conflitantes. Isto
acontece porque estamos tentando alcanar dois objetivos ao mesmo tempo: desempenho e
escalabilidade.
O desempenho est relacionado ao quo rpido uma tarefa computacional pode ser executada.
Idealmente, o desempenho no trata da questo do limite fsico de uma mquina (seja CPU,
memria, disco, etc). Algoritmos podem ser classificados de acordo com a sua estrutura interna.
De acordo com este ponto de vista, minimizar o nmero de passos de uma computao o
objetivo prioritrio.
A escalabilidade, por sua vez, incorpora os limites fsicos questo do desempenho. Como se
comporta o desempenho quando atingimos os limites fsicos das mquinas, e que estratgias
devemos utilizar para aumentar a quantidade de processamento disponvel.
Duas so as linhas mestras para atingir maior escalabilidade: o incremento com novos hardwares
ou a substituio por novos hardwares de maior desempenho.
O primeiro denominado escalabilidade horizontal. O exemplo tpico um farm Web, onde
podemos incorporar novas mquinas ao farm para dar conta do aumento da demanda pelos
usurios finais.
O segundo a escalabilidade vertical, onde uma nova mquina mais possante substitui a antiga.
Na relao entre custo e benefcio, mais comum que a escalabilidade horizontal ganhe, no
s devido aos custos reais ($$), mas tambm devido aos benefcios de segunda ordem, como a
melhoria da disponibilidade.
Juntar estas duas perspectivas (desempenho e escalabilidade) parte da arte de um arquiteto.
Neste exerccio de equilbrio, surgiram as arquiteturas cliente-servidor, 3-camadas, n-camadas,
uso de caching, monitores transacionais, etc.
Interessante notar que todas estas arquiteturas foram estruturadas de acordo com alguns
princpios bsicos. Dentre eles, os que entendo serem mais relevantes so:
Aumentar o Paralelismo
No Estabelecer Afinidade
Minimizar Contenes
Minimizar o Uso de Recursos
Pr-alocar e Compartilhar Recursos Caros
A simplicidade nos ajuda a mant-los corretos e com um custo aceitvel. Realizamos isto via
abstraes - como tarefas, monitores de transao, etc.
Princpio 8: Use um Algoritmo e Estruturas de Dados Eficientes
Este tambm no estava listado... bvio, mas infelizmente ainda existe pouco conhecimento das
tcnicas de anlise da complexidade de algoritmos entre os desenvolvedores que tenho conhecido.
freqente o uso de estruturas de dados e algoritmos ineficientes. Existem boas referncias sobre
este assunto, embora recheadas de matemtica pesada...
Incio da pgina
Coletar todos os dados possveis que no precisem do Banco de Dados (parmetros, cache,
2.
3.
etc);
Conectar com o Banco;
Coletar todos os dados (com o mnimo de interaes) que no impliquem em lock, necessrios
para realizar a ao;
Concluso
Muitas outras tcnicas de performance podem ter seu impacto medido de acordo com os princpios
apresentados. O texto Improving .NET Application Performance and Scalability
(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenet.asp)
uma referncia bem completa sobre este assunto. Meu conselho t-los em mente em toda
deciso de design a ser feita em um projeto. O balanceamento destes princpios pode significar o
sucesso ou fracasso da sua aplicao.
Lembre-se tambm que voc no precisa de performance em todos os momentos. Como a
exigncia de performance pode levar tcnicas de razovel complexidade, voc poder estar
onerando em demasia o seu projeto. Por isto, estabelea na fase de requerimentos os pontos
crticos de performance a serem obtidos. Com isto, voc poder priorizar questes como reuso e
manutenabilidade e utilizar tcnicas de performance em situaes realmente necessrias.
Incio da pgina
Verso para Impresso
Adicionar a Favoritos