« nova versão HAProxy | livro Apache | Migrar do Microsoft IIS para Apache em Linux »

janeiro 06, 2007

arquitectura web para balanceamento

As infra-estruturas web actuais conjugam a necessidade de servir conteúdos estáticos (documentos, imagens, filmes, som, etc) com a componente aplicacional. É típico de um mesmo serviço web garantir as duas funcionalidades, em particular com tecnologias PHP, Perl, Python, sendo visível a degradação de desempenho com o aumento da sua utilização, uma vez que servir conteúdos dinâmicos implica a utilização de mais recursos (memória, tempo de processador, acesso a disco) do que servir conteúdos estáticos.


Tirando partido de uma funcionalidade específica do mod_rewrite, é possível segmentar as duas funções (servir conteúdos estáticos e executar a componente dinâmica), possibilitando simultaneamente uma melhoria de desempenho e menor utilização de recursos sem quaisquer alterações na componente aplicacional.

Para o conseguir, é necessário caracterizar pelo menos uma das componentes (estática ou dinâmica) no que diz respeito ao espaço de URIs, de forma a parametrizar o mecanismo que garante a divisão de pedidos. Tipicamente, esta caracterização é efectuada com base nas extensões dos ficheiros que correspondem à componente aplicacional (.pl, .php, .jsp, etc). Um outro requisito é a instalação de um serviço web que recebe todos os pedidos (apache com suporte mod_rewrite e mod_proxy) e a activação do serviço relativo à componente aplicacional num outro porto. Na prática, o primeiro serviço recebe todos os pedidos, aplica algumas regras aos pedidos e decide se deve servir de imediato os pedidos (tipicamente, conteúdos estáticos) ou se solicita o resultado dos mesmos pedidos ao servidor aplicacional.

Para efeitos de exemplo, vamos assumir que a componente aplicacional é garantida por ficheiros com a extensão jsp e que o serviço aplicacional está à escuta no porto 8080. A configuração do serviço web de frontend (que receve todos os pedidos) deverá ser semelhante ao seguinte:

<VirtualHost *:80>
ServerName apache.superbofh.org
ServerAlias www.apache.superbofh.org
...
...
DocumentRoot /srv/vhosts/apache.superbofh.org
RewriteEngine On
RewriteRule ^/(.*\.jsp.*)$ http://%{HTTP_HOST}:8080/$1 [P,L]
RewriteRule ^/?$ http://%{HTTP_HOST}:8080/default.html [P,L]
</VirtualHost>

Esta configuração garante que os conteúdos estáticos (e/ou outros que não os servidos pelos .jsp) são servidos rapidamente, e os pedidos da componente aplicacional são passados ao servidor correspondente. Para além disso, a configuração não publicita o facto de se estar a utilizar serviços diferentes para garantir as duas funções; caso seja pretendido que os clientes se apercebam deste facto, bastará alterar as flags das regras de reescrita (substituir o P por um R).

Publicado por scorpio às janeiro 6, 2007 12:24 PM

Trackback pings

TrackBack URL para esta entrada:
http://apache.weblog.com.pt/privado/tb.cgi/150152

Comentários

Comente




Recordar-me?

(pode usar HTML tags)